`

Java之RMI设计模式基本原理与示例

    博客分类:
  • java
阅读更多
1. Name

RMI是Romote Method Invocation的缩写,就是远程方法调用。


2. Intent

具体的说,就是能够通过这种机制,实现在一个JVM上调用另一个JVM上的Java对象的方法。


3. Structure

(1)RMI Interface and Class


第一步:继承了Remote的interface

定义一个继承了Remote的interface,命名为TestRMIService。在其中有我们期望在Client端调用的方法testHello(),注意要抛出RemoteException。


第二步:继承了UnicastRemoteObject且实现了TestRMIService的class

定义一个继承了UnicastRemoteObject且实现了TestRMIService的class,命名为TestRMIServiceImpl。在其中实现testHello方法。


(2)RMI Server

第一步:

定义一个class,命名为TestServer,其中有main方法。在main方法中实例化TestRMIService一个远程对象,命名为testRMI。


第二步:

创建一个Registry,并向远程对象testRMI注册,注册名为“rmi://locahost:1234/testrmi”。


(3)RMI Client

第一步:

定义一个class,命名为TestClient,其中有main方法。查询注册


第二步:

查询注册名为“rmi://locahost:1234/testrmi”的TestRMIService远程对象,查询结果为testRMI。


第三步:

调用远程对象testRMI的方法testHello。


4. Sample Code

(1)TestRMIService

  
 package com.sinosuperman.rmi;  
      
    import java.rmi.Remote;  
    import java.rmi.RemoteException;  
      
    public interface TestRMIService extends Remote {  
        public String testHello() throws RemoteException;  
    }  


(2)TestRMIServiceImpl

   
package com.sinosuperman.rmi;  
      
    import java.rmi.RemoteException;  
    import java.rmi.server.UnicastRemoteObject;  
      
    public class TestRMIServiceImpl extends UnicastRemoteObject implements TestRMIService {  
      
        private static final long serialVersionUID = -9039976499370682232L;  
          
        public TestRMIServiceImpl() throws RemoteException {  
        }  
      
        @Override  
        public String testHello() throws RemoteException {  
            return "I'm RMI, Hello World!";  
        }  
    }  


(3)TestServer

   
package com.sinosuperman.server;  
      
    import java.net.MalformedURLException;  
    import java.rmi.AlreadyBoundException;  
    import java.rmi.Naming;  
    import java.rmi.RemoteException;  
    import java.rmi.registry.LocateRegistry;  
      
    import com.sinosuperman.rmi.TestRMIService;  
    import com.sinosuperman.rmi.TestRMIServiceImpl;  
      
    public class TestServer {  
          
        public static void main(String[] args) {  
              
            try {  
                /* Create a Remote object. */  
                TestRMIService testRMI = new TestRMIServiceImpl();  
                  
                /* Create a registry object with 1234 port. */  
                LocateRegistry.createRegistry(1234);  
                  
                /* Register the Remote object to RMI registry server, and name it as testrmi. */  
                Naming.bind("rmi://localhost:1234/testrmi", testRMI);  
                  
                System.out.println("注册远程对象成功");  
                  
            } catch (RemoteException e) {  
                System.out.println("远程对象创建异常");  
                e.printStackTrace();  
            } catch (MalformedURLException e) {  
                System.out.println("URL畸形异常");  
                e.printStackTrace();  
            } catch (AlreadyBoundException e) {  
                System.out.println("重复绑定异常");  
                e.printStackTrace();  
            }  
        }  
    }  


(4)TestClient

   
package com.sinosuperman.rmi;  
      
    import java.net.MalformedURLException;  
    import java.rmi.Naming;  
    import java.rmi.NotBoundException;  
    import java.rmi.RemoteException;  
      
    public class TestRMIClient {  
        public static void main(String[] args) {  
            try {  
                TestRMIService testService = (TestRMIService) Naming.lookup("rmi://localhost:1234/testrmi");  
                System.out.println(testService.testHello());  
            } catch (MalformedURLException e) {  
                e.printStackTrace();  
            } catch (RemoteException e) {  
                e.printStackTrace();  
            } catch (NotBoundException e) {  
                e.printStackTrace();  
            }  
        }  
    }  


5. Test

(1)运行TestServer

在Eclipse主界面的Package Explorer中你所创建的测试RMI的工程中的com.sinosuperman包中,右击TestServer,选择Run As,选择Java Application。

这时界面上会显示:

“注册远程对象成功”


(2)运行TestClient

在Eclipse主界面的Package Explorer中你所创建的测试RMI的工程中的com.sinosuperman.rmi包中,右击TestClient,选择Run As,选择Java Application。

这时界面上会显示:

“I'm RMI, Hello World!”
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics