使用组件管理的事务
可允许会话 Bean、Servlet 或应用程序客户机组件使用组件管理的事务来直接管理其自己的事务,而不是让容器进行管理。
关于此任务
注: 实体 Bean 无法管理事务(所以无法使用 Bean 管理事务)。
要使会话 Bean、Servlet 或应用程序客户机组件能够使用组件管理的事务,那么完成以下各个步骤:
过程
- 对于会话 Bean,将组件部署描述符中的事务类型属性设置为 Bean,如配置事务部署属性中所述。
- 对于应用程序客户机组件,通过设置组件部署描述符中的允许使用 JTA 定界属性来启用对事务定界的支持,如配置事务部署属性中所述。
- 编写组件代码以主动地管理事务。
对于有状态会话 Bean,在完成给定方法之前不必完成(即,落实或回滚)以该方法启动的事务。可以在以后完成此事务,例如在随后对同一方法调用时或者甚至在另一种方法中。然而,通常首选的方法是构造应用程序以使事务在同一方法调用中开始及完成,因为这样会简化应用程序的调试和维护。
以下代码摘录显示了获取封装事务上下文的对象必需的标准代码,并且包含了以下各个步骤:- 通过对 java:comp/UserTransaction 调用查找来创建 javax.transaction.UserTransaction 对象。
- 根据需要使用 UserTransaction 对象,通过 begin 和 commit 之类的事务方法来定界事务的范围。如果应用程序组件开始执行事务,那么它也必须通过调用 commit 方法或 rollback 方法来完成该事务。
... import javax.transaction.*; import javax.naming.InitialContext; import javax.naming.NamingException; ... public float doSomething(long arg1)throws NamingException { InitialContext initCtx = new InitialContext(); UserTransaction userTran = (UserTransaction)initCtx.lookup( "java:comp/UserTransaction"); ... //Use userTran object to call transaction methods userTran.begin (); //Do transactional work ... userTran.commit (); ... } ... }


http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tjta_usebmt
文件名:tjta_usebmt.html