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 项目
3、提示您切换到 JPA 透视图,选择 No.JPA 透视图拥有例如 JPA Structure 和 JPA Details 的视图,由于 Java EE 透视图中的 Annotations 视图允许类似的功能,所以切换到 JPA 透视图不是必需的。
图 3. 切换透视图
注意到 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 属性
7、在结果的 Entity Fields 对话框中,从下拉列表中选择 java.lang.String 作为 Type,如图 7 所示。
图 7. Entity Fields
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. 数据库方案
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
17、接下来,指定数据源,如图 13 所示(需要创建实际的数据源:步骤如最后一个部分中所示)。
图 13. 持久性编辑器
创建 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 中添加标注
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
现在准备好让客户端消费 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 项目
4、右键单击 Web 项目,并在左边的列表中选择 Java EE Module Dependencies,然后选择 EmployeeEJBClient.jar 和 EmployeeJPA.jar,如图 27 所示。
图 27. 对于 Web 项目的 Java EE 模块依赖性
创建 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 源代码
Type Employee ID and press Submit
设置数据源,并在 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 细节
4、现在单击 Add 创建数据源,如图 33 所示。
图 33. Data source 部分
5、选择 Derby JDBC Provider 和 V5.0 数据源,并单击 Next 按钮,如图 34 所示。
图 34. Create Data Source 对话框
6、指定数据源名称和 JNDI 名称,如图 35 所示。记住使用您在 persistence.xml JPA 中同样的 JNDI 名。
图 35. Create Data Source 对话框
7、在工作区中定位示例 Derby 数据库,并且在数据库名称属性中输入路径(workspace"EmployeeSample"metadata"plugins "com.ibm.datatools.db2.cloudscape.driver"SAMPLE),如图 36 所示。
图 36. 数据源属性
8、运行 Web 页面
右键单击 EmployeeSerach.html 并选择 Run As > Run on Server,如图 37 所示。
图 37. 在服务器上运行
9、EAR 添加到服务器中,如图 38 所示。
图 38. 添加到服务器上的 EAR.
10、输入 EmployeeID 并按下 Submit,如图 39 所示。
图 39. Web 页面运行
11、结果显示在屏幕上
图 40. Web 页面结果
您学到的东西
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