快速业务通道

使用Apache OpenJPA开发EJB 3.0应用,第8部分 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15

使用Apache OpenJPA开发EJB 3.0应用,第8部分

时间:2011-08-31 IBM 肖菁

在Java EE环境下开发、部署OpenJPA 应用

在 本系列 文章的第 1 部分:OpenJPA 与 EJB 3.0中介绍 OpenJPA 时,曾经 提到“OpenJPA 可以作为独立的持久层框架发挥作用,也可以轻松的与其它 Java EE 应用框架或者符合 EJB3.0 标准的容器集成”,在本系列的前面几篇文章中都 只是讲解了如何将 OpenJPA 作为独立的持久层框架发挥作用,在本文中,我们将 会了解如何在 JBoss 应用服务器中使用 OpenJPA 开发实体 Bean、并且用 SessionBean 封装实体 Bean 操作、在客户端通过 Local 接口访问的开发、部署 过程。

融入 Java EE

OpenJPA 是标准的 JPA 框架,因此它能够被任何的 EJB3.0 容器所集成,作 为 JPA 的一种实现。比如我们可以将 JBoss 应用服务器中的 JPA 实现框架由系 统默认的 Hibernate 切换成 OpenJPA,同样,我们可以将 Websphere、WebLogic 等的 JPA 实现框架由系统默认的框架切换成 OpenJPA。

要将 OpenJPA 容器 Java EE 容器,和 OpenJPA 作为独立框架运行时相比需 要完成几部分的转换:

部署形式变为 EJB Jar 或者 EAR;OpenJPA 应用在 Java EE 环境下部署形式 是 EJB Jar 或者 EAR,而不再是独立的 Java 应用或者 Servlet 容器中的 Web 应用。

使用系统级 JDBC 数据源,将事务处理委托给 JTA 事务;

在前面几篇文章中,我们开发 OpenJPA 应用时都是在 OpenJPA 配置文件 persistence.xml 文件中直接提供访问数据库的 JDBC 配置,操作实体的时候, 我们也需要处理使用 entityManager.getTransaction().begin()、 entityManager.getTransaction().commit() 这样的语句显示的处理事务。

在 Java EE 环境下,JDBC 通常都是由容器管理,JDBC 访问时的事务也通常 使用容器管理,这样可以获得更大的灵活性,也能够最大化的利用容器的特性让 企业应用更加强壮。要将 OpenJPA 容器 Java EE 容器,我们首要的任务就是将 OpenJPA 中的应用级 JDBC 数据源切换到 Java EE 容器的 JDBC 数据源上,另外 还需要将事务处理委托给 Java EE 容器提供的 JTA 事务,而不在使用 entityManager.getTransaction().begin()、 entityManager.getTransaction ().commit() 这样的语句显示的处理事务。

注入 Entity Manager Factory 或者 Entity Manager

在前面几篇文章中,我们开发 OpenJPA 应用中操纵实体之前,都需要通过 Persistence 的 createEntityManagerFactory 方法创建 EntityManagerFactory 对象,然后创建 EntityManager 对象后操作实体。

但是根据 EJB3.0 规范中 JPA 部分的要求,在 Java EE 容器中的 JPA 应用 应该通过依赖注入获取 Entity Manager Factory 或者是 EntityManager,也可 以选择将 Entity Manager Factory 或者是 EntityManager 绑定到 JNDI,在代 码中通过 JNDI 获取,而不是采用 Persistence 的 createEntityManagerFactory 方法来创建。

要将 OpenJPA 应用切换到 Java EE 环境下,我们需要向 OpenJPA 中注入 Entity Manager Factory 或者是 EntityManager 对象,或者是将 Entity Manager Factory 或者是 EntityManager 绑定到 JNDI,这取决于 Java EE 容器 的支持方式和开发者的爱好。除此之外,OpenJPA 应用中对应部分的代码也需要 修改,以适应 Java EE 容器端发生的变化。

使用会话 Bean 封装 EntityBean 的访问

在前面几篇文章中,OpenJPA 应用中生成的实体在客户端直接使用 Java 代码 调用,然而在 Java EE 容器中的实体肯定是无法被客户端代码直接访问的,而且 ,根据 EJB3.0 规范的描述,Java EE 容器中的实体无法和 EJB2.1 中的实体一 样绑定到 JNDI,因此我们的选择只能是使用会话 Bean 来封装 EntityBean 的

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号