JR 精品文章 - Candle点亮你的Web应用(CandleRMI)
AD: jr (at) javaresearch.org


首页 | 动态 | 文章 | FAQ  | 新闻 | 下载 | 代码 | 工作 | 调查 | 术语 | 站点 | 图书 | 论坛 | 帮助 | 全部  

TOP | 交流 | 软件 | 专栏 | 开源 | 译/著 | 源码 | API  | 推荐 | FTP  | 积分 | 统计 | 搜索 | Blog | 我们  
首页 » 研究文集 » 其它 搜索标题相关文章 搜索标题相关文章    评论此文章 发表评论     开始监控此文章 开始监控   加入收藏夹  加入收藏夹
Candle点亮你的Web应用(CandleRMI)
efly 原创   更新:2004-06-28 09:17:08  版本: 1.0   

Introduction


CandleRMI是Java远程方法调用(Remote Method Invocation)的实现,与Sun RMI的实现方式不同,CandleRMI利用Java本身的特性并结合HTTP实现了简单高效的RMI功能。CandleRMI Service 作为Candle Services的一部分,与Candle Server整合在一起。

CandleRMI Facilities


•    不需要生成Stub和Skel文件
•    通过文本的方式注册RMI,不需要单独的注册服务和在程序中实现绑定
•    远程接口和实现不需要继承特殊的类或接口
•    最小资源利用,开发和部署方便

CandleRMI Architecture




CandleRMI体系结构图中最核心的是中间Remote与Service如何通讯。通讯内容通过HTTP协议以时间顺序分别为:名字查询(Lookup),返回远程对象(Remote Object),方法调用(Method Invoke)和方法返回(Return)。上述四个通讯内容按照HTTP通讯协议的标准封装在两个客户端请求中。

RMI Remote


远程接口封装和定义远程方法。接口是公开的,隐藏了具体的实现部分。Client只能使用接口,接口的设计必须符合规范,并且需要封装必须的远程方法。对于实际的应用来说,远程接口可能按照系统功能模块来分有许多个。一个简单的接口如下:

package cn.candle.demo;

import java.rmi.RemoteException;

/**
 * @author zhouj
 * 
 */
interface Compute {
    public String calculate(Double d, String[] args) throws RemoteException;
}

远程接口看上去和一般的接口定义没有任何不同,但是远程方法需要抛出一个远程异常,并且方法参数和返回参数必须是可序列化的对象类。目前版本的CandleRMI并不能把prototype映射为相应的对象类,比如例子中的参数"Double d",不能定义成"double d"。

远程接口实现在Server端利用Server VM的资源为Remote提供资源服务和运算。CandleRMI 体系结构图中,远程接口实现类对象需要传递,因此远程接口实现必须是可序列化的对象类。这些规则约束与Sun RMI并没有多大不同,只不过是一个更简单的版本。理解规则以后,编码和运行才能避免常见错误。远程接口具体实现例子如下:

package cn.candle.demo;

import java.io.Serializable;

/**
 * @author zhouj
 *  
 */
public class ComputeImpl implements Compute, Serializable {

    /*
     * 
     * @see cn.candle.demo.Compute#calculate
     */
    public String calculate(Double d, String[] args) {
        double _d = Math.sqrt(d.doubleValue());
        return "Square root of " + d.doubleValue() + " is " + _d + " at "
                + args[1];
    }
}


Invoke Remote Method


远程接口和实现是开发的重点和核心部分,接下来如何使用远程接口并调用其中的远程方法呢?在Sun RMI规范中有JNDI Naming来帮助查找远程服务;CandleRMI使用类似的规则查询远程接口对应的名称,不过远程接口实现都是在固定的Server上,因此并不需要JNDI命名规则。使用CandleRMI部署你的远程方法调用,开发包是candle0.76版本中的candle-rmi.jar。例子代码如下:

package cn.candle.demo;

import java.rmi.NotBoundException;
import java.rmi.RemoteException;

import cn.candle.rmi.Naming;

/**
 * @author zhouj
 *  
 */
public class TestRMI {

    public static void main(String[] args) {
        Compute compute = null;
        try {
            compute = (Compute) Naming.lookup("Compute");
        } catch (RemoteException e) {
            // TODO 自动生成 catch 块
            e.printStackTrace();
        } catch (NotBoundException e) {
            // TODO 自动生成 catch 块
            e.printStackTrace();
        }
        try {
            System.out.println(compute.calculate(new Double(3), new String[] {
                    "", "Test" }));
        } catch (RemoteException e1) {
            // TODO 自动生成 catch 块
            e1.printStackTrace();
        }
    }
}

RMI Registry


RMI注册是把远程接口和实现与自定义的名称关联起来。上述例子中远程接口cn.candle.demo.Compute对应的名称是"Compute",可以定义成任意不重复的名字。注意CandleRMI规则中远程服务名称是英文不区分大小写。CandleRMI注册是使用文本文件的方式,固定的文件名称和相对路径为WEB-APP/rmi.registry。文件为普通的Java 资源文本文件,格式如下:

#CandleRMI Registry
compute=cn.candle.demo.ComputeImpl

Run CandleRMI Example


本例运行结果如下图:


如何使用Candle,相关文章链接

 
Candle点亮你的Web应用(Getting Started)

新版本Candle下载


candle-bin.zip


版权声明   给作者写信
本篇文章对您是否有帮助?  投票:         投票结果:     8       0
作者其它文章: 作者全部文章

这个文章共有 0 条评论
主题: J2ME网络应用程序性能探讨 上一篇文章
返回文章列表 返回〔其它〕
下一篇文章 主题: Java发展展望


文字广告链接
        自主、快速定制基于JAVA的B/S业务系统          重量级企业在线自定义WEB报表平台
        Excel制表、零代码发布、打印、图表结合——快逸报表,免费、稳定、功能强大的java工具
        技术圈: 关于Java、dotNet、PHP、Ruby、奇客、Web2.0等更多资讯博客精选文章

关于 JR  |  版权声明  |  联系我们 

©2002-2006 JR 版权所有 沪ICP备05019622号