2012-05-21 22 views
0

我正嘗試在JRuby和Java應用程序之間創建一個混合,以便一次可以遷移單個組件。我試圖現在做的是非常簡單的,這裏是Ruby類: 需要的Java「如何在Java Web項目中部署Ruby類

java_package 'eu.netprophecy.test' 

class RubyViewModel 
    java_signature 'String getGreeting()' 
    def getGreeting 
    puts "Hello, ZK, from Ruby!" 
    end 
end 

我希望能夠利用這個視圖模型從ZK項目:

<?page title="Hello, Ruby!" contentType="text/html;charset=UTF-8"?> 
<zk> 
<window title="Hello Ruby!!" border="normal" width="200px"  apply="org.zkoss.bind.BindComposer" 
    viewModel="@id('vm') @init('eu.netprophecy.test.RubyViewModel')"> 

<label value="@load(vm.greeting)"/> 

</window> 
</zk> 

我試着用marbler創造一個罐子,但在前面加上項目名稱放在與Java字節碼的.class文件中的目錄,與預期的封裝結構搞亂(在這種情況下,我得到EJB/EU/netprophecy /測試/ RubyViewModel,這意味着我無法在Java代碼中使用生成的Java類)。

有誰知道這是可能的話,如果有更好的方法來做到這一點,,或者如果我有手動創建的jar?

回答

0

你需要從你的ruby類生成一個java類,這是完全可能的(即使沒有預編譯)與become_java!,只要確保ruby腳本在視圖呈現之前得到執行(或編譯我不確定你在用什麼)。

class RubyViewModel 
    java_signature 'String getGreeting()' 
    def getGreeting 
    puts "Hello, ZK, from Ruby!" 
    end 
end 

require 'jruby/core_ext' 
RubyViewModel.become_java! # returns a java.lang.Class 

你可能要檢查的方法有使用(Java的方式):

RubyViewModel.java_class.getDeclaredMethods.map { |method| method.to_s } 
+0

我已經擁有了Java字節碼,問題的方式,是一種非JRuby的內部使用的包裝它戰爭...... – Kjir

+0

對不起,你應該細化你的問題,因爲它是沒有辦法清楚地知道,你所提到的:「我無法使用類在Java代碼」 我想與您的評論這是一個有點「複雜」在這一點上回答你要找的東西。如何啓動一個嵌入式jruby容器,正確設置它來從你打包的地方加載腳本,然後生成字節碼,確保Web應用程序的類加載器能夠看到生成的類? – kares

+0

我還提到我創建了一個有鶯的jar:「我試着用marbler創建一個jar,但是它把類放在一個項目名前面的目錄中,與預期的包結構混淆」 但我會嘗試澄清。 – Kjir