我有一個消息驅動EJB的問題。 我也有包含MessageDrivenBean的應用程序Web Service和EJB應用程序。JMS和MessageDriven EJB Bean
要發送消息給JMS我使用ObjectMessage我: 這裏是我的代碼:
Connection connection = connectionFactory.createConnection();
Session session = connection.createSession(false, 1);
MessageProducer messageProducer = session.createProducer(queue);
ObjectMessage outMessage = session.createObjectMessage();
outMessage.setObject(((Serializable) operation));
LOGGER.debug("Sending message...");
messageProducer.send(outMessage);
LOGGER.debug("Sending message: done.");
messageProducer.close();
session.close();
connection.close();
當我打電話給我的web服務,我調用此方法爲好。該消息在MDB中得到並開始處理。這是我的MDB代碼:
@MessageDriven(mappedName = "jms/cbsDestination", activationConfig = {
@ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue")
})
public class OperationsBackgroundService implements MessageListener {
//Some code....
public void onMessage(Message message) {
LOGGER.debug("Got message: " + message.toString());
if (message instanceof ObjectMessage) {
ObjectMessage objectMessage = (ObjectMessage) message;
Operation operation = null;
}
它的一切正常,我得到的消息,它開始處理,它結束,因爲我期望。
但問題是: 當我發送第一條消息到MDB時,它開始處理它(OK),然後,當第一條消息正在處理時,我發送第二條消息到我的MDB,並且它也開始處理它。我知道JMS的特點是,如果我發送一條消息並且正在處理一條消息,則其他消息將等待,直到處理完第一條消息。或者我在這裏錯過了什麼?請幫忙。也許有一些屬性我忘了設置?
感謝身份證前進。
我使用的是glassfish 2.1.1,但我無法找到任何關於如何爲每個MDB創建一個用戶的信息。也許有人能告訴我?謝謝 – 2012-02-05 20:50:27
@PauliusMatulionis:看看[Tuning Message-Driven Beans](http://docs.oracle.com/cd/E18930_01/html/821-2431/abebw.html#abedi) - 它適用於Glassfish 3,但它應該指向你一個正確的方向。提示:* pool size * – 2012-02-05 21:07:41
沒錯,如果你只想處理一條消息,你將不得不限制你的MDB池爲一個實例(奇怪的用例,但可能) – Kris 2012-02-05 21:13:51