EJB调用机制
???? 由于EJB的调用过程对开发者来说是透明的,以至于我们错误地认为lookup()方法返回的对象就是Bean实例。实际上,客户端与Session Bean交互时,它并不直接与Bean实例打交道,而是经由Bean的远程或本地接口。当调用远程或本地接口的方法时,接口使用的是存根(Stub)对象。该存根实现了Session Bean的远程或本地接口。它负责将方法调用经过网络发送到远程EJB容器,或将请求路由到位于本地JVM内的EJB容器。存根是在部署期间使用JDK自带的java.lang.reflect.Proxy动态生成。 ??? 当EJB部署到应用服务器时,EJB容器为EJB生成存根(stub)类和骨架(skeleton)类的字节码。存根和骨架对开发者来说是不可见的。客户端使用lookup()方法在应用服务器的JNDI树中查找EJB,应用服务器把存根对象序列化后返回客户端。这时客户端远程接口引用的是存根对象。接着,客户端开始业务方法的调用: 1.客户端调用远程接口的xxxMethod()方法(实际上调用的是存根对象的xxxMethod()方法,该存根实现了某一远程接口)。 2.方法调用经过IIOP Runtime被转换成CORBA IIOP消息发往应用服务器。 3.应用服务器接收到请求消息后,交由骨架(skeleton)处理。骨架通过IIOP Runtime解析协议消息,并根据协议要求调用Bean实例的xxxMethod()方法。 4.骨架(skeleton)将xxxMethod()方法的返回值经过IIOP Runtime 转换成CORBA IIOP应答消息发回客户端。 5.存根对象通过IIOP Runtime将CORBA IIOP应答消息解析成返回值。 ? 如果有过webservice编程经验,使用EJB的存根访问EJB与使用webservice的代理存根访问webservice是非常相似的,只不过webservice的代理存根将方法调用转换成SOAP协议,而EJB的存根将方法调用转换成CORBA IIOP协议。 ? WebService是行业标准,而EJB是平台标准。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- CXF WebService+Spring 无法注入问题解决方法
- angularjs – angular1.x中的$promise和$q promises有什么区
- Bootstrap3 框架下 使用 Bootstrap-table 结合 Bootstrap-
- 2015年需要了解的前端框架和语言
- 初涉bootstrap:bootstrap 插件
- node.js – 如何访问在Mesos上运行的Web应用程序?
- 使用Angular材质创建响应式工具栏
- 为什么Scala Source不关闭底层的InputStream?
- 数组 – 在Bash完成的上下文中对${array [*]}和${array [@]
- SystemProperties读取资源文件.properties文件的配置属性
- angularjs:ng-switch-when中的多个值
- shell命令中用source 和sh(或者bash)执行脚本的
- POJ 2104 K-th Number [主席树入门]【数据结构】
- scala – Spark Standalone Mode:更改HDFS输出的
- angularjs – 如何在ui-router中继承解析数据
- 学习WebService过程中遇到的错误归总
- angularjs – 获取Angular中表单元素的原始值
- ng2-dragula [dragula](angular2拖放) – * ngFo
- AngularJS和Django的DOM,JavaScript和服务器端数
- angularjs – 我们什么时候使用`preLink`的指令的