因为初学分布式的过程中,很多概念含糊不清,于是将有关知识做出整理,如有不对请指点更正。

       首先讲EJB:主要用于"服务集群"和"企业级开发",可以部署分布式应用程序。它既是J2EE的一种规范(指他的一系列技术规范:可扩展 Scalable、分布式 Distributed、事务处理 Transactional、数据存储 Persistent、安全性 Secure),又是一个特殊的java类(就是ejb组件:给一个类贴上规范化的标签就成了EJB类或者叫ejb组件)。    将业务逻辑从客户端软件中抽取出来,封装在一个ejb组件中,然后把这个组件运行在一个独立的服务器上(就是把原来放到客户端的"类",拿出来不放到客户端了,放到一个组件中,并将这个组件放到一个服务器上去运行,客户端通过网络调用组件提供的服务以实现业务逻辑,而客户端的功能单纯到只负责发送调用请求和显示处理结果) 。  再简单的来说,EJB 就是将那些"类"放到一个服务器上,用C/S 形式的软件客户端对服务器上的"类"进行调用。其中将业务逻辑分出来了运行在单独的EJB容器(存放运行EJB组件,相当于tomcat,常用EJB容器有weblogic、jboss等)里面,说明了他可以跨不同的电脑部署,业务逻辑、数据库可以部署在异地电脑上(这就是EJB为什么可以部署分布式应用程序的原因)。

 

初学分布式对EJB、RMI、RPC、WebService等理解

但是EJB有一些缺点:1.web端调用服务是远程调用,但服务端调用本地数据接口获取数据的时候,也是远程调,同时涉及太多类的序列化和反序列化,导致性能不好;2.比较重量级,而且应用服务器厂商配置数据源都不一样,jboss、weblogic等都各有各的方案,导致移植性低;3.调试难,因为看不到远程的东西。。。。等等一系列的缺点导致EJB被淘汰,但是我们还是要去了解其理论,毕竟很多框架都是基于他

       由此可知EJB相当于运行在独立服务器上的组件,客户端是通过网络对EJB 对象进行调用的。在Java中,能够实现远程对象调用的技术是RMI,而EJB 技术基础正是RMI。通过RMI 技术,J2EE将EJB 组件创建为远程对象,客户端就可以通过网络调用EJB 对象了。而RMI是什么技术呢?RMI是“Remote Method Invocation",即远程方法调用,利用对象序列化来实现远程调用。其中对象的序列化过程就是将对象状态转换成字节流(就是将对象数据转为二进制码)或从字节流恢复对象。将对象状态转换成字节流之后,可以用java.io 包中的各种字节流类将其保存到文件中,或者通过网络连接将对象数据发送到另一个主机;而RPC("远程过程调用")这个概念表示本地计算机调用远程计算机上的一个函数,所以RMI=对象序列化+RPC。

其中像我这种初学者要搞清楚RPC和RMI的关系,RPC是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议,支持多种语言;而RMI是Java的一组拥护开发分布式应用程序的API只支持java,可看作是sun公司对rpc的java版本的实现;另外 RMI 调用远程对象方法,允许方法返回 Java 对象以及基本数据类型。而 RPC 不支持对象的概念,传送到 RPC 服务的消息由外部数据表示 (External Data Representation, XDR) 语言表示,这种语言抽象了字节序类和数据类型结构之间的差异。只有由 XDR 定义的数据类型才能被传递, RPC 不允许传递对象。可以说 RMI 是面向对象方式的 Java RPC 。RMI和RPC之间最主要的区别在于方法是如何被调用的。在RMI中,远程接口使每个远程方法都具有方法签名。如果一个方法在服务器上执行,但是没有相匹配的签名被添加到这个远程接口上,那么这个新方法就不能被RMI客户方所调用。在RPC中,当一个请求到达RPC服务器时,这个请求就包含了一个参数集和一个文本值,通常形成“classname.methodname”的形式。这就向RPC服务器表明,被请求的方法在为“classname”的类中,名叫“methodname”。然后RPC服务器就去搜索与之相匹配的类和方法,并把它作为那种方法参数类型的输入。这里的参数类型是与RPC请求中的类型是匹配的。一旦匹配成功,这个方法就被调用了,其结果被编码后返回客户方。

        当EJB逐渐被淘汰后,著名的软件架构WebService出现了。web service就是一种跨编程语言和跨操作系统平台的远程调用技术,它规定了一种方式,告诉你将你的程序如何的部署到服务器上,然后大家通过一种协商好的地址能找到你的程序的说明,说明的格式也是大家都协商好的,所以可以读懂,然后你就可以根据那个地址来调用这个程序的方法了。webservice=xml+soap+wsdl

 

 

 

参考:https://www.cnblogs.com/ygj0930/p/6542811.html
参考:https://blog.csdn.net/lovechuanyu/article/details/40508507

相关文章: