2016-11-28 75 views
0

何时用JPA(EclipseLink 2.0)提交事务?何时交易JEE JPA(EclipseLink 2.0)?

这是我的问题:

public void methodA() 
{ 
    while(something) 
    { 
     methodB(); 
    } 
} 

public void methodB() 
{ 
    //Insert new client into Client table. 
} 

比方说,这需要10分钟methodA完成。如果我偷看数据库的客户端表,而methodA运行,我看不到任何行。这意味着在methodB结束后,该事务未提交。但是如果我等到methodA完成,那么客户端就会出现在数据库中。

我希望每个交易在methodB结束后提交。我怎样才能做到这一点?

编辑:我希望应用程序容器(Glassfish)负责“提交”。我不想通过调用实体管理器来做到这一点。我正在寻找诸如methodB()以上的注释。这两种方法都在单例bean中。

+1

去哪里你把你的交易的定义/划分?很明显,任何人都可以调用em.getTransaction()并在使用本地事务时提交它, –

+0

我不想自己犯。我想要应用程序容器来照顾它(Glassfish 3.1.2.2)。 –

回答

0

使用@Stateless EJB bean时,事务在离开EJB时默认提交(默认情况下)。

看跌的methodB()在单独的EJB。(假设了methodA()不是EJB)

+0

嗯,我想这可能是一个解决方案......但它会严重影响我的设计。没有更好的方法来做到这一点?也许在methodB之上的注释? –

+0

@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)方法诠释。但是只有当从其他类调用它时才创建新的事务,然后“this”。 –