Java EJB、CORBA、Webservices分布式通信基本原理及特点

相关阅读:

1. Java 分布式通信的几种方式及其特点

2. Java WebService异构系统通信的原理及特点:SOAP与WSDL

3.Java EJB、CORBA、Webservices分布式通信基本原理及特点

4. Java 远程调用与分布式通信的区别

同进程查找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里面(更准确的来说是不在同一个地址空间内)的调用,它就是远程调用

也就是说如果我们在同一个机器上,启动两个进程,然后进行互相调用,那么这个过程就已经是远程调用了

分布式通信主要是使用客户端上的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之间的通信