无法区分具有相同ejb类的多个MDB

时间:2019-04-08 08:16:09

标签: java weblogic message-driven-bean

我们正在将JavaEE 6应用程序从Weblogic 12.1迁移到12.2(JavaEE 7)。

我们在ejb-jar.xml + weblogic-ejb-jar.xml上定义了消息驱动Bean。

在ejb-jar.xml中,我们有多个这样的条目(不同的ejb名称,但相同的ejb类):

    <message-driven>
            <ejb-name>MyApp-MessageHandler-Queue1</ejb-name>
            <ejb-class>myapp.asynclayer.messagehandler.MessageHandlerBean</ejb-class>
            <transaction-type>Container</transaction-type>
            <activation-config>
               ...
            </activation-config>
            <env-entry>
               ...
            </env-entry>
    <message-driven>

如果我们按原样部署在新的WL上,则应用程序的状态为“活动”,但队列不会自动连接,此外,日志上还会引发异常。

####<Apr 3, 2019 7:43:25,549 PM EEST> <Info> <EJB> <devrecapp122> <async_srv1> <[ACTIVE] ExecuteThread: '41' for queue: 'weblogic.kernel.Default (self-tuning)'> <<anonymous>> <> <4cdfccf6-1c7a-4d61-b116-4140143e7563-00000280> <1554309805549> <[severity-value: 64] [rid: 0] [partition-id: 0] [partition-name: DOMAIN] > <BEA-011061> <Stack trace associated with message Error starting the MessageDrivenBean MyApp-MessageDispatcher-Queue1 follows: 

com.oracle.pitchfork.interfaces.LifecycleCallbackException: Failure to invoke public java.lang.Object org.jboss.weld.ejb.SessionBeanInterceptor.aroundInvoke(javax.interceptor.InvocationContext) throws java.lang.Exception on bean class class org.jboss.weld.ejb.SessionBeanInterceptor with args: [LifecycleEventCallbackInvocationContext(1403901847)]
    at com.oracle.pitchfork.inject.Jsr250Metadata.invokeLifecycleMethod(Jsr250Metadata.java:391)
    ...
Caused By: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    ...
Caused By: java.lang.NullPointerException
    at org.jboss.weld.ejb.SessionBeanInterceptor.obtainBeanManager(SessionBeanInterceptor.java:61)

我们所做的肮脏解决方法是为每个MDB创建一个类:

public class MessageHandlerBeanQueue1 extends MessageHandlerBean {
     //empty
}

因此,在ejb-class标签上,我们指定了具体的类。这样做我们没有错误,并且队列连接正确。

为什么在新的Weblogic上会发生这种情况?

0 个答案:

没有答案