下面两篇从五个方面来介绍如何编写Enterprise bean的客户端:
一、Enterprise JavaBean的客户视图:
Enterprise JavaBean客户是一个独立的应用程序,或者是一个Servlet,或者一个Applet,还或者另一个Enterprise JavaBean。无论如何,客户要使用一个Enterprise JavaBean必须要做如下事情:
首先要JavaBean的home接口:EJB 规范里面要求客户应该使用Java的名字和目录接口JNDI(Java Naming and Direcotry Interface)API来定位Bean的home接口。
然后获得Enterprise JavaBean的remote接口的引用:可以使用Enterprise bean的home接口中定义的方法。可以产生一个会话bean,也可以产生或寻找(find)一个实体bean。
调用Enterprise JavaBean中定义的方法:客户并不直接调用Enterprise JavaBean中定义的方法。而是通过调用在Enterprise JavaBean的remote接口中暴露给用户的方法来使用JavaBean类中的方法。在remote接口中定义的方法就是在JavaBean中希望暴露给用户,让用户使用的方法。
初始化客户:
在IAS所带的例子里面,作为客户的SortClient应用程序引入了必要的JNDI类、还引入了SortBean的home接口和remote接口。客户使用JNDI的API来定位Enterprise JavaBean的Home接口。
定位Home接口:
客户用JNDI定位home接口。首先需要获得一个JNDI的初始化的上下文context。下面的代码实例化了一个新的javax.naming.Context类。在我们这个例子中叫做initialContext。然后,客户就可以使用上下文的lookup()方法从一个名字对应到home接口。注意,初始的命名上下文工厂的初始化是由EJB容器/服务指定的。
上下文的lookup()方法返回了一个java.lang.Object的对象。代码必须把返回的对象转成所希望的类型。下面的代码是SortClient例子中的一段代码。Main()从使用JNDI服务开始,并用上下文的lookup()方法来定位home接口。将remote接口的名字(在这个例子中是sort)传递给context.loopup()方法。注意,程序最后将context.lookup()方法的结果传递给了SortHome,home接口的类型。
用JNDI定位home接口:
// SortClient java
import javax.naming.InitialContext;
import SortHome; // 引入bean的home接口
import Sort; // 引入bean的remote接口
public class SortClient {
……
public static void main(String[] args) throws Exception
javax.naming.Context context;
{ // 用命名服务获得JNDI上下文
context = new.javax.naming.InitialContext();
}
Object objref = context.lookup(sort);
SortHome home = (SortHome)javax.rmi.PortableRemoteObject.narrow(objref,
SortHome class);
Sort sort = home.create();
//做排序工作
sort remove();
}
maint()首先抛出一个普通的异常Excepion。当代码执行到这儿的时候,就算可能会导致程序的终止,客户也需要捕获任何发生的异常。
获得remote接口:
现在我们获得了Enterprise JavaBean的home接口,然后,使用home接口的create()方法或者finder()方法就可以获得其remote接口了。实际使用哪个方法取决于Enterprise JavaBean的类型和Enterprise JavaBean的提供者在home接口定义的方法。
例如:上面的代码显示了客户SortClient如何获得Sort的remote接口的引用。一旦SortClient获得了home接口的引用并将之转化为适当的类型(这里是SortHome),客户就可以产生bean的实例,并调用它的方法。本例子中调用了home接口的create()方法,方法返回了remote接口的引用。(因为这个例子里面SortBean是一个无状态的会话bean,其home接口只有一个create()方法,这个方法没有任何参数)。然后,SortClient就能够调用定义在remote接口中的方法:sort()和merge()来进行排序工作。当排序工作完成的时候,客户调用remote接口的remove方法来删除Enterprise bean的实例。






