ejb定时器(调度程序)不触发

问题描述 投票:0回答:1

我在 weblogic 服务器上运行的类中有两个 ejb 调度程序。它工作得很好,除了在极少数情况下,其中一个(第一个计时器)甚至没有触发,而另一个正在工作。我通过查看服务器日志来意识到这一点,但没有看到可用的日志。我想知道为什么它永远不会被触发!

通过重新启动计时器正在运行的服务器节点即可解决问题。

@Singleton
public class SamanElectronicPaymentTimer {


    @Inject
    private EntityManager em;

    @Inject
    @WebProperties
    Bundle webProperties;
    @Inject
    SamanElectronicPaymentService samanElectronicPaymentService;
    @Inject
    private RestServices restServices;

    @Inject
    private CreateHistory createHistory;

    @Schedule(minute = "*/5", dayOfMonth = "*", hour = "*", month = "*", year = "*", second = "20", persistent = false)

    public void samanElectronicCheckPayment() {
        try {
            Logger.getLogger(DebitInstallmentPaymentTimer.class.getName()).log(Level.INFO, "samanElectronicCheckPayment is running");
            if (checkTrueNode()) {

                payCheckSamanManualyTimer();
                Logger.getLogger(SamanElectronicPaymentTimer.class.getName()).log(Level.INFO, "<<<<<<<<<<<<<< samanElectronicCheckPaymentTimer End>>>>>>>>>>>>>");
            }
        } catch (Exception ex) {
            Logger.getLogger(SamanElectronicPaymentTimer.class.getName()).log(Level.SEVERE, ex.getMessage());
        }
    }


    @Schedule(minute = "*/20", hour = "*", second = "10", persistent = false)
    public void createDebitWithTimer() {
        if (checkTrueNode()) {
            try {
                List<OnlinePaymentInfo> onlinePaymentInfoList = this.em.createNamedQuery("getOnlinePaymentInfo.fortimer.creatDebit")
                        .setMaxResults(1000)
                        .getResultList();
                if (onlinePaymentInfoList.size() > 0) {

                    for (OnlinePaymentInfo onlinePaymentInfotmp : onlinePaymentInfoList) {
                        Logger.getLogger(this.getClass().getName()).log(Level.INFO, onlinePaymentInfotmp.toString());
                        createHistory.createHistoryByTimer(onlinePaymentInfotmp);

                    }
                    Logger.getLogger(this.getClass().getName()).log(Level.INFO, onlinePaymentInfoList.size() + " histories created!");
                }
            } catch (Exception ex) {
                Logger.getLogger(this.getClass().getName()).log(Level.SEVERE, "sabegheTimer went wrong:: " + ex);
            }
        }

    }


    private boolean checkTrueNode() {
        try {
            InitialContext ctx = new InitialContext();
            MBeanServer mBeanServer = (MBeanServer) ctx.lookup("java:comp/env/jmx/runtime");
            String serverName = System.getProperty("weblogic.Name");
            ObjectName serverRuntime = new ObjectName("com.bea:Name=" + serverName + ",Type=ServerRuntime");
            String listenAddress = mBeanServer.getAttribute(serverRuntime, "ListenAddress").toString();
            String listenPort = mBeanServer.getAttribute(serverRuntime, "ListenPort").toString();
            Logger.getLogger(DebitInstallmentPaymentTimer.class.getName()).log(Level.INFO, "listenPort is :" + listenPort.toString());
            Logger.getLogger(DebitInstallmentPaymentTimer.class.getName()).log(Level.INFO, "ListenAddress is :" + listenAddress.toString());
            if (listenPort.equals("9091") && listenAddress.contains("eservice-n3.tamin.org")) {
                return true;
            } else {
                return false;
            }
        } catch (Exception ex) {
            ex.printStackTrace();
            return false;
        }
    }

虽然第一个调度程序在极少数情况下甚至不会被触发,但第二个计时器不断抛出以下异常。这表明命名查询

getOnlinePaymentInfo.fortimer.creatDebit
超时了。但在数据库上执行查询不会遇到超时问题,并且会在几秒钟内运行。

重新启动服务器后,这两个问题都会消失。

<Jun 28, 2023 1:20:37,835 PM IRST> <Error> <EJB> <BEA-011088> <The following error occurred while invoking the ejbTimeout(javax.ejb.Timer) method of EJB SamanElectronicPaymentTimer(Application: eservice-web, EJBComponent: eservice-web.war).
javax.ejb.EJBException: EJB Exception: : 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(1523997077)]
    at com.oracle.pitchfork.inject.Jsr250Metadata.invokeLifecycleMethod(Jsr250Metadata.java:391)
    at com.oracle.pitchfork.intercept.LifecycleEventCallbackInvocationContext.proceed(LifecycleEventCallbackInvocationContext.java:121)
    at com.oracle.pitchfork.intercept.LifecycleEventCallbackInvocationContext.proceed(LifecycleEventCallbackInvocationContext.java:150)
    at com.oracle.pitchfork.intercept.InterceptionMetadata.invokeTimeoutMethod(InterceptionMetadata.java:626)
    at weblogic.ejb.container.injection.EjbComponentCreatorImpl.invokeTimer(EjbComponentCreatorImpl.java:71)
    at weblogic.ejb.container.injection.InjectionBasedEjbComponentCreator.invokeTimer(InjectionBasedEjbComponentCreator.java:193)
    at weblogic.ejb.container.manager.BaseEJBManager.invokeTimeoutMethod(BaseEJBManager.java:199)
    at weblogic.ejb.container.timer.TimerImpl.timerExpired(TimerImpl.java:343)
    at weblogic.timers.internal.TimerImpl.run(TimerImpl.java:301)
    at weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:678)
    at weblogic.invocation.ComponentInvocationContextManager._runAs(ComponentInvocationContextManager.java:352)
    at weblogic.invocation.ComponentInvocationContextManager.runAs(ComponentInvocationContextManager.java:337)
    at weblogic.work.LivePartitionUtility.doRunWorkUnderContext(LivePartitionUtility.java:57)
    at weblogic.work.PartitionUtility.runWorkUnderContext(PartitionUtility.java:41)
    at weblogic.work.SelfTuningWorkManagerImpl.runWorkUnderContext(SelfTuningWorkManagerImpl.java:652)
    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:420)
    at weblogic.work.ExecuteThread.run(ExecuteThread.java:360)
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.GeneratedMethodAccessor254.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.oracle.pitchfork.inject.Jsr250Metadata.invokeLifecycleMethod(Jsr250Metadata.java:388)
    ... 16 more
Caused by: com.oracle.pitchfork.interfaces.LifecycleCallbackException: Failure to invoke timeout method public void ir.tamin.insurance.eservice.ws.rest.bank.SamanElectronicPaymentTimer.createDebitWithTimer() on bean class class ir.tamin.insurance.eservice.ws.rest.bank.SamanElectronicPaymentTimer_9io334_Impl with args: []]
    at com.oracle.pitchfork.inject.Jsr250Metadata.invokeTimeoutMethodInternal(Jsr250Metadata.java:376)
    at com.oracle.pitchfork.intercept.LifecycleEventCallbackInvocationContext.proceed(LifecycleEventCallbackInvocationContext.java:126)
    at org.jboss.weld.ejb.AbstractEJBRequestScopeActivationInterceptor.aroundInvoke(AbstractEJBRequestScopeActivationInterceptor.java:73)
    at org.jboss.weld.ejb.SessionBeanInterceptor.aroundInvoke(SessionBeanInterceptor.java:52)
    ... 20 more
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.GeneratedMethodAccessor3729.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.oracle.pitchfork.inject.Jsr250Metadata.invokeTimeoutMethodInternal(Jsr250Metadata.java:373)
    ... 23 more
Caused by: javax.persistence.PersistenceException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.6.5.v20170607-b3d05bd): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: Attempt to set connection harvestable to false but the connection is already closed.
Error Code: 0
Call: SELECT * FROM (SELECT /*+ FIRST_ROWS(1000) */ a.*, ROWNUM rnum  FROM (SELECT RESNUM AS a1, AMOUNT AS a2, CONFIRM_DATE AS a3, CONTRACT_NUMBER AS a4, CREATE_DATE AS a5, END_DATE AS a6, GARDESH_END_DATE AS a7, GARDESH_START_DATE AS a8, SOLDIER_INST_COUNT AS a9, INSURANCE_ID AS a10, NATIONAL_CODE AS a11, ORD_ORDNO AS a12, ORP_ORDROW AS a13, REFNUM AS a14, RRN AS a15, SECUREPAN AS a16, SERVICENAME AS a17, START_DATE AS a18, STATE AS a19, STATUS AS a20, SYSTEMTYPE AS a21, TICKET AS a22, TICKET_BCKUP AS a23, TRACENO AS a24, USER_ID AS a25, WAGE AS a26 FROM ONLINEPAYMENTINFO WHERE (((((TICKET IS NOT NULL) AND (ORD_ORDNO IS NULL)) AND (ORP_ORDROW IS NULL)) AND STATE LIKE ?) AND (SYSTEMTYPE IN (?, ?, ?)))) a WHERE ROWNUM <= ?) WHERE rnum > ?
    bind => [%SUCCESSFUL%, 01, 03, 04, 1000, 0]
Query: ReadAllQuery(name="getOnlinePaymentInfo.fortimer.creatDebit" referenceClass=OnlinePaymentInfo sql="SELECT * FROM (SELECT /*+ FIRST_ROWS(1000) */ a.*, ROWNUM rnum  FROM (SELECT RESNUM AS a1, AMOUNT AS a2, CONFIRM_DATE AS a3, CONTRACT_NUMBER AS a4, CREATE_DATE AS a5, END_DATE AS a6, GARDESH_END_DATE AS a7, GARDESH_START_DATE AS a8, SOLDIER_INST_COUNT AS a9, INSURANCE_ID AS a10, NATIONAL_CODE AS a11, ORD_ORDNO AS a12, ORP_ORDROW AS a13, REFNUM AS a14, RRN AS a15, SECUREPAN AS a16, SERVICENAME AS a17, START_DATE AS a18, STATE AS a19, STATUS AS a20, SYSTEMTYPE AS a21, TICKET AS a22, TICKET_BCKUP AS a23, TRACENO AS a24, USER_ID AS a25, WAGE AS a26 FROM ONLINEPAYMENTINFO WHERE (((((TICKET IS NOT NULL) AND (ORD_ORDNO IS NULL)) AND (ORP_ORDROW IS NULL)) AND STATE LIKE ?) AND (SYSTEMTYPE IN (?, ?, ?)))) a WHERE ROWNUM <= ?) WHERE rnum > ?")
    at org.eclipse.persistence.internal.jpa.QueryImpl.getDetailedException(QueryImpl.java:387)
    at org.eclipse.persistence.internal.jpa.QueryImpl.executeReadQuery(QueryImpl.java:260)
    at org.eclipse.persistence.internal.jpa.QueryImpl.getResultList(QueryImpl.java:478)
    at ir.tamin.insurance.eservice.ws.rest.bank.SamanElectronicPaymentTimer.createDebitWithTimer(SamanElectronicPaymentTimer.java:68)
    ... 27 more
Caused by: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.6.5.v20170607-b3d05bd): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: Attempt to set connection harvestable to false but the connection is already closed.
Error Code: 0
Call: SELECT * FROM (SELECT /*+ FIRST_ROWS(1000) */ a.*, ROWNUM rnum  FROM (SELECT RESNUM AS a1, AMOUNT AS a2, CONFIRM_DATE AS a3, CONTRACT_NUMBER AS a4, CREATE_DATE AS a5, END_DATE AS a6, GARDESH_END_DATE AS a7, GARDESH_START_DATE AS a8, SOLDIER_INST_COUNT AS a9, INSURANCE_ID AS a10, NATIONAL_CODE AS a11, ORD_ORDNO AS a12, ORP_ORDROW AS a13, REFNUM AS a14, RRN AS a15, SECUREPAN AS a16, SERVICENAME AS a17, START_DATE AS a18, STATE AS a19, STATUS AS a20, SYSTEMTYPE AS a21, TICKET AS a22, TICKET_BCKUP AS a23, TRACENO AS a24, USER_ID AS a25, WAGE AS a26 FROM ONLINEPAYMENTINFO WHERE (((((TICKET IS NOT NULL) AND (ORD_ORDNO IS NULL)) AND (ORP_ORDROW IS NULL)) AND STATE LIKE ?) AND (SYSTEMTYPE IN (?, ?, ?)))) a WHERE ROWNUM <= ?) WHERE rnum > ?
    bind => [%SUCCESSFUL%, 01, 03, 04, 1000, 0]
Query: ReadAllQuery(name="getOnlinePaymentInfo.fortimer.creatDebit" referenceClass=OnlinePaymentInfo sql="SELECT * FROM (SELECT /*+ FIRST_ROWS(1000) */ a.*, ROWNUM rnum  FROM (SELECT RESNUM AS a1, AMOUNT AS a2, CONFIRM_DATE AS a3, CONTRACT_NUMBER AS a4, CREATE_DATE AS a5, END_DATE AS a6, GARDESH_END_DATE AS a7, GARDESH_START_DATE AS a8, SOLDIER_INST_COUNT AS a9, INSURANCE_ID AS a10, NATIONAL_CODE AS a11, ORD_ORDNO AS a12, ORP_ORDROW AS a13, REFNUM AS a14, RRN AS a15, SECUREPAN AS a16, SERVICENAME AS a17, START_DATE AS a18, STATE AS a19, STATUS AS a20, SYSTEMTYPE AS a21, TICKET AS a22, TICKET_BCKUP AS a23, TRACENO AS a24, USER_ID AS a25, WAGE AS a26 FROM ONLINEPAYMENTINFO WHERE (((((TICKET IS NOT NULL) AND (ORD_ORDNO IS NULL)) AND (ORP_ORDROW IS NULL)) AND STATE LIKE ?) AND (SYSTEMTYPE IN (?, ?, ?)))) a WHERE ROWNUM <= ?) WHERE rnum > ?")
    at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:316)
    at org.eclipse.persistence.sessions.JNDIConnector.connect(JNDIConnector.java:147)
    at org.eclipse.persistence.sessions.DatasourceLogin.connectToDatasource(DatasourceLogin.java:162)
    at org.eclipse.persistence.internal.databaseaccess.DatasourceAccessor.connectInternal(DatasourceAccessor.java:346)
    at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.connectInternal(DatabaseAccessor.java:309)
    at org.eclipse.persistence.internal.databaseaccess.DatasourceAccessor.reconnect(DatasourceAccessor.java:581)
    at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.reconnect(DatabaseAccessor.java:1634)
    at org.eclipse.persistence.internal.databaseaccess.DatasourceAccessor.incrementCallCount(DatasourceAccessor.java:321)
    at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:615)
    at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:560)
    at org.eclipse.persistence.internal.sessions.AbstractSession.basicExecuteCall(AbstractSession.java:2062)
    at org.eclipse.persistence.sessions.server.ServerSession.executeCall(ServerSession.java:570)
    at org.eclipse.persistence.sessions.server.ClientSession.executeCall(ClientSession.java:261)
    at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:260)
    at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:246)
    at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeSelectCall(DatasourceCallQueryMechanism.java:317)
    at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.selectAllRows(DatasourceCallQueryMechanism.java:712)
    at org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.selectAllRowsFromTable(ExpressionQueryMechanism.java:2740)
    at org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.selectAllRows(ExpressionQueryMechanism.java:2693)
    at org.eclipse.persistence.queries.ReadAllQuery.executeObjectLevelReadQuery(ReadAllQuery.java:559)
    at org.eclipse.persistence.queries.ObjectLevelReadQuery.executeDatabaseQuery(ObjectLevelReadQuery.java:1175)
    at org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:911)
    at org.eclipse.persistence.queries.ObjectLevelReadQuery.execute(ObjectLevelReadQuery.java:1134)
    at org.eclipse.persistence.queries.ReadAllQuery.execute(ReadAllQuery.java:460)
    at org.eclipse.persistence.queries.ObjectLevelReadQuery.executeInUnitOfWork(ObjectLevelReadQuery.java:1222)
    at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2899)
    at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1863)
    at org.eclipse.persistence.internal.sessions.AbstractSession.retryQuery(AbstractSession.java:1934)
    at org.eclipse.persistence.sessions.server.ClientSession.retryQuery(ClientSession.java:697)
    at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.retryQuery(UnitOfWorkImpl.java:5539)
    at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1900)
    at org.eclipse.persistence.internal.sessions.AbstractSession.retryQuery(AbstractSession.java:1934)
    at org.eclipse.persistence.sessions.server.ClientSession.retryQuery(ClientSession.java:697)
    at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.retryQuery(UnitOfWorkImpl.java:5539)
    at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1900)
    at org.eclipse.persistence.internal.sessions.AbstractSession.retryQuery(AbstractSession.java:1934)
    at org.eclipse.persistence.sessions.server.ClientSession.retryQuery(ClientSession.java:697)
    at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.retryQuery(UnitOfWorkImpl.java:5539)
    at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1900)
    at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1845)
    at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1810)
    at org.eclipse.persistence.internal.jpa.QueryImpl.executeReadQuery(QueryImpl.java:258)
    ... 29 more
Caused by: java.sql.SQLException: Attempt to set connection harvestable to false but the connection is already closed.
    at weblogic.jdbc.wrapper.Connection.setConnectionHarvestable(Connection.java:1590)
    at weblogic.jdbc.common.internal.RmiDataSource.getConnectionInternal(RmiDataSource.java:673)
    at weblogic.jdbc.common.internal.RmiDataSource.getConnection(RmiDataSource.java:594)
    at weblogic.jdbc.common.internal.RmiDataSource.getConnection(RmiDataSource.java:587)
    at org.eclipse.persistence.sessions.JNDIConnector.connect(JNDIConnector.java:135)
    ... 69 more

    at weblogic.ejb.container.internal.EJBRuntimeUtils.asEJBException(EJBRuntimeUtils.java:86)
    at weblogic.ejb.container.internal.BaseLocalObject.handleSystemException(BaseLocalObject.java:461)
    at weblogic.ejb.container.internal.BaseLocalObject.handleSystemException(BaseLocalObject.java:410)
    at weblogic.ejb.container.internal.BaseLocalObject.postInvoke1(BaseLocalObject.java:239)
    at weblogic.ejb.container.internal.TimerDrivenLocalObject.postInvoke(TimerDrivenLocalObject.java:53)
    Truncated.
Caused By: 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(1523997077)]
    at com.oracle.pitchfork.inject.Jsr250Metadata.invokeLifecycleMethod(Jsr250Metadata.java:391)
    at com.oracle.pitchfork.intercept.LifecycleEventCallbackInvocationContext.proceed(LifecycleEventCallbackInvocationContext.java:121)
    at com.oracle.pitchfork.intercept.LifecycleEventCallbackInvocationContext.proceed(LifecycleEventCallbackInvocationContext.java:150)
    at com.oracle.pitchfork.intercept.InterceptionMetadata.invokeTimeoutMethod(InterceptionMetadata.java:626)
    at weblogic.ejb.container.injection.EjbComponentCreatorImpl.invokeTimer(EjbComponentCreatorImpl.java:71)
    Truncated.
Caused By: java.lang.reflect.InvocationTargetException
    at sun.reflect.GeneratedMethodAccessor254.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.oracle.pitchfork.inject.Jsr250Metadata.invokeLifecycleMethod(Jsr250Metadata.java:388)
    at com.oracle.pitchfork.intercept.LifecycleEventCallbackInvocationContext.proceed(LifecycleEventCallbackInvocationContext.java:121)
    Truncated.
Caused By: com.oracle.pitchfork.interfaces.LifecycleCallbackException: Failure to invoke timeout method public void ir.tamin.insurance.eservice.ws.rest.bank.SamanElectronicPaymentTimer.createDebitWithTimer() on bean class class ir.tamin.insurance.eservice.ws.rest.bank.SamanElectronicPaymentTimer_9io334_Impl with args: []]
    at com.oracle.pitchfork.inject.Jsr250Metadata.invokeTimeoutMethodInternal(Jsr250Metadata.java:376)
    at com.oracle.pitchfork.intercept.LifecycleEventCallbackInvocationContext.proceed(LifecycleEventCallbackInvocationContext.java:126)
    at org.jboss.weld.ejb.AbstractEJBRequestScopeActivationInterceptor.aroundInvoke(AbstractEJBRequestScopeActivationInterceptor.java:73)
    at org.jboss.weld.ejb.SessionBeanInterceptor.aroundInvoke(SessionBeanInterceptor.java:52)
    at sun.reflect.GeneratedMethodAccessor254.invoke(Unknown Source)
    Truncated.
Caused By: java.lang.reflect.InvocationTargetException
    at sun.reflect.GeneratedMethodAccessor3729.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.oracle.pitchfork.inject.Jsr250Metadata.invokeTimeoutMethodInternal(Jsr250Metadata.java:373)
    at com.oracle.pitchfork.intercept.LifecycleEventCallbackInvocationContext.proceed(LifecycleEventCallbackInvocationContext.java:126)
    Truncated.
Caused By: javax.persistence.PersistenceException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.6.5.v20170607-b3d05bd): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: Attempt to set connection harvestable to false but the connection is already closed.
Error Code: 0
Call: SELECT * FROM (SELECT /*+ FIRST_ROWS(1000) */ a.*, ROWNUM rnum  FROM (SELECT RESNUM AS a1, AMOUNT AS a2, CONFIRM_DATE AS a3, CONTRACT_NUMBER AS a4, CREATE_DATE AS a5, END_DATE AS a6, GARDESH_END_DATE AS a7, GARDESH_START_DATE AS a8, SOLDIER_INST_COUNT AS a9, INSURANCE_ID AS a10, NATIONAL_CODE AS a11, ORD_ORDNO AS a12, ORP_ORDROW AS a13, REFNUM AS a14, RRN AS a15, SECUREPAN AS a16, SERVICENAME AS a17, START_DATE AS a18, STATE AS a19, STATUS AS a20, SYSTEMTYPE AS a21, TICKET AS a22, TICKET_BCKUP AS a23, TRACENO AS a24, USER_ID AS a25, WAGE AS a26 FROM ONLINEPAYMENTINFO WHERE (((((TICKET IS NOT NULL) AND (ORD_ORDNO IS NULL)) AND (ORP_ORDROW IS NULL)) AND STATE LIKE ?) AND (SYSTEMTYPE IN (?, ?, ?)))) a WHERE ROWNUM <= ?) WHERE rnum > ?
    bind => [%SUCCESSFUL%, 01, 03, 04, 1000, 0]
Query: ReadAllQuery(name="getOnlinePaymentInfo.fortimer.creatDebit" referenceClass=OnlinePaymentInfo sql="SELECT * FROM (SELECT /*+ FIRST_ROWS(1000) */ a.*, ROWNUM rnum  FROM (SELECT RESNUM AS a1, AMOUNT AS a2, CONFIRM_DATE AS a3, CONTRACT_NUMBER AS a4, CREATE_DATE AS a5, END_DATE AS a6, GARDESH_END_DATE AS a7, GARDESH_START_DATE AS a8, SOLDIER_INST_COUNT AS a9, INSURANCE_ID AS a10, NATIONAL_CODE AS a11, ORD_ORDNO AS a12, ORP_ORDROW AS a13, REFNUM AS a14, RRN AS a15, SECUREPAN AS a16, SERVICENAME AS a17, START_DATE AS a18, STATE AS a19, STATUS AS a20, SYSTEMTYPE AS a21, TICKET AS a22, TICKET_BCKUP AS a23, TRACENO AS a24, USER_ID AS a25, WAGE AS a26 FROM ONLINEPAYMENTINFO WHERE (((((TICKET IS NOT NULL) AND (ORD_ORDNO IS NULL)) AND (ORP_ORDROW IS NULL)) AND STATE LIKE ?) AND (SYSTEMTYPE IN (?, ?, ?)))) a WHERE ROWNUM <= ?) WHERE rnum > ?")
    at org.eclipse.persistence.internal.jpa.QueryImpl.getDetailedException(QueryImpl.java:387)
    at org.eclipse.persistence.internal.jpa.QueryImpl.executeReadQuery(QueryImpl.java:260)
    at org.eclipse.persistence.internal.jpa.QueryImpl.getResultList(QueryImpl.java:478)
    at ir.tamin.insurance.eservice.ws.rest.bank.SamanElectronicPaymentTimer.createDebitWithTimer(SamanElectronicPaymentTimer.java:68)
    at sun.reflect.GeneratedMethodAccessor3729.invoke(Unknown Source)
    Truncated.
Caused By: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.6.5.v20170607-b3d05bd): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: Attempt to set connection harvestable to false but the connection is already closed.
Error Code: 0
Call: SELECT * FROM (SELECT /*+ FIRST_ROWS(1000) */ a.*, ROWNUM rnum  FROM (SELECT RESNUM AS a1, AMOUNT AS a2, CONFIRM_DATE AS a3, CONTRACT_NUMBER AS a4, CREATE_DATE AS a5, END_DATE AS a6, GARDESH_END_DATE AS a7, GARDESH_START_DATE AS a8, SOLDIER_INST_COUNT AS a9, INSURANCE_ID AS a10, NATIONAL_CODE AS a11, ORD_ORDNO AS a12, ORP_ORDROW AS a13, REFNUM AS a14, RRN AS a15, SECUREPAN AS a16, SERVICENAME AS a17, START_DATE AS a18, STATE AS a19, STATUS AS a20, SYSTEMTYPE AS a21, TICKET AS a22, TICKET_BCKUP AS a23, TRACENO AS a24, USER_ID AS a25, WAGE AS a26 FROM ONLINEPAYMENTINFO WHERE (((((TICKET IS NOT NULL) AND (ORD_ORDNO IS NULL)) AND (ORP_ORDROW IS NULL)) AND STATE LIKE ?) AND (SYSTEMTYPE IN (?, ?, ?)))) a WHERE ROWNUM <= ?) WHERE rnum > ?
    bind => [%SUCCESSFUL%, 01, 03, 04, 1000, 0]
Query: ReadAllQuery(name="getOnlinePaymentInfo.fortimer.creatDebit" referenceClass=OnlinePaymentInfo sql="SELECT * FROM (SELECT /*+ FIRST_ROWS(1000) */ a.*, ROWNUM rnum  FROM (SELECT RESNUM AS a1, AMOUNT AS a2, CONFIRM_DATE AS a3, CONTRACT_NUMBER AS a4, CREATE_DATE AS a5, END_DATE AS a6, GARDESH_END_DATE AS a7, GARDESH_START_DATE AS a8, SOLDIER_INST_COUNT AS a9, INSURANCE_ID AS a10, NATIONAL_CODE AS a11, ORD_ORDNO AS a12, ORP_ORDROW AS a13, REFNUM AS a14, RRN AS a15, SECUREPAN AS a16, SERVICENAME AS a17, START_DATE AS a18, STATE AS a19, STATUS AS a20, SYSTEMTYPE AS a21, TICKET AS a22, TICKET_BCKUP AS a23, TRACENO AS a24, USER_ID AS a25, WAGE AS a26 FROM ONLINEPAYMENTINFO WHERE (((((TICKET IS NOT NULL) AND (ORD_ORDNO IS NULL)) AND (ORP_ORDROW IS NULL)) AND STATE LIKE ?) AND (SYSTEMTYPE IN (?, ?, ?)))) a WHERE ROWNUM <= ?) WHERE rnum > ?")
    at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:316)
    at org.eclipse.persistence.sessions.JNDIConnector.connect(JNDIConnector.java:147)
    at org.eclipse.persistence.sessions.DatasourceLogin.connectToDatasource(DatasourceLogin.java:162)
    at org.eclipse.persistence.internal.databaseaccess.DatasourceAccessor.connectInternal(DatasourceAccessor.java:346)
    at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.connectInternal(DatabaseAccessor.java:309)
    Truncated.
Caused By: java.sql.SQLException: Attempt to set connection harvestable to false but the connection is already closed.
    at weblogic.jdbc.wrapper.Connection.setConnectionHarvestable(Connection.java:1590)
    at weblogic.jdbc.common.internal.RmiDataSource.getConnectionInternal(RmiDataSource.java:673)
    at weblogic.jdbc.common.internal.RmiDataSource.getConnection(RmiDataSource.java:594)
    at weblogic.jdbc.common.internal.RmiDataSource.getConnection(RmiDataSource.java:587)
    at org.eclipse.persistence.sessions.JNDIConnector.connect(JNDIConnector.java:135)
    Truncated.
> 

我不知道为什么计时器会首先停止工作,也不知道为什么事务在不直接在数据库上执行查询时会超时?

当每次执行任务失败时,weblogic 是否会停止调度程序?

java ejb weblogic schedule
1个回答
0
投票

当然,6个月后,你的问题已经解决了,我也遇到了和你一样的问题,你能帮助我吗?我在 weblogic 服务器上运行的类中有一个 EJB 调度程序,它每天晚上都会运行,并且每次几分钟后都会因异常而停止,但 10 天后调度程序已停止并且从未运行,我知道是否重新启动服务器节点它将再次启动,但我想知道主要问题。调度程序如何以及为什么会在几天后停止?

© www.soinside.com 2019 - 2024. All rights reserved.