快速业务通道

EJB的存根和骨架的工作原理 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
; String method = (String)inStream.readObject(); // check method name if (method.equals("age")) { // execute object server''s business method int age = myServer.getAge(); ObjectOutputStream outStream = new ObjectOutputStream(socket.getOutputStream()); // return result to stub outStream.writeInt(age); outStream.flush(); } if(method.equals("name")) { // execute object server''s business method String name = myServer.getName(); ObjectOutputStream outStream = new ObjectOutputStream(socket.getOutputStream()); // return result to stub outStream.writeObject(name); outStream.flush(); } } } catch(Throwable t) { t.printStackTrace(); System.exit(0); } } public static void main(String args []) { // new object server PersonServer person = new PersonServer("Richard", 34); Person_Skeleton skel = new Person_Skeleton(person); skel.start(); } }

Skeleton类extends from Thread,它长驻在后台运行,随时接收client发过来的request。并根据发送过来的key去调用相应的business method。

EJB的存根和骨架的工作原理(4)

时间:2011-04-30

5、最后一个,Client的实现

代码:

public class PersonClient { public static void main(String [] args) { try { Person person = new Person_Stub(); int age = person.getAge(); String name = person.getName(); System.out.println(name + " is " + age + " years old"); } catch(Throwable t) { t.printStackTrace(); } } }

Client的本质是,它要知道Person接口的定义,并实例一个Person_Stub,通过Stub来调用business method,至于Stub怎么去和Server沟通,Client就不用管了。

注意它的写法:

Person person = new Person_Stub();

而不是

Person_Stub person = new Person_Stub();

为什么?因为要面向接口编程嘛,呵呵!

//RMI实质上就是生成2个类stub,skeleton来进行参数和返回值的传递,采用值传递方式

//类似于以前写的聊天室程序,被传递的对象应实现java.io.Serializable接口

EJB的存根和骨架的工作原理(5)

时间:2011-04-30

二、Websphere实现

EJB类一览

这里结合WebSphere来讲讲各个类的调用关系吧!

假定我们要创建一个读取User信息的SessionBean,需要我们写的有3个文件:

1、UserServiceHome.java

Home接口

2、UserService.java

Remote接口

3、UserServiceBean.java

Bean实现

WSAD最终会生成10个class。其它7个是什么呢?我们一个一个数过来。

4、_UserServiceHome_Stub.java

这个当然就是Home接口在Client端(动态加载)的Stub类了,它implements UserServiceHome。

5、_EJSRemoteStatelessUserServiceHome_a940aa04_Tie.java

Home接口在Server端的Skeleton类,"a940aa04"应该是随机生成的,所有其他的相关class名里都会有这个标志串,Tie是Corba对Skeleton的叫法。

6、EJSRemoteStatelessUserServiceHome_a940aa04.java

Home接口在Server端的实现,当然,它也implements UserServiceHome。

7、EJSStatelessUserServiceHomeBean_a940aa04.java

由#6调用,create _UserService_Stub。(为什么#6不能直接create _UserService_Stub呢?后面再讲。)

8、_UserService_Stub.java

Remote接口在Client端(动态加载)的Stub类。它implements UserService。

9、_EJSRemoteStatelessUserService_a940aa04_Tie.java

Remote接口在Server端的Skeleton类。

10、EJSRemoteStatelessUserService_a940aa04.java

Remote接口在Server端的实现,

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号