日期:2014-05-16  浏览次数:20352 次

使用 Spring,JSF,EJB3 设计企业应用程序
在本文中,作者使用 Eclipse 开发了一个简单的应用,演示了使用 Spring 集成 Java EE 5 核心框架 - EJB 3.0 和 JSF 1.2 的过程。您将看到,Spring 使得访问和实现 EJB 更加方便。

Java EE 5.0 的核心框架是 EJB(Enterprise JavaBeans)3.0 和 JSF(JavaServerFaces)1.2 。 EJB 3.0 是一个基于 POJO(Plain Old Java Objects) 的服务端业务服务和数据库持久化的组件模型。 JSF 是一个基于 MVC(Model-View-Controller) 的 Web 应用框架。大多数的应用都将包含有业务逻辑的 EJB3 组件和用于 Web 应用前端显示的 JSF 组件。从表面上看,EJB3 和 JSF 互补,但是他们是根据各自的理念设计的独立的框架,这二者都无法独自解决所有的计算问题。例如,EJB3 使用注解(annotation)来配置服务,而 JSF 使用的是 XML 文件。 EJB3 和 JSF 组件在框架层面上是互不敏感,最好结合使用。但是 Java EE 5 规范并没有提供如何整合这两个组件模型的标准方法。要整合 EJB3 和 JSF,开发者必须手动地将业务组件(EJB) 与 Web 组件(JSF) 联结起来,以便能跨框架调用方法。

Spring 作为一个轻量级的容器,常被认为是 EJB 的替代品,对于很多应用情况,采用 Spring 作为容器,并借助它对事务和 ORM 等的支持,是一种比采用 EJB 容器以实现同样功能的另一个选择。但也不是使用了 Spring 就不能使用 EJB 了。实际上,Spring 使得访问和实现 EJB 更加方便。 Spring 分别提供了集成 JSF 和 EJB 的方法。本文将使用 Eclipse 开发一个示例来演示这个过程。


?

本文的示例实现了对产品信息的增删改查等基本操作。只用到了一个域模型:Product,下面是它的 UML 图:



图 1. Product 类图


?

本文的开发平台采用的是 Windows Vista 操作系统,因此以下的环境设置都是针 WindowsVista 操作系统的。

  • Java 站点 下载最新的 JDK,并安装至任意目录下。本文采用的是 jdk1.6.0_01 。


  • 图 3. 配置运行环境
  • 新建名称为 simple 的 EAR Application Project,这个工程包括 3 个工程,分别是 JPA Project、EJB Project、WEB Project,以下步骤将分别介绍这三个工程。 Target Runtime 为 JBoss v4.2,EAR version 为 5.0,Configuration 为 Default Configuration for JBoss v4.2 。如下图:


    图 4. 创建 EAR 工程项目

    点击 Next 选择 Generate Deployment Descriptor,点击完成。


  • ?

    1. 新建名称为 simpleJPA 的 JPA 工程,Configuration 为 Default Configuration for JBoss v4.2,选中 Add project to anEAR,如下图:


      图 5. 创建 JPA 项目

      点击 Next,选择默认,点击完成。

    2. 编辑 JPA persistence.xml 文件,内容如下:


      						
      <?xml version="1.0" encoding="UTF-8"?>
      <persistence version="1.0"
        xmlns="http://java.sun.com/xml/ns/persistence" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/persistence 
        http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
        <persistence-unit name="simpleJPA">
          <!-- 使用JBoss默认的数据源 -->
          <jta-data-source>java:/DefaultDS</jta-data-source>
          <properties>
            <!-- 使用Hibernate的hbm2ddl工具在启动时生成表结构 -->
            <property name="hibernate.hbm2ddl.auto" value="update"/>
            <!-- 显示最终执行的SQL -->
            <property name="hibernate.show_sql" value="true" />
            <!-- 格式化显示的SQL -->
            <property name="hibernate.format_sql" value="true" />
          </properties>
        </persistence-unit>
      </persistence>
      
      ?

      persistence-unit 节点可以有一个或多个,每个 persistence-unit 节点定义了持久化内容名称、使用的数据源及持久化产品专有属性。 name 属性定义了 persistence-unit 的名称,该属性是必需的,本例设置的名称为“ simpleJPA ”。

      在 JavaEE 环境中的默认的事务是 JTA,而在 JavaSE 环境