`
kylinsoong
  • 浏览: 236142 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

EJB4:RMI和RMI-IIOP

阅读更多

计划提纲:引入→RMI概念→RMI HelloWorld程序→RMI-IIOP→RMI-IIOP HelloWorld程序

Part One:引入

从一幅图开始:



 上图说明的是client端程序访问远程服务器上EJB的详细流程,这里我主要要关注的是底层实现技术RMI-IIOP,同样

EJB3: JBOSS 企业版、JBOSS服务器构架、EJB2.0 HelloWrold实例

中第四部分开始也说明客户端与JBOSS EJB组件系统的交互中RMI-IIOP的重要性,所以研究EJB学习RMI-IIOP是非常有必要的,Java RMI-IIOP(java remote method invocation over the internet inter-ORB protocol),如果使用过RMI,就应该很清除RMI是Java执行远程方法调用的方式,而RMI-IIOP则是RMI的功能扩展版本,增加了如:分布式垃圾收集,对象活化,可下载类文件等,所以你可以把RMI理解成为RMI-IIOP的简化版本,在分布式对象方法调用上他们都完成了最基本的功能,综上,理解RMI-IIOP之前需要理解RMI,所以开始我们的Part two.

Part Two: RMI概念原理

      RMI(Remote Method Invocation):JDK提供的一个完善的、简单易用的远程方法调运框架,它要求服务器端和客户端都是Java程序。这句话说明:

      1 Java所特有的分布式计算技术

      2 允许运行在一个Java虚拟机上的对象调用运行在另一个Java虚拟机上的对象的方法,从而使Java编程人员可以方便地在网络环境中作分布式计算

      3 面向对象设计要求每个任务由最适合该任务的对象执行,RMI将这个概念更深入了一步,使任务可以在最适合该任务的机器上完成

区别两个概念来说明RMI

  RMI RPC
全名 Remote Method Invocation Remote Procedure Call Protocol
速度 低速 高速
可靠性 可靠 不可靠
底层协议 TCP/IP UDP

 

 

 

 

 

 

 

 

说明:其实这两个名词没有可比性,因为他们根本不是一类东西,RMI是Sun公司定义的一个Java分布式框架,包括一些Java接口等,而RPC是一个网络协议;

RMI框架的基本结构:



 上图中:

1 Client 表示客户端java程序

2 Server 表示服务器端java程序

3 Stub就是代表远程对象的客户方代理,定义远程对象版本所支持的所有接口

4 Remote Referance表示远程引用层简称RRL

5 Skeletons是与服务器方代理,接受客户机方RRL的方法调用请求

6 底层是基于TCP/IP的协议

客户端调用远程服务器程序,先调用本地stub的方法,而本地stub将负责执行对远程对象的方法调用。在RMI中,远程对象的代理stub与该远程对象所实现的远程接口集相同,当你使用RMI来开发一个分布式应用时,需要遵守下面的步骤: 

      定义远程接口:一个远程接口定义了可以被客户端远程调用的方法。

      实现远程对象:远程对象必须实现一个或多个远程接口。

      注册远程对象:RMI采用的是命名和目录服务,所以远程对象注册后,客户端才可以访问

      实现客户端:使用远程对象的客户可以在远程接口被定义后的任何时候实现。

Part Three: RMI HelloWorld 程序

1 创建远程接口,需要注意两点:实现java.rmi.Remote接口,接口中所有方法抛出java.rmi.RemoteException;

如下代码HelloService为远程接口

public interface Service {

	public String echo(String msg) throws RemoteException;
	
	public Date getTime() throws RemoteException;
}

 

public interface HelloService extends Service, Remote {

}

 2 创建远程对象,同样注意两点:实现远程接口、继承java.rmi.server.UnicastRemoteObject类,如下HelloServiceImpl为远程对象

public class HelloServiceImpl extends UnicastRemoteObject implements
		HelloService {
	
	private String name;

	public HelloServiceImpl(String name) throws RemoteException {
		this.name = name;
	}

	public String echo(String msg) throws RemoteException {
		return "echo: " + msg + " from " + name;
	}

	public Date getTime() throws RemoteException {
		return new Date();
	}
}

 3 注册远程对象,如下HelloServer注册了远程对象:

public class HelloServer {

	public static void main(String[] args) {
		try {
			HelloService helloWorld = new HelloServiceImpl("kylinsoong");
			LocateRegistry.createRegistry(8888);
			Naming.bind("rmi://localhost:8888/helloWorld",helloWorld);
		} catch (RemoteException e) {
			e.printStackTrace();
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (AlreadyBoundException e) {
			e.printStackTrace();
		} 
	
	}

}

 4 客户端程序,下面HelloClient程序:

public class HelloClient {

	public static void main(String[] args) {
		try {
			HelloService helloworld = (HelloService) Naming.lookup("rmi://localhost:8888/helloWorld");
			System.out.println(helloworld.echo("kylin soong") + "\n" + helloworld.getTime());
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (RemoteException e) {
			e.printStackTrace();
		} catch (NotBoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

 运行服务器端远程对象注册完成后,运行客户端代码可以出现如下结果;

echo: kylin soong from kylinsoong
Tue Nov 02 21:22:46 CST 2010

 

Part Four: RMI-IIOP概念与原理

 

 

 

Part Five: RMI-IIOP HelloWorld 程序 

  • 大小: 56.8 KB
  • 大小: 16.3 KB
2
0
分享到:
评论
1 楼 akka_li 2016-10-28  
学习了!但是为什么后续的没有了?!

相关推荐

    RMI可运行的示例代码

    可运行的RMI示例代码,RMI概念和其中的技术要点总结参见我的blog文章:"EJB第一枪:RMI and RMI-IIOP

    RMI-IIOP Java 源码实例.rar

    RMI-IIOP Java 源码实例,附有BAT批处理命令,Java EJB初学者可参考学习,EJB的例子。

    Java RMI-IIOP 相关源代码.rar

    Java RMI-IIOP相关源代码,附有BAT批处理命令,Java EJB初学者可参考学习,EJB的例子。

    RMI技术研究及其在EJB中的应用

    分布式对象; 远程方法调用; CORBA; RMI-IIOP; 企业JavaBeans RMI技术研究及其在EJB中的应用

    Java RMI-IIOP相关源代码

    Java RMI-IIOP相关源代码,附有BAT批处理命令,Java EJB初学者可参考学习,EJB的例子。

    RMI-IIOP_java_

    RMI-IIOP Java 源码实例,附有BAT批处理命令,Java EJB初学者可参考学习

    Java中的EJB编程实例代码

    内容有:简单的EJB、无状态SessionBean、有状态SessionBean、BMP位图实例、cmp实例、Message-Driven Bean、JNDI的使用、112各种EJB之间的调用、B-S结构EJB、 C-S结构EJB、UML建模与J2EE开发、RMI and RMI-...

    CORBA客户端访问EJB

    CORBA客户端访问EJB,EJB通过RMI--IIOP协议与corba兼容

    J2EE中常见术语解释

    Remote Method Invocation over the Internet-ORB Protocol(基于互联网的对象请求代理协议实现的远程方法调用) J2EE和EJB事实上的网络通信标准,基于RMI,同时又兼容CORBA,使得EJB组件可以被Java之外的客户端调用...

    Java中Enterprise JavaBeans(EJB)编程实例代码.rar

    内容有:简单的EJB、无状态SessionBean、有状态SessionBean、BMP位图实例、cmp实例、Message-Driven Bean、JNDI的使用、112各种EJB之间的调用、B-S结构EJB、 C-S结构EJB、UML建模与J2EE开发、RMI and RMI-...

    JavaEE主要技术

    servlet JSP EJB JSF RMI-IIOP/java-IDL

    WSAD环境下JMS异步通信全攻略

    RMI-IIOP通过CORBA平台和语言中立的通信协议发送RMI消息。  为了支持异步通信,J2EE 1.3规范还引入了一种新的EJB类型:消息驱动的Bean,即Message Driven Bean,简称MDB。如前所述,在JMS之前,J2EE原来是一个...

    J2EE初学者需要理解的问题

    一、J2EE提出的背景 1、 企业级应用框架的需求 2、 为了通用必须要提出规范,不然无法达到通用 二、相关名词解释 ... RMI/IIOP: EAI: 三、J2EE的优越性 四、现状 ....... 常用架构以及详细主流框架技术讲解

    EJB应用开发详解+书中源码

    共分3大部分20章,包括无状态会话Bean、有状态会话Bean、CMP实体Bean、EJB QL语言、集成RMI-IIOP与JNDI、应用客户端开发、EJB部署、持久化EJB与CORBA的集成等内容,均是目前的技术热点和读者所关注的问题。...

    JBoss Application Server

    The J2EE platform manages the infrastructure and supports the Web services to enable development of secure, robust and interoperable business ... CORBA Integration (RMI/IIOP, IDL, EJB-CORBA Mapping

    基于J2EE的介绍

    •RMI/ IIOP(远程过程调用/因特网ORB间协议):友情链接本地Java的RPC机制,CORBA,并允许非Java系统访问EJB。 •XML技术(JAXP,SAAJ,JAX-RPC等):一个完整的技术套件操纵XML和构建基于标准的XML Web服务。 •...

    J2EE应用开发详解

    CORBA 237 14.1 CORBA的需求 237 14.2 CORBA的架构 237 14.2.1 IDL 239 14.2.2 ORB 240 14.2.3 IIOP 241 14.2.4 BOA 241 14.3 CORBA服务 241 14.4 创建CORBA应用 243 14.5 CORBA与RMI 246 14.5.1 CORBA和RMI的区别 ...

Global site tag (gtag.js) - Google Analytics