跑在groovy上的rmi

跑在groovy上的rmi
  小试了一把用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来加下包。

你可能感兴趣的:(跑在groovy上的rmi)