我們在CQ5中加載自定義適配器工廠時遇到了一些問題。適配器工廠代碼工作正常,因爲麻煩的是我們正試圖在另一個SlingServlet的@Activate階段使用它。在加載自定義適配器工廠時遇到問題
卻彷彿當激活階段的吊帶的Servlet中調用自定義適配器工廠類尚未在加載。
有沒有在其他包指定扶養已經加載的方式,或嘗試在激活功能中使用Adaptable通常是一個糟糕的主意。
我們在CQ5中加載自定義適配器工廠時遇到了一些問題。適配器工廠代碼工作正常,因爲麻煩的是我們正試圖在另一個SlingServlet的@Activate階段使用它。在加載自定義適配器工廠時遇到問題
卻彷彿當激活階段的吊帶的Servlet中調用自定義適配器工廠類尚未在加載。
有沒有在其他包指定扶養已經加載的方式,或嘗試在激活功能中使用Adaptable通常是一個糟糕的主意。
說得對 - 適配器工廠在servlet之後啓動,並且在servlet激活過程中它不可用。通常情況下,這種情況可以通過OSGi依賴管理來解決,但我們在這裏沒有明確的依賴關係,因爲servlet不是適配器工廠@Reference
,而是通過Sling適配器工廠管理器使用的。
你有三個選擇:與
@Reference(target = "(component.name=your.adapter.factory.package.name)")
如果servlet適配器工廠:
參考適配器工廠中的servlet創建一個aritficial,強兩個組件之間的依賴性被放置在不同的捆綁包中,您可以使用startlevels來控制捆綁包激活的順序。您可以通過將OSGi包到以下目錄JCR控制STARTLEVEL:
/apps/[app]/install/[startLevel]
提取從適配器工廠的邏輯,直接在servlet激活使用它,沒有adaptTo()
方法。
感謝您的建議Tomek。這證實了我的懷疑。 –
我覺得這樣做至少不是一個好主意。由於AdapterFactory不是直接引用的,而是針對從源到目標類的adaptTo註冊的。所以我不認爲你會知道如果工廠在你的servlet激活時可用。 – Thomas