服务器中的事务存在于永不使用JTA =“ false”的wildfly12中调用吗?

时间:2018-09-24 14:04:36

标签: jpa jboss wildfly jta

我们使用wildfly12并将数据源与jta = false一起使用 在我们的ejb中,我们具有事务属性NEVER,但是在调用另一个具有事务属性NEVER的ejb类时抛出异常,如下所示:

Transaction present on server in Never call

根据下面的链接
Transaction present on server in Never call
 我们知道无法从具有事务属性NEVER的ejb进行方法调用,但是我们设置jta=false,我希望事务管理器不起作用。

1 个答案:

答案 0 :(得分:1)

不幸的是,在数据源上设置的jta=false并不意味着未启动事务。这意味着数据源将不会成为事务的一部分。如果没有特别说明,则CTM EJB组件在任何情况下都会启动事务。因此,启动事务,然后将事务上下文传播到组件调用的任何EJB方法。 注意:在处理方法(https://docs.oracle.com/cd/E19226-01/820-7627/bncik/index.html)时可以暂停事务,但在方法完成时恢复事务。

回到jta=false情况。如果在方法条目处设置jta=false,则CMT EJB将启动全局事务。在方法中使用此类数据源时,该数据源未加入全局事务。这意味着所有数据更改都将立即提交。

如果设置jta=true,则数据源将加入事务,并且在事务管理器说(通常在EJB方法的末尾)时运行对数据更改的提交。

如果要调用带有TransactionAttributeType.NEVER注释的方法,则确实需要确保原始方法确实启动/恢复了事务并且不传播事务上下文。