EJBTransactionRolledbackException в glassfish 5.1, но не в 4.1 - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть система, использующая jee6 в glassfish.Я запускаю его как на ПК, так и на Raspberry pi 3 B +.На ПК обе Glassfish v4.1 и v5.1 работают нормально.В Pi 3 v4.1 работает нормально, но v5.1 сталкивается с проблемой, которую трудно решить.Трассировка стека длинная, и ниже я извлекаю только ее часть.

2019-02-06 13:10:43.793|WARNING|javax.enterprise.ejb.container|A system exception occurred during an invocation on EJB UtilBean, method: public java.lang.String mySystem.util.UtilBean.getProperty(java.lang.String)
2019-02-06 13:10:43.795|WARNING|javax.enterprise.ejb.container|javax.ejb.TransactionRolledbackLocalException: Client's transaction aborted
    at com.sun.ejb.containers.EJBContainerTransactionManager.useClientTx(EJBContainerTransactionManager.java:337)
    at com.sun.ejb.containers.EJBContainerTransactionManager.preInvokeTx(EJBContainerTransactionManager.java:231)
    at com.sun.ejb.containers.BaseContainer.preInvokeTx(BaseContainer.java:4534)
    at com.sun.ejb.containers.BaseContainer.preInvoke(BaseContainer.java:1996)
    at com.sun.ejb.containers.EJBObjectInvocationHandler.invoke(EJBObjectInvocationHandler.java:180)
    at com.sun.ejb.containers.EJBObjectInvocationHandlerDelegate.invoke(EJBObjectInvocationHandlerDelegate.java:55)
    at com.sun.proxy.$Proxy525.getProperty(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.privateInvoke(StubInvocationHandlerImpl.java:199)
    at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.invoke(StubInvocationHandlerImpl.java:110)
    at com.sun.corba.ee.impl.presentation.rmi.codegen.CodegenStubBase.invoke(CodegenStubBase.java:196)
    at mySystem.util.__UtilRemote_Remote_DynamicStub.getProperty(mySystem/util/__UtilRemote_Remote_DynamicStub.java)
    at mySystem.util._UtilRemote_Wrapper.getProperty(mySystem/util/_UtilRemote_Wrapper.java)
    at mySystem.data.CaptureTrades.capture(CaptureTrades.java:328)
    at mySystem.data.CaptureTrades.capture(CaptureTrades.java:177)
    at mySystem.data.CaptureTrades.run(CaptureTrades.java:144)
    .........
2019-02-06 13:10:43.804|WARNING|javax.enterprise.ejb.container|A system exception occurred during an invocation on EJB CaptureTrades, method: public boolean mySystem.data.CaptureTrades.run(java.util.List)
2019-02-06 13:10:43.806|WARNING|javax.enterprise.ejb.container|javax.ejb.TransactionRolledbackLocalException: Exception thrown from bean
    at com.sun.ejb.containers.EJBContainerTransactionManager.checkExceptionClientTx(EJBContainerTransactionManager.java:642)
    at com.sun.ejb.containers.EJBContainerTransactionManager.postInvokeTx(EJBContainerTransactionManager.java:487)
    at com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:4576)
    at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:2084)
    at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:2054)
    at com.sun.ejb.containers.EJBObjectInvocationHandler.invoke(EJBObjectInvocationHandler.java:188)
    at com.sun.ejb.containers.EJBObjectInvocationHandlerDelegate.invoke(EJBObjectInvocationHandlerDelegate.java:55)
    at com.sun.proxy.$Proxy474.run(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.privateInvoke(StubInvocationHandlerImpl.java:199)
    at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.invoke(StubInvocationHandlerImpl.java:110)
    at com.sun.corba.ee.impl.presentation.rmi.codegen.CodegenStubBase.invoke(CodegenStubBase.java:196)
    at mySystem.data.__CaptureTradesRemote_Remote_DynamicStub.run(mySystem/data/__CaptureTradesRemote_Remote_DynamicStub.java)
    at mySystem.data._CaptureTradesRemote_Wrapper.run(mySystem/data/_CaptureTradesRemote_Wrapper.java)
    at mySystem.util.JobScheduleBean.activateService(JobScheduleBean.java:199)
    at mySystem.util.JobScheduleBean.runTimer(JobScheduleBean.java:129)
    ...........
Caused by: javax.ejb.EJBTransactionRolledbackException

    at mySystem.util._UtilRemote_Wrapper.getProperty(mySystem/util/_UtilRemote_Wrapper.java)

    at mySystem.data.CaptureTrades.capture(CaptureTrades.java:328)

    at mySystem.data.CaptureTrades.capture(CaptureTrades.java:177)

    at mySystem.data.CaptureTrades.run(CaptureTrades.java:144)

    ...........
Caused by: javax.transaction.TransactionRolledbackException: CORBA TRANSACTION_ROLLEDBACK 9998 Maybe; nested exception is:
    org.omg.CORBA.TRANSACTION_ROLLEDBACK:   vmcid: 0x2000  minor code: 1806 completed: Maybe
    at com.sun.corba.ee.impl.javax.rmi.CORBA.Util.mapSystemException(Util.java:203)
    at com.sun.corba.ee.impl.javax.rmi.CORBA.Util.wrapException(Util.java:616)
    at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.privateInvoke(StubInvocationHandlerImpl.java:208)
    at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.invoke(StubInvocationHandlerImpl.java:110)
    at com.sun.corba.ee.impl.presentation.rmi.codegen.CodegenStubBase.invoke(CodegenStubBase.java:196)
    at mySystem.util.__UtilRemote_Remote_DynamicStub.getProperty(mySystem/util/__UtilRemote_Remote_DynamicStub.java)
    ... 83 more
Caused by: org.omg.CORBA.TRANSACTION_ROLLEDBACK:   vmcid: 0x2000  minor code: 1806 completed: Maybe
    at org.glassfish.enterprise.iiop.impl.POAProtocolMgr.mapException(POAProtocolMgr.java:332)
    at com.sun.ejb.containers.BaseContainer.mapRemoteException(BaseContainer.java:2311)
    at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:2122)
Caused by: javax.ejb.TransactionRolledbackLocalException: Client's transaction aborted
    at com.sun.ejb.containers.EJBContainerTransactionManager.useClientTx(EJBContainerTransactionManager.java:337)
    at com.sun.ejb.containers.EJBContainerTransactionManager.preInvokeTx(EJBContainerTransactionManager.java:231)
    at com.sun.ejb.containers.BaseContainer.preInvokeTx(BaseContainer.java:4534)
    at com.sun.ejb.containers.BaseContainer.preInvoke(BaseContainer.java:1996)
    at com.sun.ejb.containers.EJBObjectInvocationHandler.invoke(EJBObjectInvocationHandler.java:180)
    ... 93 more

Вот мои наблюдения после его запуска несколько раз:

  1. В ПК (16G RAM, core i7)и GF4.1, и GF5.1 работают ежедневно без проблем уже более года.
  2. В Pi 3 B + (1G RAM, ARM) GF4.1 работает ежедневно без проблем более 3 месяцев.Но GF5.1 имеет вышеупомянутый откат при каждом запуске.
  3. Проблема может возникнуть в любой момент обработки, скажем, при обработке 5000 записей, это может происходить в диапазоне от 1700 до 1900 записи, но не всегдав той же записи.
  4. Записи, которые были успешно обработаны, также проходили через тот же логический вызов EJB к EJB, который сталкивается с проблемой.
  5. Это всегда происходит, когда EJB вызывает другой EJB, и может произойти влюбой EJB.
  6. На EJB может случиться так, что @EJB внедрит другой EJB или через контекстный поиск другой EJB.(поскольку это может происходить в диких разновидностях вызовов EJB - EJB, я публикую ниже только один пример кода, но это также произошло и в другой последовательности вызовов).
  7. В моем кодировании используется удаленное, но на самом деле все EJB находятся втот же контейнер.Пульт дистанционного управления используется только для будущей гибкости.

Вот пример кода:

@Stateless(mappedName = Constants.CaptureTrades)
public class CaptureTrades implements CaptureTradesRemote {
    @EJB
    UtilRemote util;
    public boolean capture(java.sql.Date tDate) {
    .....
        String source = util.getProperty("keyword");
    .....
    }
}
@Singleton(mappedName = Constants.UtilBean)
public class UtilBean implements UtilRemote {
    private static Properties props;
    .....
    @Override
    public String getProperty(String key) {
        return props.getProperty(key);
    }
}
@Remote
public abstract interface UtilRemote {
    public abstract String getProperty(String keyString);
}

Я был бы признателен за любые подсказки или подсказки, или любые предложения о направлении, в котором я должен идтичтобы решить это.

РЕДАКТИРОВАТЬ: я пробовал решение в этом посте, но это не помогло в моем случае. здесь

...