RMI-IIOP出现以前,只有RMI和CORBA两种选择来进行分布式程序设计。RMI-IIOP综合了RMI
和CORBA的优点,克服了他们的缺点,使得程序员能更方便的编写分布式程序设计,实现分布式计算。
首先,RMI-IIOP综合了RMI的简单性和CORBA的多语言性(兼容性),其次RMI-IIOP克服了RMI只能
用于Java的缺点和CORBA的复杂性(可以不用掌握IDL).
下面给出了一个非常的简单的RMI-IIOP程序,该程序是在上一个例子(Java2 RMI入门的基础)
上修改完成的,可以对比两个程序的区别。
1. 实现远程接口,生成远程对象,存根(Stub)和框架(Skeleton)
实现远程接口,远程接口告诉JVM:实现了该接口的对象可以远程调用及有哪些方法可以调用。
本例子中定义了sayHello()。由于远程调用会涉及到网络通讯,因此这些方法都要抛出RemoteException.
远程接口和远程对象可以由A开发,并把远程接口(Hello)d打包分给Client端开发者B。
建立f: mi_iiop目录,把Hello.java和HelloImpl.java拷贝到该目录中。
// Hello.java
package jdeveloper.rmi;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface Hello extends Remote {
String sayHello() throws RemoteException;
}
生成远程对象.
// HelloImpl.java
package jdeveloper.rmi_iiop;
import javax.naming.*;
import java.rmi.RemoteException;
import java.rmi.RMISecurityManager;
//import java.rmi.server.UnicastRemoteObject;
import javax.rmi.PortableRemoteObject;
public class HelloImpl extends PortableRemoteObject
implements Hello {
public HelloImpl() throws RemoteException {
super();
}
public String sayHello() {
return "Hello World!";
}
public static void main(String args[]) {
// Create and install a security manager
if (System.getSecurityManager() == null) {
System.setSecurityManager(new RMISecurityManager());
}
try {
Hello obj = new HelloImpl();
// Bind this object instance to the name "HelloServer"
//***** old code for rmi
// Naming.rebind("HelloServer", obj);
//***** new code for rmi-iiop
Context initialNamingContext = new InitialContext();
initialNamingContext.rebind("HelloServer", obj);
System.out.println("HelloServer bound in registry");
} catch (Exception e) {
System.out.println("HelloImpl err: " + e.getMessage());
e.printStackTrace();
}
}
}
存根(Stub)和框架(Skeleton)
f:
cd mi_iiop
set classpath=.;%classpath%
javac -d . Hello.java
javac -d . HelloImpl.java
rmic -iiop -d . jdeveloper.rmi_iiop.HelloImpl
这一步将生成<_Interface>_stub.class,<_InterfaceImpl>_Tie.class:
_Hello_Stub.class和_HelloImpl_Tie.class
2. 实现Client端程序
// HelloClient.java
package jdeveloper.rmi_iiop;
import java.rmi.RMISecurityManager;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.NotBoundException;
import javax.rmi.PortableRemoteObject;
import javax.naming.*;
public class HelloClient {
public static void main(String args[]) throws Exception{
System.setSecurityManager(new RMISecurityManager());
Context initialNamingContext = new InitialContext();
Hello RemoteObj = (Hello) PortableRemoteObject.narrow(
initialNamingContext.lookup("iiop://"+ args[0] +"/HelloServer"),
Hello.class
);
System.out.println(RemoteObj.sayHello());
}
}
把HelloClient.java拷贝到目录f: mi_iiop中。
f:
cd mi_iiop
javac -d . HelloClient.java
3. 运行程序
启动DOS窗口
运行 tnameserv
把 server.bat 和 policy 放到f: mi_iiop
启动新的DOS窗口
运行 server
启动新的DOS窗口
把 client.bat 放到f: mi_iiop
运行 client hostname
server.bat
set CP=%classpath%
set classpath=.;%classpath%
java -Djava.naming.factory.initial=com.sun.jndi.cosnaming.CNCtxFactory
-Djava.naming.provider.url=iiop://hjc:900 -Djava.security.policy=policy jdeveloper.rmi_iiop.HelloImpl
set classpath=%CP%
client.bat
set CP=%classpath%
set classpath=.;%classpath%
java -Djava.naming.factory.initial=com.sun.jndi.cosnaming.CNCtxFactory
-Djava.naming.provider.url=iiop://hjc:900 -Djava.security.policy=policy jdeveloper.rmi_iiop.HelloClient %1
set classpath=%CP%
policy
grant {
// Allow everything for now
permission java.security.AllPermission;
};
分享到:
相关推荐
【JAVA RMI入门教程】 Java Remote Method Invocation (RMI) 是Java平台中用于构建分布式应用程序的一个关键技术。RMI使得不同Java虚拟机(JVM)之间的对象可以相互通信,从而共享资源和处理能力,实现分布式计算。其...
《EJB-RMI入门》是一本专注于讲解Java企业级应用开发技术的书籍,特别是针对RMI(Remote Method Invocation,远程方法调用)的使用。RMI是Java平台中用于构建分布式应用程序的关键技术,它允许Java对象在不同的Java...
8. **扩展技术**:可能提及了与RMI相关的其他技术,如Java RMI-IIOP(与CORBA的集成),或者Jini等。 9. **最佳实践**:提供关于如何有效利用RMI的建议,以及避免常见问题的方法。 综上所述,学习RMI入门需要理解其...
这套课件旨在帮助学生和开发者掌握JAVA编程的基础知识,以及在网络、多线程、JAVARMI(Java Remote Method Invocation)和分布式对象体系等高级主题上的深入理解。 首先,JAVA CORE部分是学习JAVA编程的基础,涵盖...
正在进行中的JMX Exporter将解决在Java的IP地址未知且RMI-IIOP被禁用(例如Amazon Elastic Beanstalk,Cloudbees等)的云风格和弹性环境中进行远程JMX访问的问题。 如果您有什么要讨论的 入门 启用了Spring ...
4. 其他相关技术:如JDBC(Java数据库连接)、JDO(Java数据对象)、CORBA(Java IDL和RMI-IIOP)、JavaMail以及事务管理。 对于初学者,掌握J2EE应用开发的关键技术是必要的,例如JSP、Servlet、EJB、JDBC和事务...
- **RMI/RMI-IIOP**:理解远程方法调用机制,实现分布式应用。 - **CORBA**:学习Common Object Request Broker Architecture的基本概念和技术。 ### 11. 标准与规范 - **Java EE**:熟悉Java Enterprise Edition的...
- **J2EE(Java 2 Platform, Enterprise Edition)**是Sun Microsystems为简化企业级应用的开发而推出的一个标准平台,它支持多种服务和API,如EJB、JMS、RMI-IIOP等。 - **J2EE体系架构概述**主要包括容器...
7. **JCA(Java Connector Architecture)** 和 **RMI-IIOP(Remote Method Invocation over Internet Inter-ORB Protocol)**:提供了与遗留系统集成的能力。 **J2EE 1.4 的新特性** 1. **JSF(JavaServer Faces...
- **J2EE(Java 2 Platform, Enterprise Edition)**是Sun Microsystems为简化企业级应用的开发而推出的一个标准平台,它支持多种服务和API,如EJB、JMS、RMI-IIOP等。 - **J2EE体系架构概述**主要包括容器...
- **主要技术**:包括但不限于Servlets、JSP、EJB、JDBC、JMS、RMI-IIOP等。 #### 二、Struts基础 - **MVC设计模式**:Model-View-Controller模式是一种软件架构模式,它将应用程序分为三个核心组成部分:模型...
- **J2EE主要技术**:主要包括Servlets、JSP、EJBs、JMS、RMI-IIOP等技术。这些技术共同构成了一个完整的解决方案,用于构建高度可伸缩、可维护的企业级应用。 #### 二、Struts基础 - **MVC模式概述** - **MVC...
- **RMI/IIOP**:远程方法调用(RMI)和Internet对象请求中介协议(IIOP)允许跨网络的Java对象通信。 - **JNDI**:Java命名和目录接口,提供目录服务,方便查找和定位分布式应用程序。 - **JMS**:Java消息服务...
- J2EE的主要技术包括Servlets、JSP、EJB、JMS、RMI/IIOP等。这些技术共同构成了一个强大的开发平台,能够满足企业级应用的需求。 #### Struts基础 **2.1 MVC模式概述** - **2.1.1 MVC设计模式** - MVC(Model-...
EJB的通信机制基于RMI(Remote Method Invocation)和IIOP(Internet Inter-ORB Protocol),允许客户端通过JNDI(Java Naming and Directory Interface)查找并调用远程的EJB。在上述的“Dog”例子中,虽然没有直接...
Java RMI虽然也实现了平台无关性,但它局限于Java语言。而CORBA通过IDL(Interface Definition Language)实现了语言无关性,允许不同语言创建和使用CORBA组件。 **CORBA体系结构** 在CORBA体系结构中,服务由IDL...