我設置了一個EJB項目以使用JMS將持久性實體對象發送到MDB。我使用的是使用Apache ActiveMQ作爲消息傳遞提供程序的JBoss EAP 7。餘設置像這樣的ConnectionFactory和隊列:JMS消息生產者不會將消息發送到隊列
這是接收「帳戶」實體對象作爲參數,並將其發送到隊列我的消息生產者:
EntityEnqueueBean.java
@Stateless
@LocalBean
public class EntityEnqueueBean {
Context context = null;
public void enqueueEntity(Account accountEntity) {
try {
context = new InitialContext();
ConnectionFactory connectionFactory = (ConnectionFactory) context.lookup("java:/ConnectionFactory");
Destination queue = (Destination) context.lookup("java:/jms/queue/AccountAccessQueue");
Connection connection = connectionFactory.createConnection();
Session session = connection.createSession(true, Session.SESSION_TRANSACTED);
MessageProducer messageProducer = session.createProducer(queue);
ObjectMessage objectMessage = session.createObjectMessage(accountEntity);
messageProducer.send(objectMessage);
messageProducer.close();
session.close();
connection.close();
} catch (JMSException | NamingException e) {
e.printStackTrace();
}
}
}
MDB從隊列接收消息並對其進行處理:
AccountPersistenceMDB.java
@MessageDriven(
activationConfig = { @ActivationConfigProperty(
propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
@ActivationConfigProperty(propertyName = "destination",
propertyValue ="java:/jms/queue/AccountAccessQueue")
})
public class AccountPersitenceMDB implements MessageListener {
public void onMessage(Message message) {
ObjectMessage objectMessage = null;
objectMessage = (ObjectMessage) message;
try {
Account accountEntity = (Account) objectMessage.getObject();
System.out.println("MDB accessCount: " + accountEntity.getAccessCount());
} catch (JMSException e) {
e.printStackTrace();
}
}
}
不知道什麼,我得到錯誤的。我可能有代碼來設置ConnectionFactory和隊列錯誤,但我不確定,因爲我是Java EE的新手。任何幫助表示讚賞。
對服務器日誌的任何堆棧跟蹤?任何例外? –
@RamachandranGA不,一切正常,但MDB應該顯示結果的部分不起作用。另外,在JBoss管理面板上監視隊列顯示沒有消息在隊列上發送過。我無法確定我做錯了什麼。 –
可能是交易存在問題,而您的郵件沒有被提交。嘗試將會話更改爲此.. Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); – mendieta