Java 版 (精华区)

发信人: kaola (不是我不小心!), 信区: Java
标  题: EJB-Java服务器端构件模型  
发信站: 哈工大紫丁香 (2001年01月13日13:23:34 星期六), 站内信件


EJB-Java服务器端构件模型—入门使用 作者:jintao 发布时间:2000/12/29
文章摘要:
  本文是EJB-Java服务器端构件模型—入门使用篇,包括了EJB的定义、特点,EJB的
组件等。
----------------------------------------------------------------------------
----
正文:
EJB-Java服务器端构件模型  
(二)入门使用
1. EJB组件架构模型概述
  Sun公司发布的文档中对EJB(Enterprise Java Bean)的定义是:EJB是用于开发和
部署多层结构的、分布式的、面向对象的Java应用系统的跨平台的构件体系结构。采用
EJB可以使开发商业应用系统变得容易,应用系统可以在一个支持EJB的环境中开发,开
发完之后部署在其他的环境中,随着需求的改变,应用系统可以不加修改地迁移到其他
功能更强、更复杂的服务器上。
我们首先看一下EJB的组件构架模型:
 
A. EJB定义
  Sun Microsystem EJB 2.0 Specification中定义如下(使用原文可能更有助于理解
):
  "The Enterprise JavaBeans architecture is a component architecture for t
he development and deployment of component-based distributed business applic
ations. Applications written using the Enterprise JavaBeans architecture are
 scalable, transactional, and multi-user secure. These applications may be w
ritten once, and then deployed on any server platform that supports the Ente
rprise JavaBeans specification."
  译文如下:
  EJB是用于开发和部署多层结构的、分布式的、面向对象的Java应用系统的跨平台的
构件体系结构。使用EJB结构编写的应用程序具有可扩展性、交互性以及多用户安全特性
。这些应用只需写一次,就可以发布到支持EJB规范的服务器平台上。
A. EJB特点
×定义了Java Server端的构件模型
×Containers是一个EJB组件的执行环境
×由EJB Container提供Server端的系统级功能
线程管理, 交易管理, 状态管理, 资源共享
×Client使用RMI/JNDI访问EJB
×通过IIOP, EJB可以和CORBA Object互操作
×支持厂商众多:
IBM, BEA, Oracle, Sybase, Inprise...
A. EJB规格制订的目的
  从Enterprise, Java, Bean的名字组成的单词基本可以知道EJB的目的:
  企业信息系统的企业逻辑是以Java代码开发的,该企业逻辑是位于服务器端的组件
化标准模型,而通过其标准,该企业模型能布署在任一作业系统平台的应用软件系统下
(只要是遵循EJB的规格)而具有事务处理能力、高度的安全性、稳定性、分散式网路的
多层式架构的信息系统
A. EJB开发的优势
· 平台的独立性
· 操作系统的独立
· 中介软件层的独立
· 数据库系统的独立
· 缩短开发的时间
· 节省IT部门的投资
· 弹性、可重用性和轻便性
· 广泛的工业支持
B. EJB与JavaBeans
  EJB和JavaBeans都是组件概念,名字中都有Java和Beans,那么他们有什么相同点和
区别呢?
  · 两者都是Java的组件模型
  · JavaBeans重点是允许开发人员在开发工具中可视化的操纵组件
  · EJB的侧重点是详细的定义了一个可以轻便地布署Java组件的服务框架模型
C. EJB开发体系结构中的六个角色
  EJB的开发中不久定义了具体的开发流程,还定义了具体的开发角色,不同的开发角
色负责不同的开发任务。具体如下:
· Enterprise Bean Provider
EJB组件开发者负责编写EJB组件,EJB组件开发者是应用领域的专家。
· Application Assembler
应用组合者负责将各种EJB组合成一个完整的应用系统。
· Deployer
部署者负责将包含EJB组件的ejb-jar文件部署到应用服务器中。
· EJB Server Provider
EJB服务器提供者负责实现一些底层的系统服务,如交易管理等。EJB服务器提供者是系
统领域的专家。
· EJB Container Provider
EJB容器提供者负责提供EJB组件的运行环境,EJB容器提供者和EJB服务器提供者一般是
由相同的厂商担当,提供的产品叫应用服务器。
· Persistence Manager Provider
系统管理员负责为EJB服务器和容器提供一个企业级的计算和网络环境。
2. EJB组件
A. EJB组件的类型
EJB组件有两种类型:
  · Session Bean
  Session Bean在J2EE Server上代表的是一个Client。Client通过调用Session Bea
n的方法来访问远程服务。Session Bean为它的Client完成特定的工作,并通过在serve
r端运行business tasks,向Client屏蔽了实现的复杂性。
  Session Beans有两种状态管理模式:Stateful和Stateless
  Stateless Session Bean不能够维持一个调用客户的状态。在一个方法调用的过程
中,Stateless Session Bean可以维持调用客户的状态,但是当方法执行完时,状态不
会被保持。在调用完成后,Stateless Session Bean被立即释放到缓冲池中,所以Stat
eless Session Bean具有很好的伸缩性,可以支持大量用户的调用。
  Stateful Session Bean可以一对一的维持某个调用客户的状态,并且在不同的方法
调用中维持这个状态, 由于对于每一个并发用户,必须有一个对应的Stateful Sessio
n Bean,为了提高系统的效率,Stateful Session Bean可以在一定的客户空闲时间后被
写入二级存储设备(如硬盘),在客户发出新的调用请求后,再从二级存储 设备恢复到内
存中。
  · Entity Bean
  Entity Bean代表的是持续储存机制中的一个企业对象。它的持续可以被Entity Be
an自己管理,也可以由EJB容器来管理。
  Entity Bean代表数据库或另外一个企业应用系统中的数据对象,如代表数据库的一
行记录。和Session Bean不同,Entity Bean是持久的(persistent),允许共享访问。持
久性(Persistence)是指Entity Bean的状态不依赖于应用服务器而存在。因为Entity B
ean是底层数据库记录的映像,会和数据库记录保持同步,所以,即使当应用服务器崩溃
或停止运行,Entity Bean的状态还会保存在数据库中,不会丢失。    
A. EJB模型中的组件关系
如图所示:
  
A. EJB的开发部署
  开发一个EJB组件,EJB开发者必须提供以下四种文件:
  · EJB Home Interface
  定义了一些方法供EJB客户端create, remove和find EJB对象。
  · EJB Remote Interface
  定义了EJB的业务方法,EJB所有的业务方法必须在remote interface定义才能够被
客户端访问。
  · EJB class
  实现在EJB Remote Interface中定义的业务方法。
  · ejb-jar.xml
  包含该EJB组件的配置信息。
3. EJB开发
  下面我们以一个简单实例的开发来说明EJB开发过程,第一次接触确实感觉很复杂,
但实际上,只要参照分布式开发系统的统一原则就可以很快接受这种开发模式了。
  分布式开发的原则如下:
  · 定制接口;
  · 接口的实现(对象的实现);
  · 发布接口
  对应着EJB开发,分别是:
  · 定义EJB Remote Interface
  · 定义EJB需要的create、remove、find等Home Interface
  · 使用EJB class实现EJB Remote Interface
  · 实现EJB Home Interface
  · 使用ejb-jar.xml配置发布信息
A. 编写Remote Interface
import javax.ejb.EJBObject;
import java.rmi.RemoteException;
public interface Converter extends EJBObject {
public double DollarToRMB(double dollars) throws RemoteException;
public double RMBToDollar(double RMB) throws RemoteException;
}
注意:继承的是EJBObject。
生成Converter.java。
B. 编写Home Interface
import javax.io.Serializable;
import java.rmi.RemoteException;
import javax.ejb.CreateException;
import javax.ejb.EJBHome;
public interface ConverterHome extends EJBHome {
Converter create() throws RemoteExceptoin, CreateException;
}
注意:继承的是EJBHome。
生成ConverterHome.java。
C. 编写Enterprise Bean Class
import java.rmi.RemoteException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
public class ConverterEJB implements SessionBean {
public double DollarToRMB(double dollars) {
return dollar*8.6000;
}
public double RMBToDollar(double RMB) {
return RMB/8.6000;
}
public ConverterEJB( ) { }
public void ejbCreate( ) { }
public void ejbRemove( ) { }
public void ejbActivate( ) { }
public void ejbPassivate( ) { }
public void setSessionContext(SessonContext sc) { }
}
生成ConverterEJB.java。
A. 编译EJB源代码
UNIX:
1. compileEJB.sh (将<J2EE_DIR>改成J2EE SDK的安装目录)
#!/bin/sh
J2EE_HOME=<J2EE_DIR>
EEPATH=.:$J2EE_HOME/lib/j2ee.jar
javac -classpath "$EEPATH" ConverterEJB.java ConverterHome.java Converter.ja
va
2. 执行compileEJB.sh
Windows:
1. compileEJB.bat (将<J2EE_DIR>改成J2EE SDK的安装目录)
set J2EE_HOME=<J2EE_DIR>
set EEPATH=.;%J2EE_HOME%\lib\j2ee.jar
javac -classpath %EEPATH% ConverterEJB.java ConverterHome.java Converter.jav
a
2. 执行compileEJB.bat
  EJB的编码已经结束,下面是比较复杂的发布过程。只需按照提示一步一步就能够发
布您的第一个EJB应用了。由于EJB不能直接发布,必须通过创建应用并加入我们已经写
好的EJB,然后发布应用才能真正执行。
A. 创建J2EE应用
  EJB不能直接部署到J2EE Server上, 它必须先被增加,再被部署到一个J2EE应用上.
 现在创建一个J2EE应用ConverterApp,并将它保存为文件ConverterApp.ear中.
1.在命令行方式启动J2EE Server:
j2ee -verbose
2.在另外一个终端窗口,运行应用部署工具(Application Deployment Tool):
deploytool
3.创建一个新的J2EE应用
a.在应用部署工具中选择"File"菜单
b.从"File"菜单中选择"New Application"
c.点击"Brows"
d.在文件选择中,定位你要放置ConverterApp.ear的目录
e.输入文件名为:"ConverterApp.ear"
f.点击"New Application"
g.点击"Ok"
A. EJB打包
使用应用部署工具的"New Enterprise Bean Wizard"做以下工作:
  · 创建EJB的部署描述器(descriptor)
  · 将EJB的部署描述器和class类文件打包到一个EJB.jar文件中
  · 将EJB.jar文件插入到ConverterApp.ear应用文件中
在"File"菜单中选择"New Enterprise Bean", Wizard显示以下对话框:
  · Introduction对话框
  1. 阅读Wizard主要特性的说明
  2. 点击Next
  · EJB JAR对话框
  1. 在"Enterprise bean will go in"选框中,选定ConverterApp
  2. 在JAR Display Name区中, 输入ConverterJAR, 它将代表包含bean的EJB.jar文
件被显示在树视图中
  3. 点击Add按钮, 再到Content文本域中
  4. 在"Add Content to JAR"对话框中, 选择包含".class"文件的目录
  5. 在文本框中选定以下文件并点击Add Converter.class, ConverterEJB.class, 
ConverterHome.class
  6. 点击OK
  7. 点击Next
  · General对话框
  1. 在"Enterprise Bean Class"选框中, 选定ConverterEJB
  2. 在"Home Interface"选框中, 选定ConverterHome
  3. 在"Remote Interface"选框中, 选定Converter
  4. 选定Session单选按钮
  5. 选定Stateless单选按钮
  6. 在"Enterprise Bean Name"框中, 输入ConverterBean, 这个名字将代表这个En
terprise Bean显示在树视图中
  7. 点击Next
  · Enviroment Entries对话框
  因为你可以跳过剩余的对话框, 所以在这里点击Finish
A. 部署J2EE应用
  指定EJB的JNDI名字
  1. 在应用部署工具的树视图中选定ConverterApp
  2. 选定JNDI名字标签
  3. 在JNDI名字域中,输入MyConverter. 客户端将利用这个名字来定位Home接口
  部署J2EE应用
  1. 从Tools菜单中, 选择Deploy Application
  2. 在第一个对话框中,确定目标服务器是"localhost"或是运行J2EE Server的主机
.
  3. 选定"Return Client Jar."选框
  4. 在接下来的文本框中, 输入ConverterAppClient.jar的全路径名. 这个文件将位
于安装J2EE SDK的 doc/guides/ejb/examples/converter子目录下.
  5. 点击Next
  6. 在第二个对话框中, 确定ConverterBean的JNDI名是MyConverter
  7. 点击Next
  8. 在第三个对话框中, 点击Finish.
  9. 部署完毕后, 在Deployment Progress对话框中, 点击OK
4. 搭建客户端
  编写客户端代码,需要完成以下功能:
  · 定位Home接口
  · 创建EJB实例
  · 调用业务方法
代码如下:
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.rmi.RortableRemoteObject;
import Converter;
import ConverterHome;
public class ConvertClient {
public static void main(String[] argv) {
try{
Context initial = new InitialContext();
Object objref = initial.lookup("MyConverter");
ConverterHome home =
(ConverterHome)PortableRemoteObject.narrow(objref,
ConverterHome.class);
Converter currencyConverter = home.create( );
double amount = currencyConverter.DollarToRMB(100.00);
System.out.println(String.valueOf(amount));
amount = currencyConverter.RMBToDollar(100.00);
System.out.println(String.valueOf(amount));
currencyConverter.remove();
}
catch (Exception e)
{
System.err.println("Caught an unexcepted exception!");
ex.printStackTrace();
}
}
}
A. 编译客户端代码
UNIX:
1.compileClient.sh
#!/bin/sh
J2EE_HOME=<J2EE_DIR>
EEPATH=.:$J2EE_HOME/lib/j2ee.jar
javac -classpath "$EEPATH" ConverterClienter.java
2.执行compileClient.sh
Windows:
1.compileClient.bat
set J2EE_HOME=<J2EE_DIR>
set EEPATH=.;%J2EE_HOME%\lib\j2ee.jar
javac -classpath %EEPATH$ ConverterClienter.java
2.执行CompileClient.bat
A. 运行客户端
  运行客户端需要ConverterAppClient.jar文件, 这个文件包含一个桩类, 它允许客
户端与运行在EJB容器中的EJB实例通信.
UNIX:
1.testClient.sh
#!/bin/sh
J2EE_HOME=<J2EE_DIR>
EEPATH=$J2EE_HOME/lib/j2ee.jar:ConverterAppClient.jar:.
java -classpath "EEPATH" ConvererClient
2.运行testClient.sh
Windows:
1.testClient.bat
set J2EE_HOME=<J2EE_DIR>
set EEPATH=%J2EE_HOME%\lib\j2ee.jar;ConverterAppClient.jar;.
java -classpath %EEPATH% ConverterClient
2.运行testClient.bat
  最激动人心的时刻到了,现在你可以看到你编写的第一个EJB应用在运行了。(有问
题,哦,麻烦你按照标准流程再核对一遍;如果一切都对,那么麻烦你检查一下你的J2
EE环境。如果没有,请去http://www.sun.com下载。)
5. 参考资料
Mastering Enterprise JavaBeans
and the Java2 Enterprise Edition
----Ed Roman
The Java 2 Enterprise Edition Developer's Guider
----SUN microsystem
Enterprise JavaBeans Specification
----SUN microsystem
作者会员名:piex
 
----------------------------------------------------------------------------
----
我是:  读者  出版商  销售商
读者评价:
    评论:
[查看他人对本书的看法]
推 荐 给 朋 友
您的称呼:     您的昵称:
您的Email:     您朋友的Email:
(以下是预设的信件内容,可根据您的需要修改)
近来好吗?
我正在网上浏览中国互动出版网,看到对你有用的文章(http://www.china-pub.com/co
mputers/eMook/0613/info.htm), 特推荐给你,希望对你有所帮助。
[关闭此窗口]
  
--
               我怕水,我怕谁?

※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.247.254]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:214.408毫秒