小試了一把用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來加下包。
參考了網上的經典《Java RMI 入門》,我寫了兩個groovy文件。因為想仿造java的文件管理方式,所以我把接口寫成一個groovy文件,實現類寫成一個groovy文件。雖然單個groovy文件名可以和里面的類名不一樣,但是如果出現不一樣的,在import關聯的時候就會出現問題。
F:\grails_apps\groovy\com\c2\HelloIn.groovy














































在開啟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





















