附表中的JTA UserTransaction

时间:2014-05-13 15:48:48

标签: java transactions ejb schedule

我正在使用MySQL数据库在Glassfish服务器上开发JSF程序。我目前有一个Singleton LocalBean,代码的简化版本如下所示:

@Resource
private UserTransaction trans;

@Schedule(second = "30", minute = "*", hour = "*", dayOfWeek = "*", dayOfMonth = "*", month = "*", year = "*", info = "subTimer")
private void scheduledTimeout(final Timer t)
{
        InsertIntoDatabase();
    }

private void InsertIntoDatabase()
{
    trans.begin();
    trans.doTransaction();
    trans.commit(); 
}

没有时间表,代码可以正常工作。不幸的是,我需要运行检查并可能每天将信息插入MySQL数据库,甚至可能每天两次。我收到错误声明:

 SEVERE: Transaction commit error
 java.lang.IllegalStateException: Operation not allowed.    
 at com.sun.enterprise.transaction.UserTransactionImpl.checkUserTransactionMethodAccess(UserTransactionImpl.java:146)

我尝试过研究它,我发现你不能在计时器或预定事件中运行UserTransactions,但我需要某种方式按计划执行交易,我不知道如何继续用它。

1 个答案:

答案 0 :(得分:0)

对不起,愚蠢的问题并弄清楚了。由于事务是在调度程序中启动的,所以我根本不需要在那里使用usertransaction。因此,只需调用EntityManager.merge()即可完成工作,所有事务管理都由调度程序处理。