有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

javax与javax的区别。ejb。会话同步和javax。交易同步

我正在开发一个主要使用无状态会话bean(SLSB)的EJB3应用程序。它们使用容器管理事务(CMT)

我希望bean知道事务(用于日志记录等)。我可以实现javax.ejb.SessionSynchronization来实现这一点。我发现我可以在默认的拦截器中注册一个javax.transaction.Synchronization来获得类似的回调

使用其中一种方法比使用另一种方法有什么缺点/优点


共 (2) 个答案

  1. # 1 楼答案

    同一事务中可以涉及多个相同类型的SLSB。一旦方法退出,SLSB就会返回到池中供下一次调用使用,因此SLSB实例“感知”事务是不安全的:在收到通知时,bean可能正在另一个事务中使用

    至于SFSB,我想说这两种方法在理论上没有优势。但是,EJB容器可能会对各种内部任务使用同步,因此使用SessionSynchronization将允许EJB容器对回调的时间有更多的控制权,这与它自己的操作有关

  2. # 2 楼答案

    我只是试着用javax。ejb。SessionSynchronization接口具有无状态会话bean,但由于无法获得三个实现方法的任何调用而感到困惑。然后我在javax.ejb.SessionSynchronization JavaDoc中看到了这个评论:

    Only a stateful session bean with container-managed transaction demarcation can receive session synchronization notifications. Other bean types must not implement the SessionSynchronization interface or use the session synchronization annotations.

    另请参见this线程以了解更多背景信息。因此,我的结论是,使用CMT使无状态会话bean具有事务感知能力不能用javax实现。ejb。会话同步