2016-07-22 43 views
0

我創建連接Connection con = ds.getConnection();(其中,ds是數據源)在開放的閱讀器的和在靠近其關閉()的,如果連接在讀者關閉關閉關閉錯誤()讀者。JSR 352:連接是在分配步驟

但是當我運行多個分區作業,在作業過程中,我得到關閉連接錯誤

Caused by: java.sql.SQLException: [jcc][t4][10335][10366][3.58.82] Invalid operation: Connection is closed. ERRORCODE=-4470, SQLSTATE=08003 DSRA0010E: SQL State = 08003, Error Code = -4,470

我認爲當隔壁一個完成這種情況發生。

所以我的問題是,爲什麼會發生這種情況?如何處理連接?或者Java是否關注關閉連接?

我使用Java批次在WebSphere自由 UPDATE:

​​

}

完整的錯誤消息 [ERROR ] J2CA0024E: Method rollback, within transaction branch ID {XidImpl: formatId(57415344), gtrid_length(36), bqual_length(40), data(0000015645eff4470000000915937ff85f46c3ed056b19010aa5147e1183f8d3ae81c04c0000015645eff4470000000915937ff85f46c3ed056b19010aa5147e1183f8d3ae81c04c00000001)} of resource pool connectionManager[Pool], caught com.ibm.ws.exception.WsException: DSRA0080E: An exception was received by the Data Store Adapter. See original exception message: [jcc][t4][10335][10366][3.58.82] Invalid operation: Connection is closed. ERRORCODE=-4470, SQLSTATE=08003. with SQL State : 08003 SQL Code : -4470

+1

您可以發佈您的說明連接和ResultSet中使用的一些示例代碼?你不是跨線程共享嗎?你能也從server.xml中顯示您的數據源/ JDBC配置和還提到,無論您是使用[這個問題]提到的「非共享連接」的方式(http://stackoverflow.com/questions/36935252/in-a-自由分批塊步得到-結果集-IS-閉合時滾動個#)。 –

+0

是的,我正在使用Unshared Connections方法。只有當我在close()中關閉連接時,問題纔會發生。如果我刪除它,它工作正常。 –

+0

您正在關閉ResultSet之前的Connection。您應該先關閉ResultSet。 –

回答

0

我dont't知道JSR-352的批量處理完全相同的處理方式與Spring Batch的不一樣,但...

在Spring Batch的,如果你有一個使用塊處理什麼,我想你可以做些什麼來解決這個問題是擺在beforeRead()openConnection(),並在afterRead()closeConnection()一個Reader。

要做到這一點,你應該實現一個監聽器。查看這些,以便了解我在說什麼。

Spring Annotation Type BeforeRead

Interface ItemReadListener

相關問題