Chinaunix首页 | 论坛 | 博客
  • 博客访问: 542583
  • 博文数量: 855
  • 博客积分: 40000
  • 博客等级: 大将
  • 技术积分: 5005
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-16 19:08
文章分类

全部博文(855)

文章存档

2011年(1)

2008年(854)

我的朋友

分类:

2008-10-16 19:11:55

    RMI是从JDK 1.1开始就出现的API功能,它让客户端在使用远程对象所提供的服务时,就如何使用本地对象一样,然而RMI在使用时必须一连串繁复的手续,像是服务介 面在定义时必须继承java.rmi.Remote接口、服务Server在实作时必须继承java.rmi.UnicastRemoteObject类 别、必须使用rmic产生stub与skeleton等等。 透过org.springframework.remoting.rmi.RmiServiceExporter,Spring 简化了这些手续,来实际看看例子,了解Spring在RMI上的使用与简化,首先定义服务对象的接口:
     ISomeService.java
    package onlyfun.caterpillar; public interface ISomeService {     public String doSomeService(String some);     public void doOtherService(int other); }
    可以看到服务对象的接口不用继承java.rmi.Remote界面,而在实作时也不用继承java.rmi.UnicastRemoteObject,例如:
    SomeServiceImpl.java
    package onlyfun.caterpillar; public class SomeServiceImpl implements ISomeService {     public String doSomeService(String some) {         return some + " is processed";     }         public void doOtherService(int other) {         // bla.. bla     } }
    接下来在伺服端,您只要在Bean定义档中定义,让Spring管理、生成Bean,即可注册、启动RMI服务,例如:rmi-server.xml
     
   
    
          
             
       

          
            SomeService 
       

        
             onlyfun.caterpillar.ISomeService 
       

           

    

    很简单,只要告诉org.springframework.remoting.rmi.RmiServiceExporter服务对象、名称与要代理的接口,之后Spring读取完定义文件并生成Bean实例后,RMI服务就会启动。 接下来看看客户端要如何实作,只要透过org.springframework.remoting.rmi.RmiProxyFactoryBean,并告知服务的URL、代理的接口即可,就好像在使用本地端管理的服务一样,例如Bean定义档可以如下撰写:
    rmi-client.xml
   
          "">

   
                      class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
           
                rmi://localhost/SomeService
           

           
                onlyfun.caterpillar.ISomeService
           

       

   
以下是个简单的客户端呼叫远程服务的例子:
    ....
            ApplicationContext context =
                    new FileSystemXmlApplicationContext("rmi-client.xml");

            ISomeService service = (ISomeService) context.getBean("someServiceProxy");

            String result = service.doSomeService("Some request");
            System.out.println(result);
    ....

【责编:landy】

--------------------next---------------------

阅读(303) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~