A queue is a simple concept - several sources write to a queue, and one consumer reads the messages one by one in the order in which they were received. An attempt to introduce random access confuses the concept and goes against the intent with the queue.
, , bean (MDB), : MDB Q, Q'.
:
Q -> orignal consumer
:
Q -> your filtering and sorting MDB -> Q' -> original consumer
, , .
. MDB , ( Java Enterprise Edition 6 tutorial). MDB.
@MessageDriven(mappedName="jms/IncomingQueue", activationConfig = {
@ActivationConfigProperty(propertyName = "acknowledgeMode",
propertyValue = "Auto-acknowledge"),
@ActivationConfigProperty(propertyName = "destinationType",
propertyValue = "javax.jms.Queue")
})
public class MyMDB implements MessageListener {
@EJB
private MessageFilter messageFilter;
public void onMessage(Message message) {
messageFilter.filter(message);
}
}
@Singleton
public class MessageFilter {
@Resource(name="jms/OutgoingQueue")
Queue outgoingQueue;
@Resource(name="jms/QueueConnectionFactory")
QueueConnectionFactory qcf;
void filter(Message message) {
...
send(message);
}
void send(Message message) {
QueueConnection queueConnection = qcf.createQueueConnection();
QueueSession queueSession = queueConnection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
QueueSender queueSender = queueSession(outgoingQueue);
queueSender.send(message);
}
}
Java EE 6 singleton beans, .