리더 열기에서 Connection con = ds.getConnection();
(여기서 ds는 DataSource 임)이라는 연결을 만들고 리더.JSR 352 : 연결이 닫혔습니다. 분할 된 단계의 판독기 close()에서 연결이 닫히면 오류가 발생합니다.
하지만 난이 작업의 중간에 여러 파티션 작업을 실행할 때, 내가 얻을 연결 내가 파티션 중 하나가 완료되면 이런 가정 폐쇄 오류
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가 연결을 닫는 처리합니까?
I에서는 WebSphere 자유에 UPDATE 자바 배치를 사용하고 있습니다 :
<jdbcDriver libraryRef="DB2JCC4Lib"/>
<properties.db2.jcc databaseName="" driverType="4" password="" portNumber="" queryDataSize="65535" serverName="" user=""/>
</dataSource>
public class Reader implements ItemReader {
private DataSource ds = null;
private Connection con = null;
public Reader() {
}
public void close() {
try {
con.close();
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* @see ItemReader#readItem()
*/
public Object readItem() {
String s="";
try {
if (rs.next()) {
for (int i = 1; i <= 10; i++) {
s+=rs.getString(i);
}
return s;
}
else {
return null;
}
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
public Serializable checkpointInfo() {
}
public void open(Serializable checkpoint) {
if (ds == null) {
try {
ds = (DataSource) new InitialContext()
.lookup("java:comp/env/jdbc/dataSource");
} catch (Exception e) {
e.printStackTrace();
}
}
try {
con = ds.getConnection();
statement= con
.prepareCall("call abc.xyz(?)");
statement.setString("param", "xxx");
boolean result= statement.execute();
if (result) {
rs = statement.getResultSet();
if (rs == null) {
throw new NullPointerException();
}
} else {
throw new SQLException();
}
} catch (Exception e) {
e.printStackTrace();
}
}
} 내가 JSR-352의 배치가 정확히 처리를 처리 알고하지 말자 [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
당신은 연결 및 ResultSet의 사용을 보여주는 몇 가지 예제 코드를 게시 할 수 있습니까? 당신은 스레드간에 공유하지 않는 당신입니까? 또한 server.xml의 DataSource/JDBC 설정을 보여줄 수 있으며 [이 질문에 언급 된 "공유되지 않은 연결"접근법을 사용하고 있는지 언급 할 수 있습니까 (http://stackoverflow.com/questions/36935252/in-a- liberty-batch-chunk-step-getting-resultset-is-closed-when-scrolling-th #). –
예 공유되지 않은 연결 방식을 사용하고 있습니다. 문제는 close()에서 연결을 닫을 때만 발생합니다. 내가 그것을 제거하면, 그것은 잘 작동합니다. –
ResultSet 전에 Connection을 닫고 있습니다. 먼저 ResultSet을 닫아야합니다. –