2013-11-04 31 views
1

我正在設計一個能夠執行自定義代碼或用戶上傳的預編譯類的java web應用程序,主要集中在對數據集的簡單驗證。 自定義類必須被約束到預定義的接口,並且只有一些庫和類必須可用於自定義類。在java webapp中動態加載類的最佳方法是什麼?

我的第一個解決方案是使用自定義的Classloader能夠從文件系統中定義的目錄加載.jar文件。這種方法似乎可行,但我擔心此解決方案的安全性和兼容性。

是否可以限制自定義類可以導入的類並在沙箱中運行代碼以避免某些操作(如打開文件或套接字)?

當加載的類將被卸載?

應用程序像Weblogic這樣的服務器對使用自定義類加載器有一些限制嗎?

我已經評估過其他解決方案,如OSGi Bundles,但它看起來非常複雜,並且支持在某些應用程序服務器中也受到限制,我也不確定OSGi是否適合此特定用法。像Groovy或JavaScript這樣的嵌入式腳本語言被丟棄,因爲項目所有者需要預編譯並使用Java編寫自定義代碼。

你會爲這個問題推薦什麼?

回答

0

OSGi非常適合希望接受外部代碼(插件)的應用程序。您提到的所有需求(預定義的接口,加載罐,多個類加載器)都覆蓋了OSGi服務和捆綁管理。包可以安裝,啓動,停止,卸載等,包括運行時。

Web應用程序服務器中的OSGi支持不是really that limited。你甚至可以考慮一個OSGi框架embedding

安全方面,您將需要圍繞security managers解決方案。

+0

大多數外部代碼將是一個或兩個類。它建議有一個Bundle有多個類或可以創建只有一個類的包? –

+0

每捆有多少個類並不重要。 OSGi指南通常會建議您將接口放在一個包中,並在其他接口中實現。 – Boj

相關問題