JMS MessageListener не работает на Liberty
Я работаю на Liberty 18.0.0.2 с полным профилем JavaEE 8.
Я настроил JMS 2 на server.xml со следующим содержимым:
<?xml version="1.0" encoding="UTF-8"?>
<server description="new server">
<featureManager>
<feature>javaee-8.0</feature>
<feature>localConnector-1.0</feature>
<feature>wasJmsServer-1.0</feature>
<feature>wasJmsClient-2.0</feature>
</featureManager>
<basicRegistry id="basic" realm="BasicRealm" />
<httpSession securityIntegrationEnabled="false" />
<httpEndpoint id="defaultHttpEndpoint" httpPort="8080" httpsPort="9443" />
<applicationManager autoExpand="true" />
<applicationMonitor updateTrigger="mbean" />
<messagingEngine>
<queue id="simpleQueue" />
</messagingEngine>
<jmsActivationSpec id="jms/simpleQueue">
<properties.wasJms destinationRef="java:app/simpleQueue" />
</jmsActivationSpec>
</server>
Теперь я написал простые коды для тестирования JMS на сервере приложений Liberty:
@Stateless
public class MessageSender {
@Inject
private JMSContext context;
@Resource(lookup = "java:app/simpleQueue")
private Queue queue;
public void sendMessage(String message) {
context.createProducer().send(queue, "hello");
}
}
@Path("/messenger")
public class Messenger {
@Inject
private MessageSender messageSender;
@Path("/send")
@GET
public Response send() {
messageSender.sendMessage("Hello Mahdi");
return Response.ok("ok").build();
}
}
@MessageDriven(
name = "simpleQueue",
mappedName = "java:app/simpleQueue",
activationConfig = {
@ActivationConfigProperty(propertyName = "destinationType",
propertyValue = "javax.jms.Queue"),
@ActivationConfigProperty(propertyName = "destination",
propertyValue = "app/simpleQueue")
})
public class MessageReceiver implements MessageListener {
@Override
public void onMessage(Message message) {
System.out.println(message);
}
}
Можете ли вы объяснить мне, почему MessageListener не работает?
В чем ошибка?
Я ищу в Google и нашел несколько примеров, но не могу понять, как можно решить эту проблему!,
1 ответ
Решение
Вы не предоставили никаких сообщений об ошибках, так что более или менее угадайте здесь
Вам не хватает определения очереди:
<jmsQueue jndiName="java:app/simpleQueue" id="simpleQueueJms">
<properties.wasJms queueName="simpleQueue"/>
</jmsQueue>
Ваш MDB должен быть определен так:
@MessageDriven(name="SimpleMDB")
public class MessageReceiver implements MessageListener
И активная спецификация, как это:
<jmsActivationSpec id="yourAppName/SimpleMDB">
<properties.wasJms destinationRef="simpleQueueJms" destinationType="javax.jms.Queue"/>
</jmsActivationSpec>