我正在通过以下方式在 Web 应用程序中创建一个线程。在 Web 应用程序中创建线程可能不是正确的做法,但不幸的是,在我的应用程序中就是这样做的。
线程必须使用传递给其可运行对象的相同连接对象来调用存储过程。但是由于错误 DSRA9110E:语句已关闭,该过程没有得到执行。偶尔我也会收到“连接已关闭”。请注意,这只发生在 IBM Websphere 中,并且在 Apache Tomcat 中部署时没有问题。
线程是否有可能正在运行,即 thread.start() 在 persistReconcileRecord 方法完成之前执行。
我无法理解导致此语句/连接已关闭问题的原因。我感谢有关此问题的任何帮助。如果需要更多信息,请告诉我。
public class MyServiceImpl{
private ReconDAO reconDAO = new ReconDAO();
public String anyMethod(String infodom,ReconModel recon){
//persistReconcileRecord is a method in DAO class.
reconDAO.persistReconcileRecord(infodom, recon,"I");
Connection connection=DBManager.getConnection(infodom);
WorkerThread worker=new WorkerThread(infodom,recon.getReconciliationId(),"I",connection);
Thread thread=new Thread(worker);
thread.start();
JSONObject jsonObj=new JSONObject();
jsonObj.put("EXIST_VALIDATION", "false");
jsonObj.put("RECONCILIATION_ID", recon.getReconciliationId());
return jsonObj.toString();
}
}
public class ReconDAO{
public void persistReconcileRecord(String infodom,ReconModel reconModel) throws Exception{
try{
//This method creates a new connection and inserts records into database and then closes it.
}catch(Exception e){
}finally{
closeConnection(connection);
closePreparedStatement(pstmt);
}
}
public class WorkerThread implements Runnable{
private String infodom;
private Long reconciliationId;
private String operation;
private Connection connection;
//A parameterized constructor to initialize all instance variables
public void run(){
//Uses the connection object from this class and then closes it in finally block
//Calls a stored procedure
}
}