EJB3 实体组件在 J2SE 中的使用

1/5/2008来源:Java教程人气:4712

前言:

  越来越多的企业将越来越多的业务转向自动化或半自动化平台,他们通过这个过程,进一步优化企业资源与治理方法,另一方面大大提升业务执行的效率与精确性。因此软件工程所需解决的实际问题,业务越来越复杂,规模越来越大,新旧系统配合使用的需求越来越多。软件工程技术和其它领域的生产力发展,就这样相互促进!

  对系统进行合理分解,是软件工程(也是其它领域)降低系统复杂性的常用手段和唯一的基本方法,今天的企业级应用系统一般由如下部份组成:
    1. 用户交互模块,
    2. 基于行业规范的业务中间件,
    3. 基于软件工程技术规范的系统中间件,
    4. 软硬件基础平台组成。

  以上其实是由上到下的 4 个层次,系统复杂度被分解到各层次的各个组件中。系统中间件就是其中对软件技术进行归纳的一个层次,该层次将一些常用的系统功能,从业务逻辑中剥离出来,并分门别类。本例即涉及系统中间件的使用。

  对中间件而言,开发人员只需要熟悉它们的使用方法,然后运用 "拿来主义",直接拿来,合理使用即可,是相当不错的开发资源。今天 "拿来" 的是 EJB3 持久层规范的 Hibernate 实现版本。交互代码就是在主程序中对规范中的接口的调用,很简单的示例。

  应该在这里提出"配置文件" 这一设计模式了 ---- 一定有人发笑:配置文件与设计模式何干?在系统维护过程中,当系统需要灵活变更组件或策略时,以配置文件代替硬编码来处理这种 "替换",大大减免了实现该逻辑的代码重新经历 "修改,编译,测试,发布" 等软件过程的机率 (配置文件中的内容需合理规划,否则将导致复杂性上升。 EJB 2.x 的部署描述文件就是最好佐证。 Log4J 配置文件则堪称典范)。 配置文件在组件装配方面更是功勋卓著。本文示例包含2个配置文件。

  诸多赘述,只是希望能使入门级朋友有个思想预备:为何本文示例并非一段代码,而由这么多松散的部份组成。下面言归正传。

  基础平台:

  • IBM T23 / PIII-M 1.13G/ 512M / 5400 rpm, 8M
  • Windows 2003
  • Postgresql 8.1.x
  • JDK 5.0 - update 4 ( 或 JRE 5.0 - update 4)

  中间件:

  • Hibernate-EntityManager 3.1beta6 :
    说明:这是 EJB3 持久层规范的 hibernate 实现。(若未集成 hibernate core, 必须另行获取。)

  • Postgresql 8.1.x JDBC Driver
    说明: postgresql 客户端 JDBC 驱动程序。

     
  • 以下可选内容源于 www.apache.org :
    common-dbcp: JDBC 数据源连接池中间件( hibernate 缺省情况下采用C3P0),依靠于 :
    common-collections
    common-pool

    说明: hibernate core 对 JDBC 连接池的使用处理得相当好,当代码在乎数据库连接的性能时, hibernate core 会根据配置文件 persistence.xml 中的相关配置,透明地配备连接池;若不需要该连接池,将配置文件中与相关的内容取消即可, hibernate core "自适用" 这种情形。
  开发工具:
  • Eclipse 3.1.x 以上版本
  • Eclipse WTP
  • Hibernate Tools
  • Subclipse: subversion 的 eclipse 客户端插件
  开发步骤:

  导读:

  本例的操作内容为:1,清除数据库中各表内容; 2,向数据库添加用户 hedan, 角色 friend, 并将新角色赋予新用户; 3,查询数据库中所有用户及其角色,并将之一一打印。这 3 个步骤分别对应 TestIt 类中的 removeAll, insert, query 三个方法。
下文中步骤 3、4 和 5 的内容是与 EJB3 – Persistence 规范相关的要点所在(请阅读这些小篇幅的源文件或配置文件中的说明),其它内容相对次要。

  本文假设读者能熟练使用 Eclipse JDT 及 Hibernate Tools, 并熟悉 POSTGRESQL 的基本操作。
  1. 创建 java PRoject

  2. 将 JDBC 驱动程序及 Hibernate EntityManager 相关类库的 Jar 压缩包添加到 Project 的 Libraries 中

  3. 建数据库 , 标准 SQL 脚本如下( 持久层配置文件中所有数据库名称为 testdb, 数据库帐号/密码分别为 test/test,可按需修改 ):
    CREATE TABLE _USER
    (
    USERID INT PRIMARY KEY,
    USERNAME VARCHAR(64) NOT NULL DEFAULT '',
    COMMENT VARCHAR(256)
    );

    CREATE TABLE _ROLE
    (
    ROLEID INT PRIMARY KEY,
    ROLENAME VARCHAR(32),
    COMMENT VARCHAR(128),
    CONSTRAINT NQ_ROLE UNIQUE(ROLENAME)
    );

    CREATE TABLE _USERROLE
    (
    USERID INT,
    ROLEID INT,
    CONSTRAINT PK_USERROLE PRIMARY KEY(USERID, ROLEID),
    CONSTRAINT FK_UR_USER FOREIGN KEY(USERID) REFERENCES _USER(USERID),
    CONSTRAINT FK_UR_ROLE FOREIGN KEY(ROLEID) REFERENCES _ROLE(ROLEID)
    );