编程式方法是组件管理的事务,而声明式事务定界方法是容器管理的事务。
J2EE 应用程序使用 JTA javax.transaction.UserTransaction 接口,通过编程将事务边界限定为对受保护资源的一组更改。在 servlet 和 EJB 环境中都可以使用组件管理的事务。对于 EJB,在它的部署描述符中将事务属性设置为 TX_BEAN_MANAGED。
事务通常从 UserTransaction.begin() 调用开始。当应用程序组件准备落实更改时,它就会调用 UserTransaction.commit() 调用来协调和落实更改。如果应用程序组件必须回滚事务,则它将调用 UserTransaction.rollback() 且所有更改将被回退。例如:
// Get User Transaction javax.transaction.UserTransaction transaction = ejbcontext.getUserTransaction(); // Start transaction transaction.begin(); // Make changes to the protected resources. // For example, use the J2EE/CA's CCI Interaction interface // to submit changes to an EIS system(s) interaction.execute(interactionSpec, input, output); if (/* decide to commit */) { // commit the transaction transaction.commit(); } else { /* decide to roll back */ // rollback the transaction transaction.rollback(); }
只有在 EJB 环境中才能使用容器管理的事务。EJB 通过部署描述符中的事务属性(例如,TX_REQUIRED)来以声明方式指定容器管理的事务。容器管理的事务由 EJB 容器来管理。容器将代表 EJB 组件来调用适当的方法,例如,begin、commit 或 rollback。这种声明式方法简化了 EJB 中的编程调用。
相关阅读资料:有关 J2EE 体系结构和 JTA 规范的更多信息,请参阅 http://java.sun.com/j2ee/docs.html。