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 项目
- 在 Java EE 透视图中,选择 File > New > Other > JPA Project,如图 1 所示。
图 1. 新建项目
- 指定 Project 名称,如图 2 所示。
图 2. 新建 JPA
项目
- 提示您切换到 JPA 透视图,选择 No。JPA 透视图拥有例如 JPA Structure 和 JPA Details 的视图,由于 Java EE
透视图中的 Annotations 视图允许类似的功能,所以切换到 JPA 透视图不是必需的。
图
3. 切换透视图
注意到 Rational Application Developer 创建了带有以下这些文件的项目:
- persistence.xml
- orm.xml
- manifest.MF。
持久化单元名称设置为 EmployeeJPA。
创建 JPA 实体
- 右键单击项目并选择 New > Entity,如图 4 所示。
图 4.
新建实体
- 指定包名和类名,如图 5 所示,然后单击 Next。
图 5. JPA
Entity 详情
- 单击 以下页面中的 Add 按钮,创建实体字段,如图 6 所示。
图 6.
JPA Entity 属性
- 在结果的 Entity Fields 对话框中,从下拉列表中选择 java.lang.String 作为 Type,如图 7 所示。
图 7. Entity Fields
- 单击向导的 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
中指定的)。本实例使用了标注机制进行映射。
- 在 Java EE 透视图中的 Data Source Explorer 视图中,选择 Derby Sample Connection
> Connect,如图 8 所示。
图 8.
数据库连接
- 分析 Employee 表,如图 9 所示。
图 9.
数据库方案
- 由于方案不匹配,所以您需要修改映射。
- 在 Annotation 视图中,单击实体 Employee 的 Table 节点,并指定以下内容,如图 10 所示。
图 10.
Annotations 视图
- 单击 EMP_ID 下的列节点,并将其映射到 EMPNO 列,如图 11 所示。
图 11. ID 字段映射
- 同样地,将 First_Name 和 Last_Name 映射到适当的列。
- 现在,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;
|
- 需要设置 persistence.xml 中的 Java Database Connectivity(JDBC)API 数据源。打开
Enterprise 浏览器中的文件,如图 12 所示。
图 12.
Persistence.xml
- 接下来,指定数据源,如图 13 所示(需要创建实际的数据源:步骤如最后一个部分中所示)。
图 13. 持久性编辑器
创建 EJB V3.0 项目,和使用 JPA 实体的
session bean
在本部分中,您将创建 EJB 项目和 session bean。
创建 EJB 项目
- 选择 File > New > EJB Project。
图
14. 打开新的 EJB 项目
- 指定 Project name,设置 EJB Module version 为 3.0,并选择 EAR Project
Name,如图 15 所示。对于本实例,选择您创建 JPA 项目时创建的 EAR 项目。
图 15. 新建 EJB 项目
- 右键单击 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
- 指定 Java 包和类名,如图 18 所示。在此实例中,选择了 Local 业务接口。
图 18. 新建 EJB 3.0 session Bean
- 单击 Finish。创建了 EmployeeSession 类和
EmployeeSessionLocal 业务接口。
调用 JPA 实体
- 向 seesion bean 类中添加名为 findEmployee 的方法。
清单 3. 添加方法
EntityManager em; public Employee findEmployee(String empNo){ Employee emp = (Employee) em.find(Employee.class, empNo); return emp; }
|
- 您需要将持久性单元定义为实体管理器变量。记住,当创建 JPA 项目时,在 persistence.xml 中设置了持久化单元
EmployeeJPA。您可以直接将其标注为:@PersistenceContext(name="EmployeeJPA")
,并且引入 javax.persistence.PersistenceContext,或者您可以在 Annotation 视图中选择 Add
annotation。
- 选择 bean,如图 19 所示。
图 19. 标注视图中的 Session
bean
- 选择标注,如图 20 所示。
图 20. 向 session bean
中添加标注
- 将持久性单元命名为 EmployeeJPA,如图 21 所示。
图 21. 命名持久性单元
该动作不仅添加标注,还正确地设置导入。
- 最终的类如清单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; }
}
|
- session bean 的业务接口需要有您刚添加的方法的签名。您可以快速地完成:选择 outline 视图中的方法,并且选择 Java EE
> Promote Methods,如图 22 所示。
图 22. session
bean outline 视图
- 这将打开 Promote Methods 对话框。选择 findEmployee(string) 方法,如图 23 所示。
图 23. Promote Methods
现在准备好让客户端消费 session bean。
创建 Web V2.5 项目和调用 session
bean 的 servlet
在此部分中,您将创建 Web 项目和 servlet。
创建 Web 项目
- 选择 File > New > Dynamic Web Project,如图 24 所示。
图 24. 打开动态的 Web 项目
- 指定 Web Project name,选择 Dynamic Web Module version 为 2.5,并选择用于
JPA 和 EJB 项目一样的 EAR Project Name,如图 25 所示。
图 25. 新建动态 Web 项目
- 当提示打开透视图时,选择 No,如图 26 所示,Web 透视图中拥有在此实例中我们不需要的高级 web 编辑工具。
图 26. 将透视图切换到 Web 项目
- 右键单击 Web 项目,并在左边的列表中选择 Java EE Module Dependencies,然后选择
EmployeeEJBClient.jar 和 EmployeeJPA.jar,如图 27 所示。
图 27. 对于 Web 项目的 Java EE 模块依赖性
创建 servlet
- 在 Enterprise explorer 中,在 Servlets 节点中选择 New > Servlet,如图
28 所示。
图 28. 在 Web 项目中新建 servlet
- 对于 servlet 指定 Java 包(com.ibm.servlets)和 Class
名(EmployeeSearch),如图 29 所示。
图
29. 创建 servlet
- 修改 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"); } }
|
- 在 Web 项目中创建 HTML 页面,该页面包含 employee id 的输入框,和提交按钮,如清单 6 所示。
清单 6. HTML 源代码
设置数据源,并在 WebSphere V7.0 上运行
Web 页面
在此部分中,您将设置数据源并运行 Web 页面。
设置数据源
- 右键单击 EAR 项目,EmployeeEAR,并选择 JavaEE > Open WebSphere Application Server
Deployment,如图 30 所示。
图 30. WebSphere
Deployment 页面
- 在 JDBC 提供者部分中,单击 Add 并选择 Database type(Derby)和 JDBC
provider type(Derby JDBC Provider),如图 31 所示。
图 31. Create JDBC Provider 对话框
- 命名提供者(DerbyDB)并选择启动程序和 Class
path(IBM\SDP75\runtimes\base_v7\derby\lib\derby.jar),如图 32 所示。
图 32. 提供 JDBC 细节
- 现在单击 Add 创建数据源,如图 33 所示。
图 33. Data source
部分
- 选择 Derby JDBC Provider 和 V5.0 数据源,并单击 Next 按钮,如图 34 所示。
图 34. Create Data Source 对话框
- 指定数据源名称和 JNDI 名称,如图 35 所示。记住使用您在 persistence.xml JPA 中同样的 JNDI 名。
图 35. Create Data Source 对话框
- 在工作区中定位示例 Derby
数据库,并且在数据库名称属性中输入路径(workspace\EmployeeSample\metadata\plugins\com.ibm.datatools.db2.cloudscape.driver\SAMPLE),如图
36 所示。
图 36. 数据源属性
运行 Web 页面
- 右键单击 EmployeeSerach.html 并选择 Run As > Run on Server,如图 37 所示。
图 37. 在服务器上运行
- EAR 添加到服务器中,如图 38 所示。
图 38. 添加到服务器上的
EAR。
- 输入 EmployeeID 并按下 Submit,如图 39 所示。
图 39. Web 页面运行
- 结果显示在屏幕上
图 40. Web 页面结果
您学到的东西
Java EE V5.0 简化了企业应用程序的开发。本文向您介绍了如何使用 Java Persistence API、EJB V3.0,和
Rational Application Developer V7.5 中提供的工具来构建这些企业工件。
下载
描述 |
名字 |
大小 |
下载方法 |
本文中使用的示例项目 |
EmployeeSample.zip |
35KB |
HTTP |
参考资料
学习
获得产品和技术
讨论
关于作者
 |
|
 |
Neeraj 在北卡罗来纳州 Durham 的 IBM Research Triangle Park Lab 的 IBM Rational 致力于
Java EE 工具的研究。他在印度的 H.B.T.I 取得计算机科学与工程学士学位,并且在康涅狄格的 Bridgeport
大学获得计算机科学硕士学位。 |
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14789789/viewspace-536568/,如需转载,请注明出处,否则将追究法律责任。