• 沒有找到結果。

第 2 章 Enterprise JavaBeans

2.4 如何开发 EJB(一)

第一部分 JSP 技术与 J2EE 技术

Name: testbean/TestHomeOperations.class Name: testbean/_TestHome_Stub.class Name: testbean/TestHomeHolder.class Name: testbean/TestRemotePOA.class Name: testbean/TestRemote.class Name: META-INF/ejb-jar.xml

Name: testbean/TestRemoteOperations.class Name: META-INF/ejb-inprise.xml

Name: testbean/TestHomePOAInvokeHandler.class Name: testbean/TestHome.class

Name: testbean/TestRemoteHelper.class

Name: testbean/TestRemotePOAInvokeHandler.class Name: testbean/TestBean.class

Name: testbean/TestRemoteHolder.class Name: testbean/TestHomePOA.class

开发者不必关心EJB jar 文件的创建 EJB 容器的开发商一般会提供一个工具来帮助开 发者创建部署描述符 然后把所有必需的文件打包进一个jar 文件中

2.4 如何开发 EJB(一)

2.4.1 EJB 开发工具简介

由本小节开始 我们将介绍如何开发EJB 如何把 EJB 技术与 JSP 技术结合起来 首 先 我们需要了解一些关于EJB 开发工具的知识

目前 市场上流行的 EJB Server/Container 有 BEA 公司的 WebLogic IBM 公司的 WebSphere Borland 公司的 Inprise Application Server Allaire 公司的 JRun Oracle 公司的 Oracle 8i/9i 前面 4 个都是 Web 服务器 Oracle8i/9i 则是数据库服务器 它们都支持 EJB1.0/1.1 技术规范 其中 WebLogic 6.0 服务器支持 EJB 2.0 规范 在这几种 EJB Server/Container 中 我们建议读者选用 WebLogic 作为 Web 服务器端的 EJB Server 以 Oracle 8i/9i 作为数据库服务端的 EJB Server

市场上流行的EJB 开发工具有 Borland 公司的 JBuilder 3.5/4.0 IBM 公司的 VisualAge 3.0/3.5 Oracle 公司的 JDeveloper 3.2 Allaire 公司的 JRun Studio Sun 公司的 Forte 2.0 Sybase 公司的 PowerJ 这里没有什么好与坏之分 我们建议读者选用的开发工具最好和选 用的EJB Server 相匹配 例如如果你选用了 Borland 公司的 IAS 服务器做为 EJB Server 那 么你最好选用Borland JBuilder 4.0 作为 EJB 的开发工具 如果你选用 IBM 公司的 WebSphere 作为EJB Server 那么你最好选用 VisualAge 3.0/3.5 作为 EJB 开发工具 当然了 也不是 非得如此不可 只是这样做至少不会产生EJB 与 Container/Server 不相匹配的问题

在本书中 我们选用Borland 公司的 JBuilder 4.0 Enterprise Edition 作为 EJB 的开发工 具 以Borland 公司的 Inprise Application Server 4.1.1(简称为 IAS)服务器的 Smart Agent 作 为测试EJB 性能的临时 EJB Server 以 BEA 公司的 WebLogic5.1 服务器作为最终分发部署



第 2 章 Enterprise JavaBeans

EJB 组件的 EJB Server/Container 我们还选用 WebLogic 5.1 作为 JSP 服务器 利用它来测 试EJB 的客户端(指基于 Web 模式的客户端 基于 Application 模式的客户端程序在 JBuilder4 中直接测试)

2.4.2 JBuilder 4.0+IAS 4.1 的开发环境配置

在本节中 我们将介绍如何配置JBuilder 4.0 的开发环境 使得它可以开发 EJB 组件 首先 你必须安装JBuilder 4.0 Foundation Edition 然后再安装 JBuilder 4.0 Enterprise Edition 这没有什么好说的

启动JBuilder4 依次选择 File New… Enterprise Tab 我们会看到与 EJB CORBA 工程有关的图标都处于不可用的状态 这说明暂时我们还无法创建一个EJB 工程

安装IAS 4.11 服务器 可以安装在任意目下面 我们建议读者把 IAS 安装到 JBuilder4 的程序目录下面

安装IAS4.11 完毕后 我们在 JBuilder4 中 选择 Tools Configure Libraries… 出现 如图2.1 所示对话框

2.1 JBuilder4 的 Configure Libraries 对话框

单击New… 把 IAS 服务器所含的库文件(指 JBuilder4\IAS\lib 目录下面的 jar 文件)都 添加到JBuilder4 的库列表中 作为一个新库 库名为 IAS 如图 2.2 所示

单击OK OK 完成 Configure Libraries 的工作

在JBuilder4 中 单击 Tools Enterprise Setup…. CORBA Tab 如图 2.3 所示 选择VisiBroker Edit…. 出现了 Edit Configuration 对话框 如图 2.4 所示 在Path for ORB tools 下面的文本框中 设定 IAS 服务器安装目录的 bin 文件夹的路径 然后把Library for projects 下面的文本框设为 IAS 这样使得当前的工程可以使用 IAS 库 IAS 库含有 EJB API 一切就绪后 单击 OK

接着上面一步 选择Application Server Tab IAS 4.1 Tab 如图 2.5 所示



第一部分 JSP 技术与 J2EE 技术

2.2 JBuilder4 的 New Library Wizard 对话框

2.3 JBuilder4 的 Enterprise Setup 对话框



第 2 章 Enterprise JavaBeans

2.4 JBuilder4 的 Enterprise Setup 对话框

2.5 JBuilder4 的 Enterprise Setup 对话框



第一部分 JSP 技术与 J2EE 技术

在Enable integration 前面的框中打勾 在 IAS installation directory 下面的文本框中 设定IAS 服务器的安装目录 单击 OK OK 回到 JBuilder4 的主窗口

关闭JBuilder 4 再次启动 JBuilder 4 配置开发环境的工作就告一段落了 2.4.3 创建 EJB 工程

由本小节开始 我们将一步一步的引导读者创建一个完整的EJB 项目

在JBuilder4 中 依次选择 File New… Enterprise Tab Empty EJB Group 如图 2.6 所示

2.6 JBuilder4 的 Object Gallery 对话框

单击OK 出现下一个对话框 设定 Project name 为 HelloWorld 单击 Next 又出现 新对话框

接着上一步 不要做任何改动 单击Next 出现新对话框 输入 Title Author Company Project Description 等注释信息 单击 Finish

接着上一步 这时候出现了一个名为Empty EJB Group Wizard 的对话框 在 Name 一 栏中输入HelloWorld 如图 2.7 所示

单击OK 就回到了 JBuilder4 的主界面

在JBuilder4 中 依次选择 File New… Enterprise Tag Enterprise JavaBeans OK 出现了 Enterprise JavaBeans Wizard 的对话框 在第一个对话框中 什么也不要改动 Available EJB groups 下面的下拉列表框的值应该缺省为 HelloWorld.ejbgrp 单击 Next 出 现了下一个对话框

接上一步 在Class Information Class Name 一栏中 改变缺省值 EnterpriseBean1 为 HelloWorld 其它地方不要改动(package 为 helloworld Base Class 为 java.lang.Object options 选中Stateless session bean 这表明将要创建一个无状态的 Session EJB) 单击 Next 出现 下一个对话框 如图2.8 所示



第 2 章 Enterprise JavaBeans

2.7 JBuilder4 的 Empty EJB Group Wizard 对话框

2.8 JBuilder4 的 Enterprise JavaBeans 对话框

在图2.8 中 读者不难看出 EJB Home Interface 的名字为 HelloWorldHome Remote



第一部分 JSP 技术与 J2EE 技术

Interface 的名字为 HelloWorldRemote Session EJB 的名字为 HelloWorld 读者可以任意改 变这些接口/类的名称 只是不要相同就可以了 不过我们建议读者不要做任何改动

接着上一步 单击Finish 回到 JBuilder4 的主开发界面

在JBuilder4 中 依次选择 Project Make Project 编译项目 应该没有任何错误 如 果出现错误 请检查是否把 IAS 库添加到当前 Project 的 CLASSPATH 中去了(使用菜单 Project Project Properties…进行设置) 还需要按照上面的步骤 一步步检查 看看哪一步 做错了 改正过来 再编译一遍

如果项目编译成功 那说明EJB 已经基本开发成形了 2.4.4 开发 EJB 类

EJB 类是实现商业逻辑 商业方法的地方 在 2.4.3 小节中 我们已经利用 JBuilder4 提供的Wizard 自动生成了一个最简单的 EJB 自然也包括了一个最简单的 EJB 类 我们 需要再此基础上进行二次开发 添加我们所需要的方法代码

在JBuilder4 的主窗口中 左侧 双击 HelloWorld.java 然后就可以在右侧的文件编辑 区编辑HelloWorld.java 的源代码 HelloWorld.java 的初始源代码如程序清单 2.6

程序清单 2.6 package helloworld;

import java.rmi.*;

import javax.ejb.*;

/**

* Title:HelloWorld.java

* Description:create session ejb class

* Copyright: Copyright (c) 1999

* Company:Peking University

* @author:fancy

* @version 1.0

*/

public class HelloWorld implements SessionBean {

private SessionContext sessionContext;

public void ejbCreate() {

}

public void ejbRemove() {

}

public void ejbActivate() {



第 2 章 Enterprise JavaBeans

}

public void ejbPassivate() {

}

public void setSessionContext(SessionContext context) {

sessionContext = context;

} }

在HelloWorld.java 文件中 添加如下的代码段 public String getMessage()

{

return “Hello World”;

}

方法 getMessage()也就是所谓的商业方法 商业逻辑 当然了 我们只是举一个最最 简单的例子 实际上EJB 类的代码十分复杂 绝不会如此简单 但是我们可以在此基础上 继续开发 添加更多的方法与代码 完成更复杂的功能

在JBuilder4 主窗口的右下方 单击 HelloWorld Tab Bean Tab Methods 在 JBuilder4 主窗口右侧中间出现了HelloWorld 类的方法列表 把滚动条移动到最下方 找到 getMessage() 方法 getMessage()方法前面有一个小方框 我们在这个小方框上打勾 然后保存所有的文 件 如图2.9 所示

2.9 使商业方法(getMessage())与 EJB 的 Remote 接口建立关联

在JBuilder4 中 依次选择 Project Make Project 编译器提示下面的错误

Specification compliance error in "HelloWorld.jar": Please run Verify in the EJB DD Editor



第一部分 JSP 技术与 J2EE 技术

"HelloWorld.ejbgrp": Stateless Session Bean: "HelloWorld" The Java-IDL reverse mapping does not support Java type names which have a package name and a type name which are the same ignoring case: helloworld.HelloWorld

"HelloWorld.ejbgrp": Stateless Session Bean: "HelloWorld" There must be a transaction-attribute associated with the method: public abstract java.lang.String helloworld.HelloWorldRemote.getMessage() throws java.rmi.RemoteException

不要管这些错误 请看下一小节 2.4.5 开发 Remote Interface

根据上文的描述 Remote Interface 是客户端程序与 EJB 实例之间的桥梁 客户端正是 通过Remote 接口的实例对象 由 EJB Object 代理对 EJB 商业逻辑 商业方法的调用 Remote Interface 实际上是对 EJB 商业方法的一个封装 客户端程序可以调用的方法都在 Remote Interface 中得到了声明 真正的实现却是在 EJB 类/EJB Object 中

在JBuilder4 主界面中 左侧 双击 HelloWorldRemote.java 在右侧的编辑区就可以编 辑HelloWorldRemote.java 文件了 HelloWorldRemote.java 的初始代码如程序清单 2.7

程序清单 2.7 package helloworld;

import java.rmi.*;

import javax.ejb.*;

/**

* Title:HelloWorldRemote.java

* Description:create a Remote Interface class

* Copyright: Copyright (c) 1999

* Company:Peking University

* @author:fancy

* @version 1.0

*/

public interface HelloWorldRemote extends EJBObject {

public java.lang.String getMessage() throws RemoteException;

}

在上面的代码中 可以看到EJB 的 Remote Interface 声明了 getMessage()方法 我们在 HelloWorld 类中已经实现了这个商业方法

我们一般不直接编辑Remote Interface 的代码 建议读者采取的方法是 在 HelloWorld 类中加入商业方法的实现代码 然后单击 Bean Methods 在商业方法名字前的小方框中 打勾 保存所有文件 那么这些商业方法就会自动在Remote Interface 中声明了



第 2 章 Enterprise JavaBeans

2.4.6 开发 Home Interface

接下来 我们该看看Home Interface 如何开发了 在上文中 我们已经提到过 Home Interface 十分重要 客户端的应用程序必须定位 Home 接口 然后通过它的 create()方法来 创建EJB 的远程接口对象

我们使用JBuilder4 的 EJB Wizard 自动创建的 Home Interface 的初始代码如程序清单 2.8

程序清单 2.8 package helloworld;

import java.rmi.*;

import javax.ejb.*;

/**

* Title:HelloWorldHome.java

* Description:to create a Home Interface class

* Copyright: Copyright (c) 1999

* Company:Peking University

* @author:fancy

* @version 1.0

*/

public interface HelloWorldHome extends EJBHome {

public HelloWorldRemote create() throws RemoteException CreateException;

}

如果我们开发的是会话EJB 那么一般不需要对 Home Interface 的源代码进行修改 2.4.7 编辑部署文件

下面我们介绍如何利用JBuilder4 编辑 EJB 的部署描述符

在JBuilder4 窗口的左侧 双击 HelloWorld.ejbgrp 左侧窗口被分成了上下两部分 下 面的部分为EJB Deployment Descriptor 在下面的部分中展开 HelloWorld 如图 2.10 所示

单击Container Transactions JBuilder4 主界面的右侧出现了部署描述符的图形编辑界 面 单击Add 保存全部文件 如图 2.11 所示

然后单击图2.11 上方打勾的图标 检验部署描述符的语法 没有任何错误 这样部署 描述符就算开发完成了 在图2.11 中 我们可以通过单击 EJB DD Editor 来编辑部署描述 符 通过单击EJB DD Source 面板来查看部署描述符的源文件 JBuilder4 为我们创建了两 个XML 文件作为部署描述符 分别是 ejb-jar.xml 和 ejb-inprise.xml 这两个文件的代码如 程序清单2.9 及 2.10

程序清单 2.9(ejb-jar.xml)

<?xml version="1.0" encoding="GBK"?>



第一部分 JSP 技术与 J2EE 技术

<!DOCTYPE ejb-jar PUBLIC '-//Sun Microsystems Inc.//DTD Enterprise JavaBeans 1.1//EN' 'http://java.sun.com/j2ee/dtds/ejb-jar_1_1.dtd'>

<ejb-jar>

<enterprise-beans>

<session>

<ejb-name>HelloWorld</ejb-name>

<home>helloworld.HelloWorldHome</home>

<remote>helloworld.HelloWorldRemote</remote>

<ejb-class>helloworld.HelloWorld</ejb-class>

<session-type>Stateless</session-type>

<transaction-type>Container</transaction-type>

</session>

</enterprise-beans>

</enterprise-beans>