アプリケーションに jms を実装するために Websphere Java クラスを使用しています。
送信者コード:
MQQueueConnectionFactory connectionFactory = new MQQueueConnectionFactory();
connectionFactory.setHostName(environment.getProperty(MQ_CONNECTION_HOSTNAME));
connectionFactory.setPort(Integer.parseInt(environment.getProperty(MQ_CONNECTION_PORT)));
connectionFactory.setQueueManager(environment.getProperty(MQ_CONNECTION_QMANAGER));
connectionFactory.setChannel(environment.getProperty(MQ_CONNECTION_CHANNEL));
connectionFactory.setTransportType(1);
final String username = environment.getProperty(MQ_CONNECTION_USERNAME);
final String password = environment.getProperty(MQ_CONNECTION_PASSWORD);
MQQueueConnection connection = null;
if(username != null && username.trim().length() > 0 && password != null && password.trim().length() > 0) {
connection = (MQQueueConnection) connectionFactory.createQueueConnection(username, password);
}
else {
connection = (MQQueueConnection) connectionFactory.createQueueConnection();
}
senderSession = (MQQueueSession) connection.createQueueSession(true, Session.AUTO_ACKNOWLEDGE);
MQQueue queue = (MQQueue) senderSession.createQueue("queue:///" + environment.getProperty(MQ_CONNECTION_QUEUE));
MQQueueSender sender = (MQQueueSender) senderSession.createSender(queue);
JMSMessage message = (JMSMessage)senderSession.createTextMessage(messageContent);
connection.start();
sender.send(message);
message.acknowledge()
レシーバーコード :
final MQQueueConnection connection = (MQQueueConnection) (useAuth ? connectionFactory.createQueueConnection(username, password) : connectionFactory.createQueueConnection());
connection.start();
final MQQueueSession receiverSession = (MQQueueSession) connection.createQueueSession(true, Session.CLIENT_ACKNOWLEDGE);
final MQQueue queue = MQQueue)receiverSession.createQueue(queueName);
MQQueueReceiver receiver = createReceiver(session, queue);
receiver.setMessageListener(listener);
これらの設定を使用してメッセージを送信すると、メッセージ リスナーはメッセージを受信しません。しかし、transacted を false にして両方のセッションを開くと、すべて正常に動作しているように見えます。理由はわかります。トランザクショナルなセッションがしたいのです。
他の詳細が必要な場合はお知らせください