2011-07-20 115 views
3

我正在開發一個經常啓動的Groovy shell腳本(執行相當小的任務),因此我需要一個快速的JVM啓動時間。爲了實現這一點,我試圖用Nailgun來啓動它。如何使用Nailgun服務器啓動Groovy腳本(或Java類)

我已經安裝Nailgun作爲Ubuntu軟件包。然後我通過鏈接/usr/bin/ng-server/usr/bin/ng來修復argument bug。我開始了Nailgun - 服務器這樣的:

java -cp /usr/share/java/nailgun-0.7.1.jar -server com.martiansoftware.nailgun.NGServer 

我有這個簡單的虛擬命名hello.groovy Groovy腳本只是爲了測試nailgun服務器:

#!/usr/bin/env groovy 
def sayHello() { 
    println("Hello Groovy!"); 
} 

sayHello(); 

我編譯用groovyc文件到hello.class。

現在我想在Nailgun服務器中啓動該腳本。我天真的辦法做到這一點是:

ng hello 
ng hello.sayHello 

但我得到的是ClassNotFoundExceptions:

java.lang.ClassNotFoundException: hello 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:169) 
    at com.martiansoftware.nailgun.NGSession.run(Unknown Source) 

那麼,什麼是啓動我的Groovy腳本與Nailgun服務器的正確方法?我也很感激有關如何使用Nailgun一些好的網站/教程,這真的很難得到任何信息,如何使用它......

編輯:

我還希望一個完整的例子(包括如何使用ng調用特定的類),因爲我可能無法使用任何Java類來使用nailgun。

+1

對於任何人:有一個在https://github.com/flatland/drip可能在有些情況下使用起來更實用,因爲它的概念非常簡單ifily(Nailgun重用了一個JVM,隨着時間的推移,它會變得越來越髒,而Drip一直在產生乾淨的新JVM) – ifischer

回答

5

終於得償所願。我只是不明白,我必須首先將所有需要的類添加到Nailgun類路徑(this SO question給了我最後的提示)。

首先,添加的Groovy到classpath:

ng ng-cp /usr/share/java/groovy-all.jar 

然後加入含有Groovy腳本/ Java類的類路徑的目錄,在我的情況是:

ng ng-cp /home/$USER/tools/groovy 

現在我可以像這樣用Nailgun運行我的Groovy腳本:

ng hello 
0

我認爲jruby.org具有最新的參考這個久違的武器(其中有一天甲骨文應該承擔,因爲低迷的冷啓動是大多數新的鳥類的阿喀琉斯之踵)

你groovyc的你的腳本進入類?

然後「NG ......你好」與常規的類路徑上

我猜瞎(懶得使用RVM保持JRUBY後重新安裝磁軌炮)

+0

是的,我喜歡這個類,但它沒有什麼區別。感謝JRuby提示。 JRuby似乎將Nailgun服務器直接包含在運行時中。不幸的是,這並不能幫助我得到Nailgun運行groovy或java代碼。 – ifischer

0

如果你所運行的hello是h ello.groovy(解釋) 而不是編譯下來的你好。類

不是一個可持續的解決方案 他們應該有一個JSR 用於熱啓動客戶端JVM

使JVM在客戶端模式開始進入後臺守護進程,等待產生一個java程序,並清除所有的illusories業績不佳的Java一直忍着

當然爲了安全着想的

,生產將採用Nailgun始終使用全熱點

+0

不是我的問題的答案。但是,Nailgun實際上正在運行編譯的.class。所以我爲我的groovy腳本構建了一個shell腳本作爲啓動器,它會重新編譯腳本,並在需要時重新啓動/重新加載腳本爲nailgun。編譯後的第一次運行後,可以在沒有JVM啓動時間的情況下重新運行。對我的用例足夠了。 – ifischer

相關問題