2016-01-27 41 views
1

我想用戶艾斯波OSGi框架內,但我不知道內OSGi的類加載機制怎麼會允許我需要什麼來實現,甚至如何艾斯波可以在OSGi的,因爲它被使用。OSGi框架內使用艾斯波

我使用艾斯波5.3並且在束檢查體現它不使用OSGi的Dynamic-Import頭。 Esper的核心是我所理解的是在POJO上運行的SQL查詢的EPStatements。

我很難理解的是,Esper捆綁包如何不使用動態導入,並且不知道將來可能針對哪些POJO進行操作,從而獲得對它們的訪問權限。

例如,如果我試圖創建EPStatement:

select * com.example.Pojo

如果該類com.example.Pojo是另一束給艾斯波核心,然後Pojo可以裝載的唯一途徑是通過使用 ClassLoader。這可以這樣做:

Thread.currentThread().setContextClassLoader(com.example.Pojo.class.getClassLoader); 

但不這只是加載Pojo到含有POJO的本身捆綁的種類空間? Esper捆綁包如何獲得它的訪問權限,因爲它在創建上述示例EPStatement時將需要。

回答

2

你可以從使用 「addEventType(字符串eventTypeName,類事件類)」, 「epAdministrator.getConfiguration()」 來註冊類型。這樣你可以控制班級的來源。

當試圖按名稱查找類,那麼艾斯波始終使用 「Thread.currentThread()getContextClassLoader();」。你的代碼可以使用「setContextClassLoader」來設置自己的類加載器。代碼應該將其設置回來。

您可以簡單地改變隨埃斯佩爾JAR中的清單,包括任何你喜歡的。

你可以使用「朋友」束。

+0

感謝您的建議。我還嘗試通過創建一個單獨的包來加載類。它通過一個服務(我的定義)添加到系統中的新類被通知並且切換到加載程序到提供POJO的包的類。加載程序包導入所有Esper導出,因此我可以通過這種方式創建語句。我只需要在我自己的腦海中澄清一下,如果以這種方式加載,類就可以從等等中看到。 – Kerry