无状态会话bean事务

时间:2014-03-04 16:55:42

标签: java transactions ejb-3.1 stateless-session-bean

我正在开发一个JSF Web应用程序。服务层使用无状态会话bean开发。使用CDI将这些无状态bean注入托管bean。

我知道要管理无状态bean中的事务,我可以使用容器管理事务或bean管理事务。默认情况下,无状态bean中的所有公共方法都是容器管理的事务。

所以我的问题是:

无状态bean中的事务管理首选方法是哪种 - 容器管理或bean管理?

是否建议在服务层中同时使用bean托管和容器管理的事务bean?

是否可以在单个bean中同时使用容器管理和bean管理事务?如果可能,是否可取?

请告诉我你的建议......

2 个答案:

答案 0 :(得分:2)

  

无状态bean中的事务管理首选方法 - 容器>托管或bean托管?

典型和首选方法是使用CMT。事务管理是应用服务器提供的有用服务之一,它简化了您的开发,因此,您应该使用这种方法(也是默认的),这是当时广大的城市。

但是,在某些特殊情况下仍然需要BMT:

a)何时需要减少事务边界以提高性能。

b)当你有一个有状态会话bean时,你需要在多个客户端调用中保留一个事务。 (很难看出这什么时候有用)。

  

是否建议在服务层中同时使用bean托管和容器管理的事务bean?

是的,如果某些服务需要上述特殊要求,您可以将两种bean事务类型用作服务层的一部分。

  

是否可以在单个bean中同时使用容器管理和bean管理事务?如果可能,是否可取?

不,这是不可能的。

答案 1 :(得分:0)

如果您的事务范围不跨越更多服务层方法,则使用容器管理事务:理想情况下,您应该为一个方法设置一个事务(容器触发提交)。如果不是这种情况,那么bean管理的事务应该更实用,让调用者决定何时提交或回滚。