Java RMI远程方法调用
2009-11-19 23:02
253 查看
一直想弄懂java远程方法调用,却始终没有写代码实现。一天终于看了Sun公司关于rmi的文章及示例,终于明白了远程方法调用该怎么写。以下是全部代码。
1.暴露给客户端的服务接口
其实这个接口就一个方法,她继承了远程Remote这个借口,要为远程调用必须实现这个接口。
2.IHelloWorld的实现类Helloworld,是接口的一个实现
该类的实现就是简单的采用日志的形式输出调用信息。
3.服务器端代码HelloWorldServer
4.客户端代码HelloWorldClient
5.最后rmic rmi.HelloWorld生成Stub和Skeleton,
启动服务器:java -classpath . -Djava.naming.factory.initial=com.sun.jndi.cosnaming.CNCtxFactory -Djava.naming.provider.url=iiop://localhost:1050 rmi.HelloWorldServer
启动客户端:java -classpath . -Djava.naming.factory.initial=com.sun.jndi.cosnaming.CNCtxFactory -Djava.naming.provider.url=iiop://localhost:1050 rmi.HelloWorldClient
1.暴露给客户端的服务接口
package rmi; import java.rmi.Remote; import java.rmi.RemoteException; /** * 暴露的接口 * */ public interface IHelloWorld extends Remote{ String sayHello(String from)throws RemoteException; }
其实这个接口就一个方法,她继承了远程Remote这个借口,要为远程调用必须实现这个接口。
2.IHelloWorld的实现类Helloworld,是接口的一个实现
package rmi; import java.rmi.RemoteException; import java.util.logging.Logger; import javax.rmi.PortableRemoteObject; /** * 远程方法对象 * */ public class HelloWorld extends PortableRemoteObject implements IHelloWorld { Logger log = Logger.getLogger(HelloWorld.class.getName()); protected HelloWorld() throws RemoteException { super(); } @Override public String sayHello(String from) throws RemoteException{ String info = "Say hello from " + from; log.info(info); return info; } }
该类的实现就是简单的采用日志的形式输出调用信息。
3.服务器端代码HelloWorldServer
package rmi; import java.rmi.RemoteException; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; /** * RMI服务器 * */ public class HelloWorldServer { public static void main(String[] args) throws RemoteException, NamingException{ System.out.println("Starting HelloWorldServer..."); //步骤一:实例化服务对象 IHelloWorld helloworld = new HelloWorld(); //步骤二:使用jndi发布服务 Context nameContext = new InitialContext(); nameContext.rebind("HelloWorldService", helloworld); System.out.println("Started and ready..."); } }
4.客户端代码HelloWorldClient
package rmi; import javax.naming.Context; import javax.naming.InitialContext; import javax.rmi.PortableRemoteObject; /** *RMI 远程方法调用客户端 * */ public class HelloWorldClient { /** * @param args */ public static void main(String[] args) { Context ic; IHelloWorld helloworld; Object ref; try{ ic = new InitialContext(); //查找服务 ref = ic.lookup("HelloWorldService"); //narrow服务对象 helloworld = (IHelloWorld)PortableRemoteObject.narrow(ref, IHelloWorld.class); String info = helloworld.sayHello("Client"); System.out.println("Info:"+info); }catch(Exception ex){ ex.printStackTrace(); } } }
5.最后rmic rmi.HelloWorld生成Stub和Skeleton,
启动服务器:java -classpath . -Djava.naming.factory.initial=com.sun.jndi.cosnaming.CNCtxFactory -Djava.naming.provider.url=iiop://localhost:1050 rmi.HelloWorldServer
启动客户端:java -classpath . -Djava.naming.factory.initial=com.sun.jndi.cosnaming.CNCtxFactory -Djava.naming.provider.url=iiop://localhost:1050 rmi.HelloWorldClient
相关文章推荐
- Java RMI 框架(远程方法调用)
- 学习笔记:JAVA RMI远程方法调用简单实例
- Java RMI 框架(远程方法调用)
- 学习笔记:JAVA RMI远程方法调用简单实例
- JAVA RMI远程方法调用简单实例
- Java RMI 框架(远程方法调用)
- Java RMI 框架(远程方法调用)
- Java RMI 框架(远程方法调用)
- Java RMI 框架_远程方法调用(2016-08-16)
- Java RMI 框架(远程方法调用Remote Method Invoke)
- java RMI远程方法调用编程模型初探
- 学习笔记:JAVA RMI远程方法调用简单实例
- 学习笔记:JAVA RMI远程方法调用简单实例
- Java RMI (Remote Method Invoke 远程方法调用)
- Java RMI 远程方法调用 (Remote Method Invocation)
- JAVA RMI远程方法调用简单实例
- Java RMI 框架(远程方法调用)
- Java RMI-远程方法调用
- JAVA RMI 远程方法调用简单实例