未调用 setMessageDrivenContext

setMessageDrivenContext is not invoked

我正在使用 EJB 2.0 没有注释。我有一个 ejb-jar.xml 像:

<?xml version="1.0"?>
<!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>
<enterprise-beans>

<message-driven>
        <ejb-name>XMLEventQueueBean00</ejb-name>
    <ejb-class>com.test.XMLEventRequestService</ejb-class>
    <transaction-type>Bean</transaction-type>
    <acknowledge-mode>AUTO_ACKNOWLEDGE</acknowledge-mode>
    <message-driven-destination>
      <destination-type>javax.jms.Queue</destination-type>
    </message-driven-destination>

</message-driven>

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

我还有一颗豆子

public class XMLEventRequestService implements MessageDrivenBean, MessageListener {
    private MessageDrivenContext    m_context;
    public void setMessageDrivenContext(MessageDrivenContext ctx) {
        logger.debug("setMessageDrivenContext called");
        m_context = ctx;
    }

    public void ejbCreate() {
        logger.debug("ejbCreate called");
    }
    public void onMessage(Message msg) {

    }

}

但是两个日志都没有给出,并且 m_context 在我调用时给出了 NullPointerException:

m_context.setRollbackOnly();

如何设置上下文以及为什么不调用它? (请不要注释。我的主管更喜欢 XML 描述符注入)

我正在使用 JBoss 5.1.0.GA.

@texasbruce,它清楚地表明你的 MDM 没有正确部署......我注意到你没有使用 JCA 配置,任何特定原因或你可能不知道的事情......JCA 是 J2ee 标准机制配置资源....您可以以非 JCA 或 JCA 方式部署 MDB,请阅读 link

如果您正在使用 JBOSS5,请尝试以下操作:

ejb-jar.xml:

<message-driven>
    <ejb-name>XMLEventQueueBean00</ejb-name>
    <ejb-class>com.test.XMLEventRequestService</ejb-class>
     <transaction-type>Bean</transaction-type>
     <message-destination-type>javax.jms.Queue</message-destination-type>
   <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>

jboss.xml

<message-driven>
   <ejb-name>XMLEventQueueBean00</ejb-name>
   <destination-jndi-name>queue/YOUR-QUEUE-NAME</destination-jndi-name>
</message-driven>

EJB 配置正确。我只是忘了打开包的调试。