我有两个ejb浏览器在一个运行在weblogic服务器上的类中。它工作正常,除了在一些罕见的情况下,其中一个(第一个计时器)甚至没有触发,而另一个正在工作。我通过查看服务器日志来意识到这一点,并没有看到可用的日志。我想知道为什么它从来没有被触发!
通过重新启动定时器工作的服务器节点来解决该问题。
@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是否在每次执行时都停止调度程序?
1条答案
按热度按时间zmeyuzjn1#
如果定时器是持久的
(@Schedule(persistent = true))
,请检查定时器数据是否正确持久化。如果定时器的状态没有正确存储,可能会影响定时器的重新调度。