JMS主题订阅Tomee 1.7.1

时间:2014-11-19 23:05:37

标签: jms activemq apache-tomee tomee jms-topic

我正在尝试使用Message Driven Beans来接收来自外部ActiveMQ实例的主题订阅消息。

我的测试首先启动了Queue订阅,这项工作非常好。

然后我想尝试主题订阅,但我无法让它工作。

这就是我所拥有的:

CONF / tomee.xml

<tomee>
    <Resource id="MyJmsResourceAdapter" type="ActiveMQResourceAdapter">
        BrokerXmlConfig  =
        ServerUrl = tcp://192.168.1.176:61616
    </Resource>

    <Resource id="MyJmsConnectionFactory" type="javax.jms.ConnectionFactory">
        ResourceAdapter = MyJmsResourceAdapter
    </Resource>

    <Container id="MyJmsMdbContainer" ctype="MESSAGE">
        ResourceAdapter = MyJmsResourceAdapter
    </Container>

    <Resource id="MyQueue" type="javax.jms.Queue"/>
    <Resource id="MyTopic" type="javax.jms.Topic"/>
</tomee>   

这是MDB:

import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;
import javax.jms.Message;
import javax.jms.MessageListener;

@MessageDriven(mappedName = "MyTopic", activationConfig = { 
    @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Topic") 
    }
)
public class TestMDBTopic implements MessageListener {

    public TestMDBTopic() {
        super();
    }

    public void onMessage(Message message) {
        System.out.println("TOPIC\tMESSAGE: " + message);

    }

}

我不知道为什么但是从日志中我可以看到TomEE创建了一个队列而不是一个主题:

Nov 19, 2014 11:17:00 PM org.apache.openejb.config.AutoConfig logAutoCreateResource
INFO: Auto-creating a Resource with id 'MyTopic' of type 'javax.jms.Queue for 'TestMDBTopic'.

另一个证明是,当我添加持续时间配置时,服务器将无法启动:

@ActivationConfigProperty(propertyName = "subscriptionDurability", propertyValue = "Durable")

服务器然后抱怨这不适合配置的类型javax.jms.Queue。

我还尝试使用一种愚蠢的简单邮件方法制作一个TopicConsumer,该方法运行良好。 此外,当我从整个配置文件中删除队列配置(MyQueue)时,这并没有什么不同。

任何人都知道我做错了什么?

1 个答案:

答案 0 :(得分:2)

我有完全相同的问题。我通过删除@MessageDriven注释中的mappedName属性来修复此问题。 Tomee必须键入mappedName并假设它代表队列目标。无论如何,我现在能够向主题发送消息,并且它们被听众使用。