Java 远程调用与分布式通信的区别
相关阅读:
2. Java WebService异构系统通信的原理及特点:SOAP与WSDL
3.Java EJB、CORBA、Webservices分布式通信基本原理及特点
同进程查找JDNI服务
比如说我们通过JNDI来查找Tomcat中配置的DataSource,代码如下
Context context = new InitialContext();
DataSource ds = (DataSource)context.lookup("java:/comp/env/jdbc/oracleds");
将这两行代码放到JSP页面中,在new InitialContext()之后,就能在JNDI服务上查到DataSource
这是因为JSP和JNDI服务是在同一个进程里的。但如果不是同一个进程,则不能new InitialContext()
这就好像是两间屋子里面的资源无法共享一样,除非穿墙,否则是无法拿到对面屋子里的资源的
所以在main()方法中是无法有效的执行这两行代码的
因为在运行main()方法时,它会在一个进程中启动JVM来解析class,而Tomcat那里又是另外一个进程
所以在这两个进程之间,只是通过简单的new InitialContext()是找不到JNDI服务的,事实上这个过程就是在远程调用
其实所谓的远程,并不是说跨机器、跨网络就是远程,只要是两个进程之间的调用,就算是远程调用了
也就是说只要是不在同一个JVM里面(更准确的来说是不在同一个地址空间内)的调用,它就是远程调用
也就是说如果我们在同一个机器上,启动两个进程,然后进行互相调用,那么这个过程就已经是远程调用了
文章来源:爱上123 原文地址:http://www.ishang123.com/jishubowen/java/2012-09-20/235.html
分布式通信的基本原理
主要是使用客户端上的Stub(存根)和远程对象上的Skeleton(骨架)作为中介,来实现分布式通信的
在客户端会有一个叫做Stub(存根)的东西,其实现采用的是非常典型的代理模式,是远程对象在客户端的代理
Stub会封装所交互的数据的访问细节(如何压缩、压包、编码等),然后通过相应的协议与Skeleton(骨架)交换数据
对于Java领域的分布式通信技术,较常见的有EJB技术、CORBA技术、WebService技术等等
如果是EJB技术,那么Stub就会采用RMI-IIOP协议来传送数据给Skeleton
如果是CORBA技术,那么Stub就会采用IIOP协议来传送数据给Skeleton
如果是WebServices技术,那么Stub就会通过SOAP(搜魄)协议来传送数据给Skeleton
也就是说Stub会按照特定协议将信息传送给Skeletion
而Skeleton会将Stub传送过来的数据解析成特定的语言对象并发送给远程对象,即服务端
比如说服务端是采用Java开发的,那么Skeleton就会将接收到的数据解析成Java对象,再传送给服务端
同理若服务端是采用C#开发的,那么Skeleton就会将接收到的数据解析成C#对象,再传送给服务端
接着服务端就会返回信息给客户端,于是Skeleton就会将所要返回的信息进行压缩编码并通过相应的协议传送给Stub
接着Stub就会将Skeleton传送过来的信息解开,再传送给客户端,所以客户端就获得了相应的服务端的返回信息了
这里的客户端对象和远程对象是位于不同的JVM中的,或者说是不同的系统平台中,此即分布式通信
它主要就是靠Stub和Skeleton来通讯,说白了,分布式通信也就是Stub和Skeleton之间的通信