Glassfish 5.1中的EJBTransactionRolledbackException,但4.1中没有

时间:2019-02-06 07:46:34

标签: glassfish ejb rollback

我有一个在glassfish中使用jee6的系统。我在PC和Raspberry pi 3 B +中都运行它。在PC中,glassfish v4.1和v5.1都可以正常运行。在Pi 3中,v4.1可以正常运行,但v5.1遇到难以解决的问题。 stacktrace很长,我只在下面提取其中的一部分。

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. 在PC(16G RAM,i7内核)中,GF4.1和GF5.1每天运行都超过一年了。
  2. 在Pi 3 B +(1G RAM,ARM)中,GF4.1每天运行超过3个月没有问题。但是GF5.1在每次运行时都具有上述回滚功能。
  3. 该问题可能在处理过程中的任何时候发生,例如,处理5,000条记录时,可能会在第1,700到1,900条记录之间发生,但不一定总是在同一条记录上。
  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);
}

如果有任何帮助或提示,或者对我应该解决的方向提出任何建议,我将不胜感激。

编辑:我在这篇文章中尝试了解决方案,但对我的情况没有帮助。 here

0 个答案:

没有答案