WEB开发网
开发学院软件开发Java EJB 3.0 在 WAS V7 上开发部署的最佳实践 阅读

EJB 3.0 在 WAS V7 上开发部署的最佳实践

 2010-01-04 00:00:00 来源:WEB开发网   
核心提示: 在 EJB(特别是无状态会话 Bean)中,编程式事务模型存在一个重大的架构上的限制:我们不能在两个都使用编程式事务模式的 Bean 之间传递事务上下文(transaction context),EJB 3.0 在 WAS V7 上开发部署的最佳实践(10),不过,我们可以将一个使用编程式事务模

在 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 应用中对外接口,持久层,事务策略三大部分的内容。相信在工程实践中能够给开发者们提供参考。

本文示例源代码或素材下载

上一页  5 6 7 8 9 10 

Tags:EJB WAS 开发

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接