JmsTemplateを使用してIBM MQキューとの間でメッセージの送受信を行っています。 私のアプリケーションはWebSphereアプリケーションサーバー8.5にインストールされており、接続を取得するためにjndiルックアップを使用します。Spring JmsTemplateとWebSphere Application Serverの接続jndi参照
私のSpring Bean:
<bean id="jmsQueueConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="jndiTest" />
<property name="lookupOnStartup" value="false" />
<property name="cache" value="true" />
<property name="proxyInterface" value="javax.jms.QueueConnectionFactory" />
</bean>
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="jmsQueueConnectionFactory" />
<property name="receiveTimeout" value="10000" />
<property name="sessionAcknowledgeMode" value="1" />
</bean>
<bean id="mqServerDao" class="MqServerDao" >
<constructor-arg name="jmsTemplate" ref="jmsTemplate" />
</bean>
私のJavaクラス:
public class MqServerDao {
private JmsTemplate jmsTemplate;
public MqServerDao(JmsTemplate jmsTemplate) {
this.jmsTemplate = jmsTemplate;
}
public String write(byte[] request, final String correlationId)
throws Exception {
MQQueue mqQueue = new MQQueue(MQ_INPUT_QUEUE);
mqQueue.setTargetClient(WMQConstants.WMQ_CLIENT_NONJMS_MQ);
MqRequestMessageCreator messageCreator = new MqRequestMessageCreator(
request, correlationId);
jmsTemplate.send(mqQueue, messageCreator);
return messageCreator.getMessageId();
}
public byte[] read(String messageId, String correlationId) throws Exception {
MQQueue mqQueue = new MQQueue(MQ_OUTPUT_QUEUE);
mqQueue.setTargetClient(WMQConstants.WMQ_CLIENT_NONJMS_MQ);
String messageSelector = "JMSCorrelationID = 'ID:" + correlationId
+ "' AND JMSMessageID = '" + messageId + "'";
TextMessage receiveMessage = (TextMessage) jmsTemplate.receiveSelected(
mqQueue, messageSelector);
return receiveMessage.getText().getBytes();
}
}
これはそれを行うための正しい方法であれば、私は不思議と私はいくつかの質問を持っている:
- されていますCachingConnectionFactoryを追加することをお勧めしますか、またはche接続を管理するアプリケーションサーバー自体ですか?
- これはJmsTemplateを使用する正しい方法ですか? MqServerDaoの "write"メソッドが同時に2回呼び出されても安全ですか?または、 "書き込み"メソッドと "読み取り"メソッドの中に新しいJmsTemplateインスタンスを作成しますか?