服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

dynamic proxy 在 java rmi 中的应用

dynamic proxy 在 java rmi 中的应用
forest hou
2000年9月6日,rickard oberg (jboss 的主要作者之一) 在rmi-users 邮件组贴了一个标题为 "howto: use dynamic proxies as rmi stubs + howto: export dynammic proxies as rmi objects"  的贴子, 展示了dynamic proxy 如何用在java rmi 中。利用这项技术,程序员可以在rmi中加入各种服务 (authentication, logging, transaction 等等) 而不改变rmi的 interface。这一技术是jboss实现ejb模型的关键。本文详细介绍了这一技术。rickard曾用"smartworld"展示这一技术,并放在他的网站上供下载。遗憾的是我们今天已经无法看到smallworld了。笔者调通了rickard帖子中的例子,称之为"smallworld",在本文中讲解。读者可以下载这个例子。 
  
在rmi中加入interceptor
我非常喜欢java rmi。相对于其他的分布式对象模型 (corba, com) ,rmi 显得很轻,很简单。但是有时候程序员想在rmi中加入各种服务(service)而不改变其interface,却不是那么简单。"interceptor"作为一种重要的"design pattern"在现代软件技术中非常流行,它通常用来实现service,因此是实现framework的关键技术之一。 
下面是一个非常简单的rmi例子。我要在这个例子上加入interceptor,用以展现神奇的dynamic proxy技术。 
//: smallworld interface 
public interface smallworld extends java.rmi.remote 

    public static final string name = "smallworld"; 
    public string hello(int i) throws java.rmi.remoteexception; 
}
smallworld 是一个简单的rmi interface,其中只定义了一个方法hello()。 
//: smallworldimpl 
import java.rmi.server.*; 
import java.rmi.*; 
public class smallworldimpl extends unicastremoteobject implements smallworld 

    public smallworldimpl() throws remoteexception { 
        super(); 
    } 
    public string hello(int i) throws java.rmi.remoteexception 
    { 
        system.out.println("in smallworldimpl i = " + i); 
        return ("hello number=" + i); 
    } 
}
smallworldimpl是smallworld interface 的实现。这是一个再标准不过的rmi实现,你可以在任何rmi教科书中找到类似的例子。 
client的实现如下: 
//: client 
import java.rmi.*; 
public class test 

    public static void main(string[] args) 
    {
   try { 
           smallworld he =(smallworld)naming.lookup(smallworld.name); 
          system.out.println(he.hell

扫描关注微信公众号