很早以前就听高手说过EJB基于RMI, 最近也有美国同事说基于RMI的EJB远程调用会有问题。

but, 看了一些JBoss文档之后,There always a different answer:

首先JBoss Application Server5的EJB是JBoss EJB3实现.
JBoss EJB3的参考文档里面指出JBoss EJB3是基于JBoss Remoting
而JBoss Remoting的首页里面就指出, 它是的传输协议支持很多:

Socket (SSL Socket) 
   RMI (SSL RMI) //二奶身份 
   HTTP(S) 
   Bisocket (SSL Bisocket) 
   Servlet (SSL Servlet)

缺省配置是jboss socket方式,而不是RMI. 在JBoss EJB3的wiki里面有配置EJB3为其他协议的指南。

 

 

 

 

 

ejb可以基于rmi,不是必须基于rmi

远程调用,说白了都一样,就是序列化,网络传输,反序列化。
不管是com/com+,soap,webservice,rmi,.net remoting.

同种runtime的,可以native的二进制序列化,序列化的效率高。
文本的序列化(xml/json/自定义格式)的方式,可以跨平台和语言,一般基于中间类型。序列化的效率低,数据量也偏大。

网络传输可以使socket/http/或是自定义协议的。
明显socket数据冗余最小,效率最高。rmi其实是socket上的自定义协议。
http明显要走http的报文,文本的方式最合适,实现最简单,开发和部署方便。