未调用 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 配置正确。我只是忘了打开包的调试。
我正在使用 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 配置正确。我只是忘了打开包的调试。