我正在开发一个主要使用无状态会话bean的EJB3应用程序。它们使用容器管理事务(CMT)。
我希望bean知道事务(用于日志记录等)。我可以实现javax.ejb.SessionSynchronization来做这件事。我发现我可以在一个默认的拦截器中注册一个javax.transaction.Synchronization来获得类似的回调。
使用一个比使用另一个有什么缺点/优点吗?
发布于 2011-08-03 22:22:13
同一事务中可以包含多个相同类型的SLSB。一旦方法退出,SLSB就会返回到池中供下一次调用使用,因此SLSB实例“知道”事务是不安全的:当它收到通知时,该bean可能正在另一个事务中使用。
至于SFSB,我会说这两种方法在理论上没有优势。但是,EJB容器可能会对各种内部任务使用同步,因此使用SessionSynchronization将允许EJB容器更好地控制与其自身操作相关的回调的时间。
发布于 2014-05-15 21:40:14
我只是尝试将javax.ejb.SessionSynchronization接口与一个无状态会话bean一起使用,并且不知道如何调用这三个已实现的方法。然后我在javax.ejb.SessionSynchronization JavaDoc中看到了这条评论
只有具有容器管理的事务分界的有状态会话bean才能接收会话同步通知。其他bean类型不得实现SessionSynchronization接口或使用会话同步注释。
有关更多背景信息,请参阅this线程。因此,我的结论是,使用CMT使无状态会话bean具有事务感知功能是不能通过javax.ejb.SessionSynchronization实现的。
https://stackoverflow.com/questions/6917717
复制相似问题