使用 JDeveloper 10g 和 OC4J 的 EJB 3.0 简介

目的

本教程通过 JDeveloper 提供了使用新 Enterprise JavaBeans 3.0 规范构建应用程序的数据模型的简介。

所需时间:

大约 30 分钟

主题

本教程包括下列主题:

 概述
 情景
 前提条件
 创建连接

配置应用程序和项目

 创建持久性模型
 创建数据模型

创建客户端

 总结

查看屏幕截图

 将鼠标置于此图标上 可以加载和查看本教程的所有屏幕截图。(警告:因为此操作会同时加载所有屏幕截图,所以网速较慢时,响应时间可能会比较长。)

注:此外,您还可以在下列步骤中将鼠标放在每个单独的图标上,从而仅加载和查看与该步骤相关的屏幕截图。可以通过单击各个屏幕截图来将其隐藏。

概述

在本教程中,您将通过开发会话 bean 和实体 bean 实现一个持久性模型。这些 bean 使用了 EJB 3.0 批注和 POJO(传统 Java 对象)模型持久性。Enterprise JavaBean (EJB) 是封装了业务逻辑的服务器端组件。您将使用 Entity Manager API 来创建、更新、删除和查询 POJO 持久模型。

作为本教程的一部分,您需要创建一个数据库连接和一个 OC4J 应用程序连接,以在其中运行一个示例 Java 客户端。完成之后,再将应用程序部署到任何 Java EE 容器(例如,Oracle 应用服务器 10g)以进行企业范围的访问。

返回主题列表

情景

您需要为 DEPARTMENTS 和 EMPLOYEES 表构建持久性对象。这些持久性对象以实体 bean 的形式实现。还要创建增加新部门、检索新部门数据、返回新员工电子邮件的方法。这些方法将作为会话 Bean 的一部分实现。

返回主题列表

前提条件

开始之前,您应该:

1.

可以访问或已经安装了 Oracle JDeveloper (10.1.3.1.0)。可以从 Oracle 技术网下载它。

2.

可以访问或已经安装了 Oracle 数据库 10g 随附的 Oracle 示例模式。

本教程使用 HR 模式。具体来说,页面使用了 EMPLOYEES 表。

可以在线获取有关在 JDeveloper 中安装 HR 模式并创建到其的连接的指导:

http://www.oracle.com/technology/obe/obe1013jdev/common/OBEConnection.htm

3.

启动 JDeveloper。双击 JDeveloper 可执行文件 jdeveloper.exe ,该文件位于您解压缩它的根目录 ( &ltjdev_home> ) 中。

如果 Migrate User Settings 对话框打开,请单击 NO

关闭 Tip of the Day 窗口。

4.

现在应显示 JDeveloper IDE。

创建连接

在本教程中,您需要创建一个到 Human Resources (HR) 模式的数据库连接。

返回主题列表

1.

在 Applications Navigator 中,单击 Connections 选项卡创建数据库连接。

2.

右键单击 Connection Navigator 中的 Database 节点,选择 New Database Connection 选项。

3.

在 Create Database Connection 向导的 Welcome 页面上单击 Next。在 Step 1 of 4 中,输入 hrconn 作为连接名,然后单击 Next

4.

在 Create Database Connection 向导的 Step 2 of 4 中,输入 hr 作为用户名,输入 hr 作为口令。选中 Deploy Password 复选框,然后单击 Next

5.

在 Create Database Connection 向导的 Step 3 of 4 中,确保指定了以下值:

Driver thin
Host Name localhost
JDBC Port 1521
SID ORCL

单击 Next

6.

在 Create Database Connection 向导的 Step 4 of 4 中,单击 Test Connection 按钮。

如果数据库可用且连接的详细信息正确,您将看到 Status 窗口中显示 Success!。

如果发生错误,单击 Back 确认连接设置是否正确并进行任何必要的更改,然后重新测试该连接。

如果连接成功,则单击 Finish 完成该连接。

返回主题列表

配置应用程序和项目

在 JDeveloper 中工作时,可以在应用程序中按项目组织您的工作。JDeveloper 提供了多个可用于创建应用程序和项目的模板。这些模板预置了一些开发各种应用程序所需的基本技术,您可以选择符合您需要的模板来创建工作环境。然后可以对它进行配置,添加要使用的其他技术。

在本主题中,您将选择这个基本的应用程序和一个新的项目(不包含预先定义的技术)。

要创建包含新项目的新应用程序,执行以下步骤:

1.

在 JDeveloper 中,单击 Applications 选项卡。在 Applications 导航器中,右键单击 Applications,从上下文菜单中选择 New Application

2.

Create Application 对话框中,输入 HRApp 作为应用程序名称。指定 buslogic 作为应用程序包前缀,然后选择 No Template 选项。单击 OK

3.

在 Create Project 对话框中,将项目名称从 Project1 重命名为 EJB_Project,从而提供一个更有意义的名称。然后单击 OK

4.

单击 Save All 图标  保存您的工作。

返回主题列表

创建持久性模型

业务模型或持久性模型为应用程序提供数据访问和验证。当数据由业务模型管理时,无论客户端实现方式如何,数据始终由该模型验证。这就实现了验证及业务规则与用户界面的完全分离。

在教程的这一部分中,您将使用 EJB 3.0 实体 bean 为部门和员工创建持久性模型。
要创建 EJB 3.0 实体 bean,执行以下步骤:

1.

在 Applications Navigator 中,右键单击 EJB_Project 节点,选择 New 选项。

2.

在 New Gallery 对话框中,展开 Categories 中的 Business Tier 节点。单击 Items 列表中的 EJB,然后选择 Entities from Tables (JPA/EJB 3.0)。单击 OK


3.

在该向导的 Welcome 页面,单击 Next 跳过该页。

4.

在 Create Entities from Tables wizard 的 Step 1 of 4 中,选择 hrconn 作为连接名。

5.

在 step 2 of 4 中,对于 HR 模式和 Tables 对象类型,单击 Query 按钮,然后从 Available 列表中选择 DepartmentsEmployees 表,并将它们移到 Selected 列表中。单击 Next

6.

在 step 3 of 4 中,输入 buslogic.persistence 作为程序包名称。单击 Next

7.

在 step 4 of 4 中单击 Next,然后单击 Finish 创建实体 bean。

单击 Save All 图标  保存您的工作。

8.

在 Application Navigator 中双击 Departments.java 节点在源代码编辑器中将其打开。

9.

命名查询使您可以在设计时定义查询,然后在运行时使用。默认创建了一个 NamedQuery 元数据语句。它检索 departments 表中的所有行。

@NamedQuery(name = "Departments.findAll",
query = "select o from Departments o")

注:任何以 @ 开头的 Java 代码符号都称作批注。使用注释是 Java SE 5.0 中引入的一个新语言功能,它允许您将元数据添加到对象中。EJB 3.0 使用注释语法。批注示例如下所示:

批注 说明
@Entity 将文件识别为一个 EJB 3.0 实体
@NamedQuery 可以在运行时用来检索数据的查询
@Table 指定实体的主表
@Id 可以定义哪个属性是实体的标识符
@Column 为持久性属性或域指定映射列
@ManyToOne 指定表之间的一种外键关系
@JoinColumn 指定外健关系的连接列和引用列

10.

要在 Departments 表中插入新行,需要使用数据库序列提供主键值,也可以使用表来提供主键值。

向下滚动至 @ Id 语句,并用下列语句替换它:

@Id
@GeneratedValue(strategy=SEQUENCE, generator="DEPARTMENTS_SEQ")

按下 Alt + Enter 键,自动添加必需的导入语句,然后手动加入以下导入语句:

import static javax.persistence.GenerationType.SEQUENCE;

11.

在 Application Navigator 中双击 Employees.java 节点在源代码编辑器中将其打开。

12.

您需要添加另一个有名查询。要支持这一操作,您需要添加下面以粗体显示的 EJB 3.0 元数据语句,最后的代码如下所示:

@NamedQueries({
@NamedQuery(name = "Employees.findAll", query = "select o from Employees o")
,
@NamedQuery(name="Employees.findById",query="select o FROM Employees o WHERE o.employeeId = :empid")
})

按下 Alt + Enter 键接受建议的导入语句:
import javax.persistence.NamedQueries;

13.

在 Application Navigator 中右键单击 EJB_Project 节点,选择 Make 选项编译您的 Java 类。

14.

确认 Message - Log 窗口没有报告任何错误。

返回主题列表

创建数据模型

会话外观为客户端对象提供了底层 EJB(企业 Java Bean)的统一接口。客户端只与外观交互作用,外观驻留在服务器上,并调用相应的 EJB 方法。在本部分中,您将创建一个会话 bean,用于实现一个查找员工和部门记录的方法。

1.

在 Applications Navigator 中右键单击 EJB_Project 节点,从上下文菜单中选择 New 选项。打开 Business Tier 类别,选择 Session Bean 项。单击 OK

2.

在 Create Enterprise JavaBean 向导的 Welcome 页面上单击 Next。在 step 1 of 4 中,输入 HRAppFacade 作为 EJB 名称。保留选项不变,然后单击 Next

3.

在 Step 2 of 4 中,选中所有实体方法,然后单击 Next

该项目中的任何实体都会在树控件中显示为节点。可以选择该复选框来包括该实体公开的所有实体方法,或者扩展这些节点并选择一个方法子集。请注意,命名的查询显示为可公开的方法。

4.

在 Step 3 of 4 中,确保 Bean Class 的完整名称为 buslogic.HRAppFacadeBean,然后单击 Next

5.

在 step 4 of 4 中,取消选中 Implement a Local Interface 选项,以便只选中 Implement a Remote Interface 选项。单击 Next,然后单击 Finish。 该远程接口用于运行在单独虚拟机(如 Java 客户端)上的客户端应用程序,而本地接口用于运行在相同虚拟机(如 Web 客户端)上的客户端应用程序。

6.

Applications Navigator 应如下所示:

如果不同,则选择 EJB_Project 节点,然后从 View 菜单中选择 Refresh ( View | Refresh) 选项。

7.

该会话 bean 由两个文件组成:HRAppFacadeBean — 包含会话 Bean 代码。HRAppFacade — 描述远程客户端的 Bean 的功能。

打开 Structure 窗格 ( View | Structure) 并在 Applications Navigator 中选择 buslogic.HRAppFacadeBean。在 Structure 窗格中扩展 Sources 节点。Structure 窗格应如下所示,显示 HRAppFacade 类:

8.

在 Structure 窗格中,双击 HRAppFacadeBean 编辑编码,并添加以下方法声明:

public void addDepartment(String department_name, long location_id) throws NamingException
{
Departments dept = new Departments();
dept.setDepartmentName(department_name);
dept.setLocationId(location_id);
this.getEntityManager().persist(dept);
}

public String getEmail(long empid)
{
Employees emp = (Employees)this.em.createNamedQuery("Employees.findById").setParameter("empid",empid).getSingleResult();
return emp.getEmail();
}

按下 Alt + Enter 添加所建议的导入语句。

9.

您现在需要通过新创建的方法的远程接口公开方法声明。在 Structure 窗格中,单击 HRAppFacadeBean 接口并扩展 Methods 节点。右键单击 addDepartment 方法并从上下文选择 Properties

在 Bean Method Details 对话框中,选中 Expose through Remote interface 复选框将该方法声明添加到远程接口。

单击 OK

10.

为 getEmail() 重复相同操作。在 Structure 窗格中,右键单击 getEmail 方法并从上下文选择 Properties

在 Bean Method Details 对话框中,选中 Expose through Remote interface 复选框将该方法声明添加到远程接口。

单击 OK

11.

右键单击 EJB_Project 项目,选择 Make 选项编译该项目。

12.

确认 Messages - Log 窗口没有报告任何错误。

返回主题列表

创建客户端

您需要创建测试客户端,而且在运行它之前必须使用 JDeveloper 提供的 OC4J 服务器运行 HRAppFacadeBean。使用这一个服务器,可以在 JDeveloper 内部创建并测试 J2EE 应用程序,从而免除了在开发/测试阶段运行外部服务器的必要。

1.

下面将创建一个测试客户端。

在 Applications Navigator 中,右键单击 HRAppFacadeBean 并选择 New Sample Java Client

2.

在 Create Sample Java Client 对话框中,单击 New Project 按钮在单独项目中创建客户端类。

在 Create Project 对话框中,输入 Client 作为项目名,并单击 OK

返回 Create Sample Java Client 对话框,将 Client Class Name 域设置为 client.HRAppFacadeClient,并选择 Connect to OC4J Embedded in JDeveloper。单击 OK。

3.

双击 HRAppFacadeClient 节点在源代码编辑器中打开该文件。在 Main 方法中,注释掉对 findAllDepartments 和 findAllEmployees 方法的调用。

// System.out.println( hRAppFacade.queryDepartmentsFindAll( ) );
// System.out.println( hRAppFacade.queryEmployeesFindAll( ) );

4.

HRAppFacadeClient 中,添加下列语句使用 addDepartments() 方法创建一个新部门。

String department_name = "IT Administration 12";
long location_id = 1500;
hRAppFacade.addDepartment( department_name, location_id );

5.

指定您想查看其电子邮件的员工的员工 ID。例如:

long empid = 100;

调用 getEmail() 方法,打印参数 employee_id 的电子邮件:

System.out.println(hRAppFacade.getEmail( empid ));

6.

在 Applications Navigator,右键单击 HRApp 并选择 Make。

7.

在 Applications Navigator,右键单击 HRAppFacadeBean 并选择 Run。

这将运行嵌入的服务器并部署 HRAppFacadeBean。

8.

在 Applications Navigator 中,右键单击 HRAppFacadeClient 文件并选择 Run

9.

确保返回您指定客户 (100) 的 电子邮件 ( SKING) 。

10.

确保使用您为该 ID 指定的序列将一个新的部门添加到表中。在 Connection 页面上,展开 Database > HR > Tables > DEPARTMENTS,在编辑器中单击 Data 选项卡。

返回主题列表

总结

在本教程中,您使用 EJB 3.0 创建了持久性服务并访问了它们。此外,您使用了一个客户端来测试部署的 EJB。

您已学会了如何

 配置应用程序和项目
 使用 EJB 3.0 创建一个持久性模型
 使用会话 bean 创建数据模型
 创建客户端类并测试您的应用程序

返回主题列表

 将鼠标置于该图标上可以隐藏所有的屏幕截图。

Left Curve
热门下载
Right Curve
Left Curve
更多融合中间件下载
Right Curve