专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »Java教程 » javaejb:深入掌握Java技术EJB调用原理分析 2 »正文

javaejb:深入掌握Java技术EJB调用原理分析 2

来源: 发布时间:星期四, 2009年1月8日 浏览:23次 评论:0
  Home接口Weblogic实现类stub类 ((Hello Bean))_HomeImpl_WLStub(部署时候动态生成字节码)

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

  Remote接口:Hello (用户编写)

  Remote接口Weblogic实现类 ((Hello Bean))_EOImpl(EJBC生成)

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

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

  客户端只需要Hello.和HelloHome.这两个文件

  ((Hello Home)) home = (Home)

  ((Portable Remote Object)).narrow(ctx.lookup("Hello"),

  ((Hello Home)).);

  这行代码是从JNDI获得Home接口但是请记住!接口是抽象那么home这个对象到底是什么类对象例子呢?很简单用toString输出看下就明白了下面行是输出结果:

  ((Hello Bean))_HomeImpl_WLStub@18c458

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

  接下来客户端代码:

  Hello h = home.create

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

  ((Hello Bean))_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远程对象接口是HelloHome对象stub是HelloBean_HomeImpl_WLStub对象skeleton是HelloBean_HomeImpl_WLSkeleton

  然后HelloBean_HomeImpl再去HelloBean_ImplejbCreate思路方法而HelloBean_ImplejbCreate思路方法将负责创建或者分配个Bean例子并且创建个HelloBean_EOImpl_WLStub对象例子

  这步比较有趣在前步RMI循环中远程对象HelloBean_HomeImpl在客户端有个代理类HelloBean_HomeImpl_WLStub但在这HelloBean_HomeImpl自己却充当了HelloBean_Impl代理类只不过HelloBean_HomeImpl不在客户端而是在服务端因此不进行RMI

  然后HelloBean_EOImpl_WLStub对象例子序列化返回给客户端步也很有趣上次RMI过程主角是HelloBean_HomeImpl和它代理类HelloBean_HomeImpl_WLStub但这这次换成了HelloBean_EOImpl和它代理类HelloBean_EOImpl_WLStub来玩了

  Hello h = home.create;h.helloWorld;

  假设Hello接口有个helloWorld远程思路方法那么表面上是在Hello接口helloWorld思路方法实际上是在HelloBean_EOImpl_WLStubhelloWorld思路方法

  然后HelloBean_EOImpl_WLStubhelloWorld思路方法将发送信息给服务器上HelloBean_EOImpl_WLSkeleton而HelloBean_EOImpl_WLSkeleton收到信息以后再去HelloBean_EOImplhelloWorld思路方法至此完成第2次完整RMI循环过程

  在刚才HelloBean_EOImpl是作为远程对象被代理类是HelloBean_EOImpl_WLStub但现在HelloBean_EOImpl要作为HelloBean_Impl代理类了现在HelloBean_EOImpl去HelloBean_ImplhelloWorld思路方法注意!HelloBean_Impl继承了HelloBean而HelloBean中helloWorld思路方法是我们亲自编写代码现在终于到了我们编写代码了!

  至此次EJB过程终于完成在整个过程中服务端主要要类是HelloBean_Impl Hello Bean?_HomeImplHelloBean_HomeImpl_WLSkeletonHelloBean_EOImplHelloBean_EOImpl_WLSkeleton

  客户端主要类是HelloBean_HomeImpl_WLStubHelloBean_EOImpl_WLStub这两个类在客户端代码中并不会直接出现出现在代码中类是他们接口HelloHome和Hello因此客户端需要这两个接口文件而Stub是服务器传送给他们

0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: