EJB 3.0 在 WAS V7 上开发部署的最佳实践
2010-01-04 00:00:00 来源:WEB开发网在 EJB(特别是无状态会话 Bean)中,编程式事务模型存在一个重大的架构上的限制:我们不能在两个都使用编程式事务模式的 Bean 之间传递事务上下文(transaction context)。不过,我们可以将一个使用编程式事务模型的 EJB 或客户端的事务上下文传递给一个使用声明式事务模型的 EJB。
因此在一般情况下,我们仅在调用 EJB 的客户端中使用编程式事务模型。接下来我们将讨论声明式的事务模型。
声明式事务模型 :
在声明式事务模型中,由容器来管理维护事务,这意味着开发者不需要通过写 Java 代码来开始或提交一个事务,取而代之的是使用一定的“声明”告诉容器如何来管理事务。我们可以通过 ejb-jarv.xml 配置文件来实现对容器的声明,同样也可以使用注释或部署描述符来声明使用事务。在 EJB 中,声明式的事务模型体现为容器管理的事务(Container-Managed Transactions--CMT)。
在使用声明式事务模型的代码中,我们仅仅需要使用一个方法 -- setRollbackOnly(),其他都可以通过注释或配置来实现。setRollbackOnly() 方法告诉容器本事务不论接下来进行何种操作,最终都将被回滚。以下是使用声明式事务的 EJB 中一个方法实现的例子:
清单 9. EJB 中使用声明式事务模型 @TransactionAttribute(TransactionAttributeType.REQUIRED)
public void operation() {
try {
// Some business logic
// ...
} catch (Exception ex) {
ex.printStackTrace();
sessionCtx.setRollbackOnly();
}
}
当然,我们还需要使用注释来通知容器本 EJB 是一个容器管理事务(CMT)的 Bean:
清单 10. CMT 事务声明 @TransactionManagement(TransactionManagementType.CONTAINER)
事务策略的组合:
结合以上各种事务模型的讨论结论以及工程中的实际情况,在大部分情况下,我们在实现 EJB 的时候使用声明式的事务模型(即 CMT),而在调用这些 EJB 的客户端代码中使用编程式的事务模型。
总结
本文通过一些简单的例子对 WAS V7 环境下 EJB 3.0 应用开发容易遇到的问题及解决的最佳实践进行了讲解和说明,主要介绍了 EJB 3.0 应用中对外接口,持久层,事务策略三大部分的内容。相信在工程实践中能够给开发者们提供参考。
本文示例源代码或素材下载
- ››开发Android 日历教程
- ››开发学院总结 Win 8实用技巧大全
- ››开发学院原创教程:把win8的IE10放桌面上方法(非...
- ››开发者眼中的Windows Phone和Android
- ››开发学院教你用SQL 语句最快速清空MySQL 数据表的...
- ››开发一个自己的HTML在线编辑器(一)
- ››开发一个自己的HTML在线编辑器(二)
- ››开发者在App Store上赚的钱比在Android Market上多...
- ››开发者应深入学习的10个Android开源应用项目
- ››开发移动 Web Ajax 应用
- ››开发者眼中的iPhone与Android
- ››开发者或想使用的10个Android2.2新特性
更多精彩
赞助商链接