JMS MessageListener не работает на Liberty - PullRequest
0 голосов
/ 08 октября 2018

Я работаю на 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 Ответ

0 голосов
/ 09 октября 2018

Вы не предоставили никаких сообщений об ошибках, поэтому более или менее угадаете здесь

Вам не хватает определения очереди:

<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>
...