凌枫佳境
风霜凌绝顶,红枫绚佳境
IBM® Rational® Application Developer for WebSphere Software V7.5 包含了利用 JPA 和 EJB 技术 3.0 版本创建 Java? EE 应用程序的工具。Rational Application Developer V7.5 引入了新的向导、编辑器,和透视图来很容易地创建强大的应用程序。本文面向中级用户,带您了解各种新的特性,并且向您展示如何创建端到端的 Java EE 应用程序。

    引言

    本文向您介绍 IBM® Rational® Application Developer for WebSphere Software V7.5,并带您构建 JPA 实体、session bean,并将它们部署到 IBM® WebSphere® V7.0 上。

    Java™ Platform,Enterprise Edition V5.0(Java™ EE)在创建企业应用程序方面进行了重大变更,它支持 Java™ Persistence API(JPA),和 Enterprise Java?Beans technology(EJB)V3.0 程序设计模型、标注,和依赖注入。

    必备条件

    本文假设您至少安装了 Rational Application Developer V7.5 和 WebSphere V7.0 测试服务器。

    示例应用程序

    您将要创建的示例应用程序有一个 JPA 实体、调用该 JPA 实体的 Session bean、调用 Session bean 的 Servlet,以及调用 servlet 的 web 页面。该应用程序中使用的数据库是 RAD 7.5 中带有的内嵌 Derby 数据库。以下的图描述了应用程序各个组件之间的交互序列。

    序列图

    遵照以下这些步骤开发应用程序:

    创建 JPA 项目和实体,并指定映射

    创建 EJB V3.0 项目,和使用 JPA 实体的 session bean

    创建 Web V2.5 项目和调用 session bean 的 servlet

    设置数据源,并在 WebSphere V7.0 上运行 Web 页面

   创建 JPA 项目和实体,并指定映射

    在此实例中,您在单独的归档(。jar)中创建 JPA 实体。注意到 Java EE 规范允许您在 Web 或 EJB 项目中打包 JPA 实体。在 Rational Application Developer 中,您可以向 Web 或 EJB 项目添加 JPA 的部分来让它们支持 JPA 实体。

    创建 JPA 项目

    1、在 Java EE 透视图中,选择 File > New > Other > JPA Project,如图 1 所示。

供选择的向导列表

    2、指定 Project 名称,如图 2 所示。

    图 2. 新建 JPA 项目

项目和 EAR 项目名称,目标运行时

    3、提示您切换到 JPA 透视图,选择 No.JPA 透视图拥有例如 JPA Structure 和 JPA Details 的视图,由于 Java EE 透视图中的 Annotations 视图允许类似的功能,所以切换到 JPA 透视图不是必需的。

    图 3. 切换透视图

Open Associated Perspective 对话框

    注意到 Rational Application Developer 创建了带有以下这些文件的项目:

    persistence.xml

    orm.xml

    manifest.MF.

    持久化单元名称设置为 EmployeeJPA.

创建 JPA 实体

    4、右键单击项目并选择 New > Entity,如图 4 所示。

    图 4. 新建实体

菜单命令

 

    5、指定包名和类名,如图 5 所示,然后单击 Next.

    图 5. JPA Entity 详情

指定名称和继承属性的对话框

    6、单击 以下页面中的 Add 按钮,创建实体字段,如图 6 所示。

    图 6. JPA Entity 属性

带有名称和类型列的 Entity Fields 表格

    7、在结果的 Entity Fields 对话框中,从下拉列表中选择 java.lang.String 作为 Type,如图 7 所示。

    图 7. Entity Fields

指定 Type 和 Name 的对话框

    8、单击向导的 Finish,您将看到为字段创建了 getter 和 setter 方法的类,标注 _cnnew1@Entity,和用于主键字段的标注 @Id,如清单 1 所示。

    清单 1.JPA 实体源代码

import java.io.Serializable;
import java.lang.String;
import javax.persistence.*;

/**
* Entity implementation class for Entity: Employee
*
*/
@Entity


public class Employee implements Serializable {

  
@Id
private String EMP_ID;
private String First_Name;
private String Last_Name;
private static final long serialVersionUID = 1L;

public Employee() {
super();
}  
public String getEMP_ID() {
return this.EMP_ID;
}

public void setEMP_ID(String EMP_ID) {
this.EMP_ID = EMP_ID;
}  
public String getFirst_Name() {
return this.First_Name;
}

public void setFirst_Name(String First_Name) {
this.First_Name = First_Name;
}  
public String getLast_Name() {
return this.Last_Name;
}

public void setLast_Name(String Last_Name) {
this.Last_Name = Last_Name;
}
  
}

    映射数据库

    要确保实体类可以适当地和数据库表通信,就需要二者之间的映射。JPA 提供两种映射机制。一个是根据标注,另一个是根据 XML(orm.xml 中指定的)。本实例使用了标注机制进行映射。

    9、在 Java EE 透视图中的 Data Source Explorer 视图中,选择 Derby Sample Connection > Connect,如图 8 所示。

    图 8. 数据库连接

菜单命令

    10、分析 Employee 表,如图 9 所示。

    图 9. 数据库方案

Data Source Explorer 视图

    11、由于方案不匹配,所以您需要修改映射。

    12、在 Annotation 视图中,单击实体 Employee 的 Table 节点,并指定以下内容,如图 10 所示。

    Table Name:EMPLOYEE

    Schema:SAMP

    图 10. Annotations 视图

左边是树型视图,右边是详细内容

    13、单击 EMP_ID 下的列节点,并将其映射到 EMPNO 列,如图 11 所示。

    图 11. ID 字段映射

左边是树型视图,右边是详细内容

   14、同样地,将 First_Name 和 Last_Name 映射到适当的列。

    15、现在,Java 文件将如清单 2 所示。

    清单 2. 映射的实体源代码

@Entity

@Table(schema="SAMP", name = "EMPLOYEE")
public class Employee implements Serializable {

  
@Id
@Column(name="EMPNO")
private String EMP_ID;
@Column(name="FIRSTNME")
private String First_Name;
@Column(name="LASTNAME")
private String Last_Name;

    16、需要设置 persistence.xml 中的 Java Database Connectivity(JDBC)API 数据源。打开 Enterprise 浏览器中的文件,如图 12 所示。

    图 12. Persistence.xml

EmployeeJPA > Diagrams > JPA Content 下的文件

    17、接下来,指定数据源,如图 13 所示(需要创建实际的数据源:步骤如最后一个部分中所示)。

    图 13. 持久性编辑器

JTA Data Source 是 jdbc/Sample

   创建 EJB V3.0 项目,和使用 JPA 实体的 session bean

    在本部分中,您将创建 EJB 项目和 session bean.

    创建 EJB 项目

    1、选择 File > New > EJB Project.

    图 14. 打开新的 EJB 项目

菜单命令

    2、指定 Project name,设置 EJB Module version 为 3.0,并选择 EAR Project Name,如图 15 所示。对于本实例,选择您创建 JPA 项目时创建的 EAR 项目。

    图 15. 新建 EJB 项目

带有内容、配置,等等的对话框

    3、右键单击 EJB 项目,并选择 Java EE Module Dependencies,然后选择 EmployeeJPA.jar,如图 16 所示。这在 EJB 项目中创建了清单实体,并且还让 JPA 实体类在开发过程中可见。

    图 16. EJB 模块依赖

左边是树型视图,右边是详细内容

 

   创建 session bean

    在 Enterprise Explorer 中右键单击 Session Beans 节点,并选择 New > Session Bean,如图 17 所示。

    图 17. 创建新的 session bean

菜单命令

    5、指定 Java 包和类名,如图 18 所示。在此实例中,选择了 Local 业务接口。

    图 18. 新建 EJB 3.0 session Bean

指定类文件目的地的对话框

    5、指定 Java 包和类名,如图 18 所示。在此实例中,选择了 Local 业务接口。

    图 18. 新建 EJB 3.0 session Bean

指定类文件目的地的对话框

    6、单击 Finish.创建了 EmployeeSession 类和 EmployeeSessionLocal 业务接口。

   调用 JPA 实体

    7、向 seesion bean 类中添加名为 findEmployee 的方法。

    清单 3. 添加方法

EntityManager em;
   
    public Employee findEmployee(String empNo){
    Employee emp = (Employee) em.find(Employee.class, empNo);
    return emp;
    }

    8、您需要将持久性单元定义为实体管理器变量。记住,当创建 JPA 项目时,在 persistence.xml 中设置了持久化单元 EmployeeJPA.您可以直接将其标注为:@PersistenceContext(name="EmployeeJPA") ,并且引入 javax.persistence.PersistenceContext,或者您可以在 Annotation 视图中选择 Add annotation.

    9、选择 bean,如图 19 所示。

    图 19. 标注视图中的 Session bean

左边是树型视图,右边是属性细节

    10、选择标注,如图 20 所示。

    图 20. 向 session bean 中添加标注

顶部罗列出 Java 元素,下面列出 Annotations

    11、将持久性单元命名为 EmployeeJPA,如图 21 所示。

    图 21. 命名持久性单元

左边是树型视图,右边是属性细节

    该动作不仅添加标注,还正确地设置导入。

12、最终的类如清单4 所示。

    清单 4. Session bean 源代码

package com.ibm.ejb;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import com.ibm.entities.Employee;
import javax.persistence.PersistenceContext;

/**
* Session Bean implementation class EmployeeSession
*/
@Stateless
public class EmployeeSession implements EmployeeSessionLocal {

    /**
     * Default constructor.
     */
    public EmployeeSession() {
        // TODO Auto-generated constructor stub
    }
   

    @PersistenceContext(unitName="EmployeeJPA")
    EntityManager em;
   
    public Employee findEmployee(String empNo){
    Employee emp = (Employee) em.find(Employee.class, empNo);
    return emp;
    }   

}

    13、session bean 的业务接口需要有您刚添加的方法的签名。您可以快速地完成:选择 outline 视图中的方法,并且选择 Java EE > Promote Methods,如图 22 所示。

    图 22. session bean outline 视图

菜单命令

    14、这将打开 Promote Methods 对话框。选择 findEmployee(string) 方法,如图 23 所示。

    图 23. Promote Methods

目标的业务接口和 bean 类的方法

    现在准备好让客户端消费 session bean.

   创建 Web V2.5 项目和调用 session bean 的 servlet

    在此部分中,您将创建 Web 项目和 servlet.

    创建 Web 项目

    1、选择 File > New > Dynamic Web Project,如图 24 所示。

    图 24. 打开动态的 Web 项目

菜单命令

    2、指定 Web Project name,选择 Dynamic Web Module version 为 2.5,并选择用于 JPA 和 EJB 项目一样的 EAR Project Name,如图 25 所示。

    图 25. 新建动态 Web 项目

指定项目选项的对话框

    3、当提示打开透视图时,选择 No,如图 26 所示,Web 透视图中拥有在此实例中我们不需要的高级 web 编辑工具。

    图 26. 将透视图切换到 Web 项目

对话框中包含选项“Remember my decision”

    4、右键单击 Web 项目,并在左边的列表中选择 Java EE Module Dependencies,然后选择 EmployeeEJBClient.jar 和 EmployeeJPA.jar,如图 27 所示。

    图 27. 对于 Web 项目的 Java EE 模块依赖性

右边是 Java Modules 和 Web Libraries 选项卡

创建 servlet

    5、在 Enterprise explorer 中,在 Servlets 节点中选择 New > Servlet,如图 28 所示。

    图 28. 在 Web 项目中新建 servlet

菜单命令

    6、对于 servlet 指定 Java 包(com.ibm.servlets)和 Class 名(EmployeeSearch),如图 29 所示。

    图 29. 创建 servlet

指定类文件目的地的对话框

    7、修改 doGet 方法,如清单 5 所示。该方法从请求对象中获取 employee id,并将其传递给 session bean 来找到 employee 信息。

    清单 5.Servlet 源代码

@EJB(name="Employee")
private EmployeeSessionLocal employeeSession;

protected void doGet(HttpServletRequest request,
           HttpServletResponse response) throws
            ServletException, IOException {
  String empNo = request.getParameter("empid");
  Employee emp = employeeSession.findEmployee(empNo);
  if(emp  != null ){
    response.getWriter().println(emp.getFirst_Name() +
    " " + emp.getLast_Name());
  }else{
    response.getWriter().println("Employee with id =" +
      empNo + "couldn't be found");
  }
}

    8、在 Web 项目中创建 HTML 页面,该页面包含 employee id 的输入框,和提交按钮,如清单 6 所示。

    清单 6. HTML 源代码

<body>
   <form action="/EmployeeWeb/EmployeeSearch" method = "get">
   <p>
      <label>
             Type Employee ID and press Submit <br/>
             <input type = "text" name = "empid"/>
             <input type = "submit" name = "Submit"/>
      </label>
   </p>
   </form>
</body>

   设置数据源,并在 WebSphere V7.0 上运行 Web 页面

    在此部分中,您将设置数据源并运行 Web 页面。

    设置数据源

    1、右键单击 EAR 项目,EmployeeEAR,并选择 JavaEE > Open WebSphere Application Server Deployment,如图 30 所示。

    图 30. WebSphere Deployment 页面

菜单命令

    2、在 JDBC 提供者部分中,单击 Add 并选择 Database type(Derby)和 JDBC provider type(Derby JDBC Provider),如图 31 所示。

    图 31. Create JDBC Provider 对话框

带有两个列表的对话框

    3、命名提供者(DerbyDB)并选择启动程序和 Class path(IBM"SDP75"runtimes"base_v7"derby"lib"derby.jar),如图 32 所示。

    图 32. 提供 JDBC 细节

Create JDBC Provider 对话框

    4、现在单击 Add 创建数据源,如图 33 所示。

    图 33. Data source 部分

带有 Name、JNDI Name,和 Type 的表

    5、选择 Derby JDBC Provider 和 V5.0 数据源,并单击 Next 按钮,如图 34 所示。

    图 34. Create Data Source 对话框

选择 JDBC 提供者和数据源类型的对话框

    6、指定数据源名称和 JNDI 名称,如图 35 所示。记住使用您在 persistence.xml JPA 中同样的 JNDI 名。

    图 35. Create Data Source 对话框

选择 15 个数据源选项的对话框

    7、在工作区中定位示例 Derby 数据库,并且在数据库名称属性中输入路径(workspace"EmployeeSample"metadata"plugins "com.ibm.datatools.db2.cloudscape.driver"SAMPLE),如图 36 所示。

    图 36. 数据源属性

在 Value 框中输入的路径

  8、运行 Web 页面

    右键单击 EmployeeSerach.html 并选择 Run As > Run on Server,如图 37 所示。

    图 37. 在服务器上运行

菜单命令

    9、EAR 添加到服务器中,如图 38 所示。

    图 38. 添加到服务器上的 EAR.

WebSphere 7.0 下的 EmployeeEAR

    10、输入 EmployeeID 并按下 Submit,如图 39 所示。

    图 39. Web 页面运行

EmployeeID 是 000010

    11、结果显示在屏幕上

    图 40. Web 页面结果

雇员名称是 CHRISTINE HAAS

    您学到的东西

    Java EE V5.0 简化了企业应用程序的开发。本文向您介绍了如何使用 Java Persistence API、EJB V3.0,和 Rational Application Developer V7.5 中提供的工具来构建这些企业工件。

    下载

 描述  名字  大小  下载
 本文中使用的示例项目  EmployeeSample.zip  35KB 点击

    参考资料

    您可以参阅本文在 developerWorks 全球网站上的 英文原文

本文引用地址:http://www.javapeixun.com.cn/j2ee/ejb20090113226.html

 

 

 

 

 

posted on 2009-02-20 11:39  凌枫  阅读(745)  评论(0编辑  收藏  举报