为了使大家对EJB容器和Enterprisebeans有一个感性的认识,我们介绍一个简单的client/server例子。就是Inprise的应用服务器自带的例子--SortClient。是一个无">
RSS
热门关键字:  script  ajax  java  测试脚本  浏览器菜单
当前位置 :| 主页>Jsp>

一个无状态的会话beans示例(5)

来源:cpcw 作者:曾斌异 时间:2007-11-10 点击:

一个无状态的会话beans示例(5)

2000-06-02 00:00 作者: 曾斌异 出处: cpcw 责任编辑:
p align="JUSTIFY">  为了使大家对EJB容器和Enterprisebeans有一个感性的认识,我们介绍一个简单的client/server例子。就是Inprise的应用服务器自带的例子--SortClient。是一个无状态的会话beans,它实现了一个排序(sort)算法。本例子演示了如何编译Enterprise beans例子,如何在EJB容器中运行Bean的一些基本操作。还演示了如何将一个对象放在JNDI命名服务中。

  首先,我们来看一下Enterprise bean的原代码。通常由Enerprise beans的提供者来编写。(sort例子已经提供了代码,所以我们实际上什么都不用写。*_^)。下面,我们演示如何编译和链接此Enterprise bean。如何配置,如何打包成应用程序。然后演示如何编译链接客户。最后才运行客户和服务程序。

  以下是开发具有Enterprisebeans的C/S应用程序的一些基本的步骤。

  编写Enterprise beans的代码,包括beans的代码中远程(remote)接口和本地(home)接口的代码。

编写客户端代码。

编译和链接源代码,包括beans的和客户的源代码。

在目录META-INF中产生一个配置描述器。

打包Enterprise bean。

将Enterprise bean配置到jar文件中。

运行客户端。

 

编写一个Enterprise bean:

  所有的Enterprisebeans都由三个部分组成,都必须由Enterprisebeans的提供者编写。这三个部分是:

  实现类implementation class:这是一个Enterprisebean类,包括Enterprise beans应用逻辑的实现、和本地(home)、远程(remote)接口的功能定义。对于Sort例子,实现类就是SortBean.java文件。

  本地(home)接口:本地接口定义了createing,finding,removing Enterprise beans的操作。在我们这个例子中,本地接口就是SortHome.java文件。

  远程(remote)接口:远程接口定义了一些对客户可用的应用逻辑的方法。由Enterprisebeans提供。本例中,远程接口就是Sort.java文件。

  客户要能够调用Bean的应用逻辑方法,Bean必须由这三个组成部分。客户应用程序使用Home接口来定位beans的remote接口。一旦客户拥有了remote接口的引用(refereenece),就? 调用在remote接口中声明的任何方法。客户并不知道方法是在本地还是在远程系统中执行。对客户而言,调用Enterprise beans的方法就和调用本地方法一样简单。EJB容器将远程调用传递给实际的Enterprisebeans的实例。控制所有的通信协议,并通过remote接口将返回值传给客户。

  下图显示了当SortClient客户需要调用SortBean 会话bean的merge()方法的时候的可能发生的调用情况。注意,SortClient首先调用SortHome接口的Create()方法。返回了Sort的remote接口的一个引用。然后,客户端才调用Sort remote接口的merge()方法。方法传回了所需要的结果。

EJB 容器
Create Sort 的实例
Sort的引用
Merge函数
结果

  例子Sort是一个无状态的会话bean。大多数的会话beans都有状态。在会话中,应客户的要求,容器产生一个bean的实例。并且在整个会话中,这个实例都为这个这个特定的客户服务。根据定义,一个有状态的会话bean在整个会话的过程中都保持着与客户的会话状态。 

  另一方面,无状态的状态bean并没有指向某一个特定的客户,也就是说,说它并没有保持着与客户会话的任何状态。当客户调用一个无状态的会话bean方法时,容器给客户指定一个在缓冲池中的beans实例为之服务。被指定的实例保持着方法有关的变量,一直到完成方法调用。实例在方法调用的时候就返回的状态是任意值。而自己却不保存任何的状态,也不再与调用它的客户相联系。容器可以将实例归还给实例缓冲池,也可以不归还给缓冲池而由系统自动处理。

编写本地(home)接口:

  home接口定义了创建(create),查找(find),删除(remove)等方法。无状态会话bean的home接口要比有状态的会话bean或者实体bean的home接口要来得简单。SortHome的home接口扩展了javax.ejb.EJBHome接口,声明了create()方法。Create()方法没有参数,抛出两个异常:RemoteException和CreateException。

  Create()返回了一个类型为Sort的对象,它实际上是一个对remote接口的一个引用。注意,客户并没有直接调用beans实例的任何方法。客户只是调用了通过beans的remote接口调用在remote接口定义了的方法。

  因为有状态的会话bean和实体bean保持了客户的状态,可以有多个方法来产生实例,可以传递初始的参数给Create()方法。而无状态的会话bean并不需要保存客户的状态,可以只有一个Create()方法。这个唯一的Create()方法不能含有任何参数。将beans实例从实例缓冲池中取消的方法是Remove()方法,这是从EJBHome中继承过来的,而不需要另外在SortHome的Home接口中声明。

Sorthome的home接口如以下代码所示:

//SortHome.java
public interface SortHome extends javax.ejb.EJBHome(
Sort create() throws java.rmi.RemoteException, javax.ejb.CreateExcepion;)

编写remote接口代码:

  remote接口定义、发布了Enterprise bean的应用方法,使这些应用方法可以在客户端被调用。它扩展了javax.ejb.EJBObject接口。Remote接口中的每一个方法都必须与SortBean实现类中的声明相匹配。方法必须有同样的名字和标识。另外,在sort的remote接口中必须抛出java.rmi.RemoteException异常,必须返回有效的RMI类型。Sort的remote接口声明了两个方法:sort()和merge()。两个方法都抛出了java.rmi.RemoteException异常,都返回了Vector类型。如下代码就是Sort的Remote接口:

最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册