在并发线程中使用UserTransaction

时间:2018-11-29 17:53:41

标签: java multithreading jboss oracle-sqldeveloper

在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;
    }
}

0 个答案:

没有答案