0

我正在测试 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 版本,没有任何改变。

提前致谢

4

1 回答 1

0

将连接工厂资源代码更改为以下。它应该工作

@Resource(name = "MyJMSConnectionFactory", type = ConnectionFactory.class)
private ConnectionFactory connectionFactory;
于 2013-04-02T06:37:17.383 回答