在JBOSS 6上,我正在对连接到SQL数据库并更新一些表的方法进行一些测试。现在,我想在多个线程中执行此方法,以提高性能。
所以我想做这样的事情:
首先我有线程类:
class TransactionThread extends Thread {
UserTransaction userTransaction = app.getUserTransaction();
@Override
public void run() {
userTransaction.begin();
//TRANSACTION CODE
userTransaction.commit();
}
}
然后我要创建并执行一些线程:
ArrayList <TransactionThread> threadList = new ArrayList<TransactionThread>();
for (int i = 0; i < 10; i++) {
threadList.add(new TransactionThread());
}
for (TransactionThread item: threadList ){
item.start();
}
现在,这里的问题是,由于此方法正在同时执行。如果任何线程完成其事务并提交,则仍在运行的线程也将提交,并且与数据库的连接将关闭。
出现此错误:
javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: Cannot open connection
为了避免关闭连接并使方法保持并发状态,我该怎么办?
编辑:这是app.getUserTransaction()
的作用:
public UserTransaction getUserTransaction() {
try {
Context context = new InitialContext();
return (UserTransaction) context
.lookup("java:comp/UserTransaction");
} catch (Exception e) {
return null;
}
}