RMI-IIOP版的HelloWorld简单实例本文是对RMI-IIOP入门的探究,旨在了解其开发过程,形成感性认识,进而了解其原理和应用。
└─src
└─lavasoft
└─rmiiiop
import java.rmi.Remote;
import java.rmi.RemoteException;
/**
* 定义远程接口
*
* @author leizhimin 2009-12-9 14:11:34
*/
public interface Hello extends Remote {
/**
* 远程接口方法实现
*
* @param name 问候的人名
* @return 问候语
*/
String sayHello(String name) throws RemoteException;
}
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.rmi.PortableRemoteObject;
import java.rmi.RemoteException;
/**
* 远程接口的实现类,必须继承PortableRemoteObject类
*
* @author leizhimin 2009-12-9 14:13:46
*/
public class HelloImpl extends PortableRemoteObject implements Hello {
/**
* 必须明确的创建一个构造方法,并抛出RemoteException异常
*/
public HelloImpl() throws RemoteException {
}
/**
* 远程接口方法实现
*
* @param name 问候的人名
* @return 问候语
*/
public String sayHello(String name) throws RemoteException {
return “Hello, “ + name + “!”;
}
public static void main(String[] args) {
try {
HelloImpl hello = new HelloImpl();
//创建一个名称上下文,并绑定远程对象
Context initialNamingContext = new InitialContext();
initialNamingContext.rebind(“HelloImpl”, hello);
System.out.println(“Hello Server: Ready and Waiting…”);
} catch (Exception e) {
e.printStackTrace();
}
}
}
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.rmi.PortableRemoteObject;
/**
* 客户端应用
*
* @author leizhimin 2009-12-9 14:21:35
*/
public class HelloClient {
public static void main(String[] args) {
try {
//获取一个名称上下文
Context ic = new InitialContext();
//得到一个远程对象的引用
Object objRef = ic.lookup(“HelloImpl”);
//强制转换为一个更具体的Hello接口对象
Hello hello = (Hello) PortableRemoteObject.narrow(objRef, Hello.class);
// 调用远程对象的方法
System.out.println(“收到来自服务器的消息: “ + hello.sayHello(“张三”) + “\n”);
} catch (Exception e) {
e.printStackTrace();
}
}
}
rmic -classpath . -iiop -d . lavasoft.rmiiiop.HelloImpl
java -Djava.naming.factory.initial=com.sun.jndi.cosnaming.CNCtxFactory -Djava.naming.provider.url=iiop://localhost:9999 lavasoft.rmiiiop.HelloImpl


