新しいシステムに必要な多くの機能をラップしているので、TomEE+ をテストしています。Apache ActiveMQ はその 1 つです。しかし、私は JMS を機能させるのにいくつかの困難を抱えており、解決策を見つけようとしても何の成果も得られませんでした。グーグルで答えを探してみました!
「すぐに使える」例を試しても:
import javax.annotation.Resource;
import javax.servlet.http.HttpServlet;
import javax.jms.Topic;
import javax.jms.Queue;
import javax.jms.ConnectionFactory;
public class MyServet extends HttpServlet {
@Resource(name = "foo")
private Topic fooTopic;
@Resource(name = "bar")
private Queue barQueue;
@Resource
private ConnectionFactory connectionFactory;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//...
Connection connection = connectionFactory.createConnection();
connection.start();
// Create a Session
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// Create a MessageProducer from the Session to the Topic or Queue
MessageProducer producer = session.createProducer(fooTopic);
producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
// Create a message
TextMessage message = session.createTextMessage("Hello World!");
// Tell the producer to send the message
producer.send(message);
//...
}
}
同じ問題が発生します。私の ConnectionFactory は null です。デバッグすると、 @Resource アノテーションが付けられたすべてのメンバーに当てはまることがわかります。正しく注釈が付けられている場合、メンバーは注入によってインスタンス化されると思いますか?
これを tomee.xml に追加しようとしましたが、結果はありません:
<Resource id="MyJmsResourceAdapter" type="ActiveMQResourceAdapter">
BrokerXmlConfig = broker:(tcp://localhost:61616)
ServerUrl = tcp://localhost:61616
</Resource>
<Resource id="MyJmsConnectionFactory" type="javax.jms.ConnectionFactory">
ResourceAdapter = MyJmsResourceAdapter
</Resource>
<Container id="MyJmsMdbContainer" ctype="MESSAGE">
ResourceAdapter = MyJmsResourceAdapter
</Container>
<Resource id="bar" type="javax.jms.Queue"/>
<Resource id="foo" type="javax.jms.Topic"/>
それでも、例を実行すると NullPointerException が発生します。何かが欠けている可能性がある場所に関する提案。tomee.xml への追加以外に、TomEE+ の 1.5.1 バージョンを何も変更せずに実行しています。
前もって感謝します