JMSプロジェクトを使用して永続エンティティオブジェクトをMDBに送信するようにプロジェクトをセットアップしました。私はJBoss EAP 7をメッセージングプロバイダとしてApache ActiveMQを使用して使用しています。これは、パラメータとして「アカウント」エンティティオブジェクトを受け取り、キューに送信し、私のメッセージプロデューサであるJMSメッセージプロデューサはキューにメッセージを送信しません
:私はそうのようなのConnectionFactoryとキューを設定
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