我正在設計一個能夠執行自定義代碼或用戶上傳的預編譯類的java web應用程序,主要集中在對數據集的簡單驗證。 自定義類必須被約束到預定義的接口,並且只有一些庫和類必須可用於自定義類。在java webapp中動態加載類的最佳方法是什麼?
我的第一個解決方案是使用自定義的Classloader能夠從文件系統中定義的目錄加載.jar文件。這種方法似乎可行,但我擔心此解決方案的安全性和兼容性。
是否可以限制自定義類可以導入的類並在沙箱中運行代碼以避免某些操作(如打開文件或套接字)?
當加載的類將被卸載?
應用程序像Weblogic這樣的服務器對使用自定義類加載器有一些限制嗎?
我已經評估過其他解決方案,如OSGi Bundles,但它看起來非常複雜,並且支持在某些應用程序服務器中也受到限制,我也不確定OSGi是否適合此特定用法。像Groovy或JavaScript這樣的嵌入式腳本語言被丟棄,因爲項目所有者需要預編譯並使用Java編寫自定義代碼。
你會爲這個問題推薦什麼?
大多數外部代碼將是一個或兩個類。它建議有一個Bundle有多個類或可以創建只有一個類的包? –
每捆有多少個類並不重要。 OSGi指南通常會建議您將接口放在一個包中,並在其他接口中實現。 – Boj