远程调用

       RMI

       作为所有java远程方案的根源,RMI是在JDK1.1中引入的。它基于java序列化机制,通信协议则是可接插的,其默认的协议是JRMP,RMI-IIOP则是晚些时候为兼容CORBA而引入的。这两种协议都是J2EE兼容的EJB容器必须实现的

       不管EJB还是JAX-RPC都是建立在RMI模型基础之上

       RMI标准的JRMP协议不提供授权、加密、压缩和HTTP隧道的支持,即使你需要它们,也不要自己实现RMI的通信协议,可以考虑选择别的替代方案,例如基于HTTP的远程工具或远程EJB

       标准的EJB并不适合与外部客户端和Internet服务器交互,因为大多数EJB通信协议都是针对Intranet使用而设计的,它们使用了非标准的端口。某些EJB容器(Jboss、Resin)提供EJB的HTTP调用器(HTTP invoker for EJB),借助基于HTTP的通信协议解决了防火墙问题。但无论如何,web services---借助SOAP或其他 基于HTTP的协议,才是跨越Internet进行服务调用的上上之选

      EJB

      经典的J2EE分布式解决方案是远程session bean

      EJB容器允许使用任何通信协议来进行EJB之间的远程调用。一般来说,应用程序的客户端需要访问哪个容器,就需要引入该容器特有的客户端jar文件,其中就实现了通信协议的客户端部分。J2EE规范要求支持IIOP,以便与CORBA客户端互操作,还要求支持JRMP,这是默认的Java RMI协议。很多服务器还附带提供了它们自己的、更加高效的通信协议,例如weblogic的T3和Resin的Hessian。当同一种J2EE服务器的多个实例之间需要进行远程调用时,厂商通常都会推荐他们专有的协议。

      远程EJB是通过J2EE容器的JNDI环境暴露出来,使用什么JNDI名称则是在厂商自己规定的部署描述符中配置

      在多次远程调用之间保持事务开启会是一个潜在的危险 

基于WSDL的web Services:JAX-RPC

      构建在WSDL和SOAP之上的web services是应用集成的重要选项,XML在web services的世界里扮演着核心的角色--它是WSDL和SOAP共同的基础。web services在设计上有一个明显的权衡,即互操作性和扩展性胜于易用性和性能。使用XML来实现SOAP就很明显证明这一权衡,用庞大的XML格式作为远程调用的通信协议,这很难说是一种好的选择。对于Java应用程序之间的交互,RMI/EJB或者Hessian/Burlap都是好的选择,而且很容易使用,更重要的是,它们的通信协议效率比SOAP要高得多

基于HTTP的轻量级远程访问协议

      Caucho公司开发两种简约的协议,一个是二进制协议Hessian,另一个是基于XML的Burlap。Resin企业版服务器允许用这两种协议作为EJB的通信协议,也可以在任何一个servlet容器中使用它们。

      Hessian和Burlap都是强大而灵活的基于HTTP的远程调用协议,它们对服务接口和服务实现没有任何限制。只要与标准的web容器结合,就可以满足各种无状态远程调用的需求,尤其是java应用程序之间的通信。它们特别适合用于跨越Internet与外部客户端通信,同时也能胜任服务器系统内部分布式组件之间的通信

      

      

 

 

 

你可能感兴趣的:(调用)