2013-05-15 174 views
1

我正在使用Postgres數據庫。有時連接會自動關閉,而與我的應用程序交互。有時甚至我沒有與我的應用程序坐在理想當時也互動closed.It顯示follwing excepion.My服務器日誌是數據庫連接自動關閉

SEVERE [org.activiti.engine.impl.jobexecutor.AcquireJobsRunnable] (Thread-101) exception during job acquisition: 

Error querying database. Cause: org.postgresql.util.PSQLException: This connection has been closed. 

The error may exist in org/activiti/db/mapping/entity/Job.xml 

The error may involve org.activiti.engine.impl.persistence.entity.JobEntity.selectNextJobsToExecute 
The error occurred while executing a query 

SQL: select  RES.*   from ACT_RU_JOB RES   LEFT OUTER JOIN ACT_RU_EXECUTION PI ON PI.ID_ = RES.PROCESS_INSTANCE_ID_  where (RES.RETR 
IES_ > 0)  and (RES.DUEDATE_ is null or RES.DUEDATE_ < ?)  and (RES.LOCK_OWNER_ is null or RES.LOCK_EXP_TIME_ < ?) and (  (RES.EXECUTION_ID_ 
is null)  or  (PI.SUSPENSION_STATE_ = 1)  )  LIMIT ? OFFSET ? 

Cause: org.postgresql.util.PSQLException: This connection has been closed.: org.apache.ibatis.exceptions.PersistenceException: 

Error querying database. Cause: org.postgresql.util.PSQLException: This connection has been closed. 

The error may exist in org/activiti/db/mapping/entity/Job.xml 
The error may involve org.activiti.engine.impl.persistence.entity.JobEntity.selectNextJobsToExecute 

在執行查詢

SQL: select  RES.*   from ACT_RU_JOB RES   LEFT OUTER JOIN ACT_RU_EXECUTION PI ON PI.ID_ = RES.PROCESS_INSTANCE_ID_  where (RES.RETR 
IES_ > 0)  and (RES.DUEDATE_ is null or RES.DUEDATE_ < ?)  and (RES.LOCK_OWNER_ is null or RES.LOCK_EXP_TIME_ < ?) and (  (RES.EXECUTION_ID_ 
is null)  or  (PI.SUSPENSION_STATE_ = 1)  )  LIMIT ? OFFSET ? 

Cause: org.postgresql.util.PSQLException: This connection has been closed. 
at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:23) [mybatis-3.1.1.jar:3.1.1] 
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:104) [mybatis-3.1.1.jar:3.1.1] 
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:95) [mybatis-3.1.1.jar:3.1.1] 
at org.activiti.engine.impl.db.DbSqlSession.selectListWithRawParameter(DbSqlSession.java:301) [activiti-engine-5.11.jar:5.11] 
at org.activiti.engine.impl.db.DbSqlSession.selectList(DbSqlSession.java:292) [activiti-engine-5.11.jar:5.11] 
at org.activiti.engine.impl.db.DbSqlSession.selectList(DbSqlSession.java:287) [activiti-engine-5.11.jar:5.11] 
at org.activiti.engine.impl.db.DbSqlSession.selectList(DbSqlSession.java:274) [activiti-engine-5.11.jar:5.11] 
at org.activiti.engine.impl.persistence.entity.JobManager.findNextJobsToExecute(JobManager.java:105) [activiti-engine-5.11.jar:5.11] 
at org.activiti.engine.impl.cmd.AcquireJobsCmd.execute(AcquireJobsCmd.java:50) [activiti-engine-5.11.jar:5.11] 
at org.activiti.engine.impl.cmd.AcquireJobsCmd.execute(AcquireJobsCmd.java:33) [activiti-engine-5.11.jar:5.11] 
at org.activiti.engine.impl.interceptor.CommandExecutorImpl.execute(CommandExecutorImpl.java:24) [activiti-engine-5.11.jar:5.11] 
at org.activiti.engine.impl.interceptor.CommandContextInterceptor.execute(CommandContextInterceptor.java:60) [activiti-engine-5.11.jar:5.11] 
at org.activiti.engine.impl.interceptor.LogInterceptor.execute(LogInterceptor.java:32) [activiti-engine-5.11.jar:5.11] 
at org.activiti.engine.impl.jobexecutor.AcquireJobsRunnable.run(AcquireJobsRunnable.java:61) [activiti-engine-5.11.jar:5.11] 
at java.lang.Thread.run(Thread.java:662) [rt.jar:1.6.0_32] 
Caused by: org.postgresql.util.PSQLException: This connection has been closed. 
at org.postgresql.jdbc2.AbstractJdbc2Connection.checkClosed(AbstractJdbc2Connection.java:714) 
at org.postgresql.jdbc3.AbstractJdbc3Connection.prepareStatement(AbstractJdbc3Connection.java:274) 
at org.jboss.jca.adapters.jdbc.BaseWrapperManagedConnection.doPrepareStatement(BaseWrapperManagedConnection.java:677) 
at org.jboss.jca.adapters.jdbc.BaseWrapperManagedConnection.prepareStatement(BaseWrapperManagedConnection.java:663) 
at org.jboss.jca.adapters.jdbc.WrappedConnection.prepareStatement(WrappedConnection.java:404) 
at org.apache.ibatis.executor.statement.PreparedStatementHandler.instantiateStatement(PreparedStatementHandler.java:72) [mybatis-3.1.1.jar:3.1.1] 
at org.apache.ibatis.executor.statement.BaseStatementHandler.prepare(BaseStatementHandler.java:82) [mybatis-3.1.1.jar:3.1.1] 
at org.apache.ibatis.executor.statement.RoutingStatementHandler.prepare(RoutingStatementHandler.java:54) [mybatis-3.1.1.jar:3.1.1] 
at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:70) [mybatis-3.1.1.jar:3.1.1] 
at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:56) [mybatis-3.1.1.jar:3.1.1] 
at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:267) [mybatis-3.1.1.jar:3.1.1] 
at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:141) [mybatis-3.1.1.jar:3.1.1] 
at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:105) [mybatis-3.1.1.jar:3.1.1] 
at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:81) [mybatis-3.1.1.jar:3.1.1] 
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:101) [mybatis-3.1.1.jar:3.1.1] 
... 13 more 
+0

碼碼碼碼碼plzzzzzzz – madhairsilence

+0

對不起madhairsilence這是不可能的共享代碼,你能告訴場景中,這個異常發生。 – sai576

+0

你解決了這個問題嗎?是你的JDBC隔離級別Read committed/Transaction_read_committed? – Kevin

回答

2

我不得不使用PHP類似的問題發生錯誤。問題的原因是我嵌套連接。內部連接返回數據後,外部連接返回關閉。 解決方案很簡單:連續處理兩個連接,這意味着在這種情況下,我首先執行先前的內部連接,然後執行原始外部連接。

象徵:

try{ 
    firstConnection = createConnection(); 
    results = firstConnection.query(...); 
    if results == true then 
    secondConnection = createConnection(); 
    resultsToo = secondConnection.query(); 
    if resultsToo == true then 
     processResults(resultsToo); 
     closeConnection(); 
    end if; 
    processResults(results); 
    closeConnection(); 
    end if; 
exceptionHandling(); 

處理第二連接第一連接解決我的問題了。

0

問題可通過去除默認Activiti的數據源配置這個選項來解決

<property name="defaultAutoCommit" value="false" />