首页>计算机等级考试>模拟试题>正文
JAVA程序员试题及答案 14

www.zige365.com 2010-7-28 13:53:45 点击:发送给好友 和学友门交流一下 收藏到我的会员中心
remote接口的Weblogic实现类再去调用Bean类的Weblogic实现类,如此就完成一次EJB对象的远程调用。

先拿普通RMI来说,有4class,分别是远程对象,对象的接口,对象的stub类和skeleton类。而对象本身和对象的stub类同时都实

现了接口类。而我们在客户端代码调用远程对象的时候,虽然在代码中操纵接口,实质上是在操纵stub类,例如:

接口类:Hello

远程对象:Hello_Server

stub类:Hello_Stub

skeleton类:Hello_Skeleton

 

客户端代码要这样写:

Hello h = new Hello_Stub();

h.getString();

 

我们不会这些写:

Hello_Stub h = new Hello_Stub();

h.getString();

 

因为使用接口适用性更广,就算更换了接口实现类,也不需要更改代码。因此客户端需要Hello.classHello_Stub.class这两个文

件。但是对于EJB来说,就不需要Hello_Stub.class,因为服务器会发送给它,但是Hello.class文件客户端是省不了的,必须有。表

面上我们的客户端代码在操纵Hello,但别忘记了Hello只是一个接口,抽象的,实质上是在操纵Hello_Stub

Weblogic上的EJB举例子,10class分别是:

Bean类:HelloBean (用户编写)

Bean类的Weblogic实现类:HelloBean_Impl EJBC生成)

 

Home接口:HelloHome (用户编写)

Home接口的Weblogic实现类 HelloBean_HomeImplEJBC生成)

Home接口的Weblogic实现类的stub HelloBean_HomeImpl_WLStub(部署的时候动态生成字节码)

Home接口的Weblogic实现类的skeleton HelloBean_HomeImpl_WLSkeleton(部署的时候动态生成字节码)

 

Remote接口: Hello (用户编写)

Remote接口的Weblogic实现类 HelloBean_EOImplEJBC生成)

Remote接口的Weblogic实现类的stub HelloBean_EOImpl_WLStub(部署的时候动态生成字节码)

Remote接口的Weblogic实现类的skeleton HelloBean_EOImpl_WLSkeleton(部署的时候动态生成字节码)

 

客户端只需要Hello.classHelloHome.class这两个文件。

 

HelloHome home = (Home) PortableRemoteObject.narrow(ctx.lookup("Hello"), HelloHome.class);

 

这一行代码是从JNDI获得Home接口,但是请记住!接口是抽象的,那么home这个对象到底是什么类的对象实例呢?很简单,用

toString()输出看一下就明白了,下面一行是输出结果:

HelloBean_HomeImpl_WLStub@18c458

这表明home这个通过从服务器的JNDI树上查找获得的对象实际上是HelloBean_HomeImpl_WLStub类的一个实例。

接下来客户端代码:

 

Hello h = home.create()

 

同样Hello只是一个抽象的接口,那么h对象是什么东西呢?打印一下:

HelloBean_EOImpl_WLStub@8fa0d1

原来是HelloBean_EOImpl_WLStub的一个对象实例。

 

用这个例子来简述一遍EJB调用过程:

 

首先客户端JNDI查询,服务端JNDI树上Hello这个名字实际上绑定的对象是HelloBean_HomeImpl_WLStub,所以服务端将创建

HelloBean_HomeImpl_WLStub的一个对象实例,序列化返回给客户端。

 

于是客户端得到home对象,表面上是得到HelloHome接口的实例,实际上是进行了一次远程调用得到了 HelloBean_HomeImpl_WLStub

类的对象实例,别忘记了HelloBean_HomeImpl_WLStub也实现了 HelloHome接口。

 

然后home.create()实质上就是 HelloBean_HomeImpl_WLStub.create(),该方法将发送信息给 HelloBean_HomeImpl_WLSkeleton,而

HelloBean_HomeImpl_WLSkeleton接受到信息后,再去调用 HelloBean_HomeImplcreate方法,至此完成第1次完整的RMI循环。

 

注意在这次RMI循环过程中,远程对象是HelloBean_HomeImpl

本新闻共19页,当前在第14页  1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  

我要投稿 新闻来源: 编辑: 作者:
相关新闻