пункт назначения сообщения в ejb-jar.xml для JBoss7 - PullRequest
3 голосов
/ 02 декабря 2011

Итак, я работаю над миграцией на JBoss7 ... Знайте, я столкнулся с кучей проблем, связанных с моим XML (как и ожидалось). Сначала был

<acknowledge-mode>Auto-acknowledge</acknowledge-mode>

, которое было разрешено из этой темы

Теперь я получаю:

Caused by: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[39,10]
Message: Unexpected element 'message-driven-destination' encountered
        at org.jboss.metadat a.parser.util.MetaDataElementParser.unexpectedElement(MetaDataElementParser.java:109)

Это связано с тем, что мой xml содержит:

<message-driven-destination>
        <destination-type>javax.jms.Queue</destination-type>
        <subscription-durability>Durable</subscription-durability>
</message-driven-destination>

Но я не могу понять, как правильно настроить тип назначения.

Полный ejb-jar.xml, который у меня есть, следующий:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd">

<ejb-jar >

   <description><![CDATA[Message Driven Bean for processing subscription.]]></description>
   <display-name>EJB Bean</display-name>

   <enterprise-beans>

  <!-- Message Driven Beans -->
  <message-driven >
     <description><![CDATA[Bean for processing subscription.]]></description>
     <display-name>EJB Subscription Bean</display-name>
     <ejb-name>EJBSubscriptionBean</ejb-name>
     <ejb-class>com.package.bean.EJBSubscriptionBean</ejb-class>
     <transaction-type>Container</transaction-type>

     <!-- To work with JBoss7 -->
     <!-- <acknowledge-mode>Auto-acknowledge</acknowledge-mode> -->

     <activation-config>
        <activation-config-property>
          <activation-config-property-name>acknowledgeMode</activation-config-property-name>
          <activation-config-property-value>Auto-acknowledge</activation-config-property-value>
        </activation-config-property>
     </activation-config>

    <!-- -->

     <message-driven-destination>
        <destination-type>javax.jms.Queue</destination-type>
        <subscription-durability>Durable</subscription-durability>
     </message-driven-destination>

  </message-driven>
   <message-driven >
     <description><![CDATA[Bean for processing refunds.]]></description>
     <display-name>E Refund Bean</display-name>
     <ejb-name>EJBRefundBean</ejb-name>
     <ejb-class>com.package.bean.EJBRefundBean</ejb-class>
     <transaction-type>Container</transaction-type>

     <!-- To work with JBoss7 -->
     <!-- <acknowledge-mode>Auto-acknowledge</acknowledge-mode> -->

     <activation-config>
        <activation-config-property>
          <activation-config-property-name>acknowledgeMode</activation-config-property-name>
          <activation-config-property-value>Auto-acknowledge</activation-config-property-value>
        </activation-config-property>
     </activation-config>


     <message-driven-destination>
        <destination-type>javax.jms.Queue</destination-type>
        <subscription-durability>Durable</subscription-durability>
     </message-driven-destination>


  </enterprise-beans>
</ejb-jar>

Заранее спасибо за помощь.

Ответы [ 2 ]

3 голосов
/ 08 февраля 2013

'message-driven-destination' не поддерживается в EJB 2.1 или выше.Эта проблема будет решена путем замены тега на

<message-destination-type>javax.jms.Queue</message-destination-type>
            <activation-config>
                 <activation-config-property>
                      <activation-config-property-name>destinationType</activation-config-property-name>
                      <activation-config-property-value>javax.jms.Queue</activation-config-property-value>
                 </activation-config-property>
                 <activation-config-property>
                    <activation-config-property-name>destination</activation-config-property-name>
                    <activation-config-property-value>java:/queue/CacheQueue</activation-config-property-value>
                 </activation-config-property>
            </activation-config>
3 голосов
/ 02 декабря 2011

Я полностью изменил ejb-jar.xml:

<!--?xml version="1.0"?-->  
<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_0.xsd">  
  <interceptors>  
    <interceptor>  
      <interceptor-class>com.package.bean.EJBSubscriptionBean</interceptor-class>  
    </interceptor>  
    <interceptor>  
      <interceptor-class>com.package.bean.EJBRefundBean</interceptor-class>  
    </interceptor>  
  </interceptors>  

  <assembly-descriptor>  
    <interceptor-binding>  
      <ejb-name>EJBSubscriptionBean</ejb-name>  
      <interceptor-class>com.package.bean.EJBSubscriptionBean</interceptor-class>  
    </interceptor-binding>  
    <interceptor-binding>  
      <ejb-name>EJBRefundBean</ejb-name>  
      <interceptor-class>com.package.bean.EJBRefundBean</interceptor-class>  
    </interceptor-binding>  
  </assembly-descriptor>  
</ejb-jar> 

и добавьте настройки через Аннотации на самих Бобах:

    //JBoss 7 / JDK 6  / EJB3 Annotations
@MessageDriven(activationConfig = { 
        @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"), 
        @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),  
      //  @ActivationConfigProperty(propertyName = "destination", propertyValue = "queue/TEST_QUEUE"),  
        @ActivationConfigProperty(propertyName = "subscriptionDurability", propertyValue = "Durable")  }) 
...