雪湖小札@blogjava

心情与技术文档同行 http://hi.baidu.com/jingleq

BlogJava 首页 新随笔 联系 聚合 管理
  24 Posts :: 2 Stories :: 4 Comments :: 0 Trackbacks
  小试了一把用groovy来写java的rmi,体验到了groovy对java的兼容性,无论从代码上还是功能上!真的可以理groovy就是脚本化的java,groovy就是java扩衡ruby on rails的武器!
  参考了网上的经典《Java RMI 入门》,我写了两个groovy文件。因为想仿造java的文件管理方式,所以我把接口写成一个groovy文件,实现类写成一个groovy文件。虽然单个groovy文件名可以和里面的类名不一样,但是如果出现不一样的,在import关联的时候就会出现问题。
F:\grails_apps\groovy\com\c2\HelloIn.groovy
package com.c2;

import java.rmi.*;
interface HelloIn extends java.rmi.Remote {
 String sayHello() 
throws RemoteException;
}
F:\grails_apps\groovy\com\c2\Hello.groovy
package com.c2;

import java.rmi.*;
import java.net.*;
import java.rmi.registry.*;
import java.rmi.server.*;

class Hello extends java.rmi.server.UnicastRemoteObject implements HelloIn {
    Hello() 
throws RemoteException{
        
super();
    }

     String sayHello() 
throws RemoteException{
      
return "Hello,World!";
     }
 
     
     
static void main(args){
  
try{
      Hello h
=new Hello();
      Naming.rebind(
"hello",h);
      println 
"ready ";
   }
 catch(Exception e){
           e.printStackTrace();
   }

  }

}
  因为在写rmi的时候需要通过命令从.class文件中生成*_Stub.class文件,所以必须把groovy文件通过groovyc编译成.class文件,再通过命令rmic **来生成*_Stub.class。另外一个要运行groovy生成的.class文件需要加入groovy的相关包。为了使执行过程自动化,使用了ant来处理。
  在开启rmi的注册服务之后就可以通过ant来执行rmi了。开户rmi服务命令:rmiregistry
  在执行rmi的时候关键是给jvm加个参数-Djava.rmi.server.codebase=file:/F:\grails_apps\groovy\/,注意,网上挺多-Djava.server.codebase的写法,这种写法在我的试验中不能通过。
F:\grails_apps\groovy\build.xml
<project name="mygroovy-build" default="run">
    
<property environment="env"/>
    
<path id="groovy.classpath">
        
<fileset dir="C:/groovy-1.0/lib/"/>
    
</path>
    
<taskdef name ="groovyc" classname ="org.codehaus.groovy.ant.Groovyc" classpathref="groovy.classpath"/>
    
<target name="compile" description="compile groovy to bytecode">
        
<mkdir dir="classes"/>
        
<groovyc destdir="classes" srcdir="." includes="com/c2/HelloIn.groovy,com/c2/Hello.groovy" classpathref="groovy.classpath">
        
</groovyc>
    
</target>
    
<target name="mksub" depends="compile" description="make the sub">
        
<rmic classname="com.c2.Hello" base="F:/grails_apps/groovy/classes/"/>
    
</target>
    
<target name="run" depends="mksub" description="run the compiled class">
        
<java classname="com.c2.Hello" fork="true">
            
<classpath refid="groovy.classpath"/>
            
<classpath location="classes"/> 
            
<jvmarg value="-Djava.rmi.server.codebase=file:/F:\grails_apps\groovy\/" />
        
</java>
    
</target>
</project>
  可能会遇到编译时的lib问题,如果缺少什么lib就用set classpath吧~`这个问题我也有点疑惑,在另一台机器上使用<path id="groovy.classpath"><fileset dir="C:/groovy-1.0/lib/"/></path>不起作用,只能在控制台上事先用set classpath来加下包。
posted on 2007-07-19 10:43 csnowfox 阅读(1301) 评论(1)  编辑  收藏

Feedback

# re: 跑在groovy上的rmi 2007-07-21 11:47 山风小子
Groovy可以充分利用Java世界中的一切资源,这也是Groovy的一大优势 :)  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: