2010-04-27 40 views
3

我有一個要求動態創建java類,並使其可以訪問整個網絡中的不同jvms。我試圖使用反射和javassist工具,但沒有任何工作。讓我來解釋我們使用Coherence分佈式緩存的場景 。它具有在羣集中並行進行聚合/過濾的功能。例如,如果一個類有[動態類]有量變量和getAmount/setAmount方法。然後,如果我們執行COHERENCE查詢,它將在羣集中並行開始處理。動態創建java類,並使其可以通過網絡訪問不同的jvms,即可序列化

我試着在運行時使用javassist和reflection創建類。我可以從單個JVM訪問它,但是當我嘗試從其他jvm [通過連貫集羣]訪問同一個類時。我沒有找到類的異常[因爲遠程jvm沒有這個類的想法]。我可以通過在遠程jvm上動態創建相同的類來訪問這些方法。但是構建方法/函數的一致性無法找到這個類。 可能有人幫助我在這個問題上

+0

我回答過去類似的事情,這並不容易,但可以做到。但我寧願改變的要求,如果我是你:) http://stackoverflow.com/questions/15090069/sending-java-object-of-an-unknown-class/15090966#15090966 – MarianP 2014-06-17 15:39:19

回答

0

您可以複製由javassist創建的字節數組,並通過線路發送此字節數組並通過自定義ClassLoader加載此字節數組。這樣,該類將在所有JVM上表示。

0

創建的新類必須可用於羣集的所有節點。這意味着新創建的字節碼必須在每個節點的JVM的classpath/classloader上得到。我腦海中最簡單的方法是將生成的類放在共享網絡驅動器上,並讓所有JVM指向它們的類路徑中的共享網絡位置。每次JVM找到對新類的引用時,都應該從網絡共享中動態加載它。

相關問題