2013-12-06 2 views
0

Я пытаюсь развернуть WAR на моем сервере JBoss, и WAR имеет зависимость от модуля EJB. При попытке развернуть WAR я получаю следующее сообщение об ошибке:Развертывание обработанного сообщениями компонента на сервере JBoss

Failed to start service jboss.deployment.unit Caused by: java.lang.RuntimeException: javax.resource.spi.InvalidPropertyException: Destination is mandatory 

Мой EJB-банку есть:

 <message-driven> 
     <ejb-name>LeagueListenerMDB</ejb-name> 
     <ejb-class>com.club.ejb.LeagueListenerMDB</ejb-class> 
     <transaction-type>Container</transaction-type> 
     <activation-config> 
      <activation-config-property> 
       <activation-config-property-name>destinationType</activation-config-property-name> 
       <activation-config-property-value>javax.jms.Topic</activation-config-property-value> 
      </activation-config-property> 
      <activation-config-property> 
       <activation-config-property-name>destination</activation-config-property-name> 
       <activation-config-property-value>java:/topic/ejava/projects/contests</activation-config-property-value> 
      </activation-config-property> 
     </activation-config> 
    </message-driven> 

Мой EJB помечается:

@MessageDriven(activationConfig = { 
@ActivationConfigProperty(propertyName = "destination", propertyValue = "java:/topic/ejava/projects/contests"), 
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Topic"), 
@ActivationConfigProperty(propertyName = "messageSelector", propertyValue = "ContestAction = 'ContestScheduled' OR " 
     + "ContestAction = 'ContestRescheduled' OR " 
     + "ContestAction = 'ContestCanceled'"), 
@ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge") 

})

У меня есть назначение в аннотации и ejb-jar, поэтому я не уверен, в чем проблема.

ответ

0

Добавить

@ActivationConfigProperty(propertyName = "useJNDI", propertyValue = "true"), 

и я никогда не использовал Java: префикс MDB назначения, так что это может получить его работу, а также:

@ActivationConfigProperty(propertyName = "destination", 
    propertyValue = "topic/ejava/projects/contests"), 
0

Я получил его, после переименования MDB на другое имя (чтобы избежать дублирования записей JNDI с таким же названием «testQueue») и модификации EJB-jar.xml, он работает:

package test; 

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

@JMSDestinationDefinition(name = "NewMessageBean", interfaceName = "javax.jms.Queue", resourceAdapter = "jmsra", destinationName = "testQueue") 
@MessageDriven(activationConfig = { 
    @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"), 
    @ActivationConfigProperty(propertyName = "destination", propertyValue = "willBeOverwrittenInDeploymentDescriptor") 
}) 
public class NewMessageBean implements MessageListener { 

    public NewMessageBean() { 
    } 

    @Override 
    public void onMessage(Message message) { 
    } 

} 

Назначение ActivationConfigProperty по-прежнему необходимо, иначе исключение будет выбрано на этапе развертывания.

Адресат значение перезаписывается следующим EJB-jar.xml

<?xml version="1.0" encoding="UTF-8"?> 
<ejb-jar version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd"> 
    <enterprise-beans> 
     <message-driven> 
      <ejb-name>NewMessageBean</ejb-name> 
      <ejb-class>test.NewMessageBean</ejb-class> 

      <activation-config> 
       <activation-config-property> 
        <activation-config-property-name>destination</activation-config-property-name> 
        <activation-config-property-value>/jms/testClientQueue</activation-config-property-value> 
       </activation-config-property> 
      </activation-config> 
     </message-driven> 
    </enterprise-beans> 
</ejb-jar> 

С помощью этого EJB-jar.xml, ПДБ подключается к/JMS/testClientQueue

Смежные вопросы