我正在测试 TomEE+,因为它包含了我在新系统中需要的许多功能。Apache ActiveMQ 就是其中之一。但是我在让 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 为空。当我调试时,我可以看到我所有的 @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 版本,没有任何改变。
提前致谢