JBoss 5.1 サーバー上で実行されるSpring 3.0.5フレームワークに基づくアプリケーションがあります。
このチュートリアルに従おうとしましたが、 JBossMQ (デフォルトの JBoss 5.1 ブローカー)の代わりにActiveMQブローカーを使用します。
JBoss 構成 (destinations-service.xml) でMyQueueというキューを既に設定しています。
<mbean code="org.jboss.jms.server.destination.QueueService"
name="jboss.messaging.destination:service=Queue,name=MyQueue"
xmbean-dd="xmdesc/Queue-xmbean.xml">
<depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer</depends>
<depends>jboss.messaging:service=PostOffice</depends>
残りの構成は以下で確認できます。私は何が欠けていますか?キューの JNDI 名と接続ファクトリーを指定するにはどうすればよいですか? また、サーバー アドレス ([ConnectionFactory] Connector bisocket://localhost:4457) はどうでしょうか。
applicationContext.xml の私の設定は次のとおりです。
<bean id="connectionFactory" class="org.jboss.jms.server.connectionfactory.ConnectionFactory" />
<bean id="messageDestination" class="javax.jms.Queue" />
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="connectionFactory" />
<property name="receiveTimeout" value="10000" />
</bean>
<bean id="springJmsProducer" class="myPackage.QueueProducer">
<property name="destination" ref="messageDestination" />
<property name="jmsTemplate" ref="jmsTemplate" />
</bean>
<bean id="messageListener" class="myPackage.QueueConsumer" />
私のプロデューサー:
public class QueueProducer {
private JmsTemplate jmsTemplate;
private Queue queue;
public void setConnectionFactory(ConnectionFactory cf) {
this.jmsTemplate = new JmsTemplate(cf);
}
public void setQueue(Queue queue) {
this.queue = queue;
}
public void send(Object object) {
this.jmsTemplate.send(this.queue, new MessageCreator() {
public Message createMessage(Session session) throws JMSException {
return session.createTextMessage("my text to send");
}
});
}
}
私の消費者:
public class QueueConsumer implements MessageListener {
@Override
public void onMessage(Message message) {
if (message instanceof TextMessage) {
try {
System.out.println(((TextMessage) message).getText());
}catch (JMSException ex) {
throw new RuntimeException(ex);
}
}
else {
throw new IllegalArgumentException("Message must be of type TextMessage");
}
}
}