我正在开发一个JSF Web应用程序。服务层使用无状态会话bean开发。使用CDI将这些无状态bean注入托管bean。
我知道要管理无状态bean中的事务,我可以使用容器管理事务或bean管理事务。默认情况下,无状态bean中的所有公共方法都是容器管理的事务。
所以我的问题是:
无状态bean中的事务管理首选方法是哪种 - 容器管理或bean管理?
是否建议在服务层中同时使用bean托管和容器管理的事务bean?
是否可以在单个bean中同时使用容器管理和bean管理事务?如果可能,是否可取?
请告诉我你的建议......
答案 0 :(得分:2)
无状态bean中的事务管理首选方法 - 容器>托管或bean托管?
典型和首选方法是使用CMT。事务管理是应用服务器提供的有用服务之一,它简化了您的开发,因此,您应该使用这种方法(也是默认的),这是当时广大的城市。
但是,在某些特殊情况下仍然需要BMT:
a)何时需要减少事务边界以提高性能。
b)当你有一个有状态会话bean时,你需要在多个客户端调用中保留一个事务。 (很难看出这什么时候有用)。
是否建议在服务层中同时使用bean托管和容器管理的事务bean?
是的,如果某些服务需要上述特殊要求,您可以将两种bean事务类型用作服务层的一部分。
是否可以在单个bean中同时使用容器管理和bean管理事务?如果可能,是否可取?
不,这是不可能的。
答案 1 :(得分:0)
如果您的事务范围不跨越更多服务层方法,则使用容器管理事务:理想情况下,您应该为一个方法设置一个事务(容器触发提交)。如果不是这种情况,那么bean管理的事务应该更实用,让调用者决定何时提交或回滚。