某些容器事务设置并非对所有企业 bean 可用。而且,某些方法对特定事务设置和 bean 不可用。这些规则已在基于 EJB 1.1 和 EJB 2.x 规范的“添加容器事务”向导中实现。
- 在 J2EE 透视图的“项目资源管理器”视图中,右键单击 EJB 项目的部署描述符,并选择以打开部署描述符编辑器。
- 在编辑器的组装页上,单击“容器事务”部分中的添加。
- 从找到的 bean 的列表中选择一个或多个企业 bean。
- 从下列选项中选择容器事务类型:
- NotSupported - 指导容器在没有事务上下文的情况下调用 bean 方法。如果客户机从事务上下文内调用 bean 方法,则容器将在企业 bean 实例上调用方法之前暂挂事务与当前线程之间的关联。然后,容器在方法调用返回时继续暂挂的关联。暂挂的事务上下文不会被传递给此 bean 方法使用的任何企业 bean 对象或资源。
- Supports - 指导如果客户机在事务内调用 bean 方法,则容器就在事务上下文内调用 bean 方法。如果客户机在没有事务上下文的情况下调用 bean 方法,则容器就在没有事务上下文的情况下调用 bean 方法。事务上下文被传递给由此 bean 方法使用的任何企业 bean 对象或资源。
- Required - 指导容器在事务上下文内调用 bean 方法。如果客户机从事务上下文内调用 bean 方法,则容器就在客户机事务上下文内调用该 bean 方法。如果客户机在事务上下文之外调用 bean 方法,则容器将创建新的事务上下文并从该上下文内调用 bean 方法。事务上下文被传递给由此 bean 方法使用的任何企业 bean 对象或资源。
- RequiresNew - 指导容器总是在新事务上下文内调用 bean 方法,而不论客户机是在事务上下文之内还是之外调用方法。事务上下文被传递给由此 bean 方法使用的任何企业 bean 对象或资源。
- Mandatory - 指导容器总是在与客户机相关联的事务上下文内调用 bean 方法。如果客户机尝试在没有事务上下文的情况下调用 bean 方法,则容器将向客户机抛出 javax.jts.TransactiononRequiredException 异常。事务上下文被传递给由企业 bean 方法访问的任何 EJB 对象或资源。访问这些实体 bean 的 EJB 客户机必须在现有事务内执行此任务。对于其它企业 bean,企业 bean 或 bean 方法必须实现“Bean 管理的”值或者使用 Required 或 RequiresNew 值。对于非企业 bean EJB 客户机,客户机必须通过使用 javax.transaction.UserTransaction 接口来调用事务。
- Never - 指导容器在没有事务上下文的情况下调用 bean 方法。如果客户机从事务上下文内调用 bean 方法,则容器将抛出 java.rmi.RemoteException 异常。如果客户机从事务上下文外调用 bean 方法,则容器的行为就好象是设置了 NotSupported 事务属性的行为那样。客户机必须在没有事务上下文的情况下调用方法
- 从列表中选择一个或多个方法元素。
- 单击完成。
容器事务被添加并显示在“容器事务”部分,其中容器事务是按容器事务类型列示的。
在定义容器事务之后,可以使用部署描述符编辑器来使用它们。
- 要编辑容器事务,请从“容器事务”列表中选择它,并单击编辑。
- 要删除容器事务,请从列表中选择它,并单击除去。
- 要获取多个相同容器事务类型的容器事务并将其合并为一个容器事务定义,请单击合并。