2014-11-19 6 views
2

Я экспериментировал с Message Driven Beans, чтобы получать сообщения о подписке по темам из внешнего экземпляра ActiveMQ.JMS Подписка на тему Tomee 1.7.1

Мои тесты начались с подписки на очереди, которая работает довольно хорошо.

Тогда я хотел попробовать подписку на тему, но я не могу заставить ее работать.

Это то, что у меня есть:

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.

Я также попытался сделать ThemeConsumer глупым простым методом почты, который работал отлично. Также, когда я удаляю конфигурацию очереди (MyQueue) из всех файлов конфигурации, это не имеет никакого значения.

Кто-нибудь знает, что я делаю неправильно?

ответ

2

У меня была точно такая же проблема. Я исправил проблему, удалив свойство mappedName в аннотации @MessageDriven. Tomee должен отбирать mappedName и предполагать, что он представляет назначение очереди. В любом случае, теперь я могу отправлять сообщения в тему, и они потребляются слушателем.