我们使用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
,我希望事务管理器不起作用。
答案 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
注释的方法,则确实需要确保原始方法确实启动/恢复了事务并且不传播事务上下文。