【问题标题】:message-driven-destination in ejb-jar.xml for JBoss7JBoss7 的 ejb-jar.xml 中的消息驱动目标
【发布时间】:2011-12-02 15:41:05
【问题描述】:

所以我正在努力迁移到 JBoss7...知道我遇到了一堆与我的 XML 相关的问题(如预期的那样)。首先是

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

从这个thread解决了

现在我得到了:

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>

提前感谢您的帮助。

【问题讨论】:

    标签: ejb message-driven-bean jboss7.x


    【解决方案1】:

    我已将 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> 
    

    并通过 Bean 本身的注释添加设置:

        //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")  }) 
    

    【讨论】:

    • “耐用”在队列中没有意义。它仅用于主题订阅,因为队列可能有许多侦听器,并且队列不关心谁接收到它,而只关心它是由侦听器接收到的。对于主题,所有侦听器都必须接收消息,因此是持久性选项。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-27
      • 2020-12-21
      • 2015-10-12
      • 1970-01-01
      • 2010-12-09
      • 2014-01-28
      • 2019-02-25
      • 1970-01-01
      相关资源
      最近更新 更多