EJB 3.1中BMC和BMT的用例

时间:2011-12-07 09:43:33

标签: ejb-3.1

我正在分析可以使用Bean管理事务(BMT)和Bean管理并发(BMC)的可能用例。以下是我在BMT的基础工作的结果,

  1. 可能在不可预测的时间内运行的交易
    • 容器在事务上施加超时(尽管它是可配置的)。
    • 对于某些交易(例如,将文件FTP到第三方供应商,持久化jms队列分发的结果,或者提交两个不同的数据源),交易时间可能非常难以预测。
    • 在这种情况下,Bean Provider可以使用BMT控制事务管理。
    • 在这种情况下坚持使用CMT可能会导致许多异常和事务失败。
  2. 单个bean方法中的多个事务
    • CMT只允许bean方法使用单个事务。
    • 如果我们需要使用很多交易,我们必须使用BMT - 在大多数情况下,有可能在CMT中使用BMT。但有时候解决方法可能不是最佳的。
  3. 跨多个EJB方法调用的单个事务
    • 如果必须使用同一事务的范围调用多个方法,则可以使用BMT。
  4. 但是,我还没有找到任何有趣的BMC用例。我只能从Enterprise JavaBeans 3.1(第6版)获得的信息是

    “...容器管理的并发性并未涵盖多线程代码必须解决的全部问题。在这些情况下,规范通过提供bean管理的并发模式,提供了Java语言并发工具的全部功能。 “

    如果您可以在使用BMT或BMC的特定用例上分享您的经验,那将是非常好的。

1 个答案:

答案 0 :(得分:2)

如果要在同一bean方法中多次开始/提交事务,BMT也很有用。如果您想要精确控制beforeCompletion期间抛出的异常,它也很有用;例如,JPA乐观锁定可以在提交期间抛出异常,如果您正在使用BMT,则只能在EJB内处理。

如果您的方法委托给已经处理并发的另一个服务,则BMC很有用。例如,如果您有一个使用ConcurrentHashMap管理数据的单例,那么您不需要容器来执行其他同步。