WEB开发网
开发学院软件开发Java JavaRMI-IIOP入门 阅读

JavaRMI-IIOP入门

 2007-12-23 12:25:47 来源:WEB开发网   
核心提示:jdeveloper RMI-IIOP出现以前,只有RMI和CORBA两种选择来进行分布式程序设计,JavaRMI-IIOP入门,RMI-IIOP综合了RMI 和CORBA的优点,克服了他们的缺点, 建立f: mi_iiop目录,把Hello.java和HelloImpl.java拷贝到该目录中,使得程序员能更方便

  jdeveloper

    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;

(出处:http://www.cncms.com)


Tags:JavaRMI IIOP 入门

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接