Невозможно различить несколько MDB с одним и тем же ejb-классом - PullRequest
0 голосов
/ 08 апреля 2019

Мы переносим наше приложение JavaEE 6 с Weblogic 12.1 на 12.2 (JavaEE 7).

Мы определили компонент, управляемый сообщениями, на ejb-jar.xml + weblogic-ejb-jar.xml.

В файле 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...