2014-07-15 104 views
0

我們在CQ5中加載自定義適配器工廠時遇到了一些問題。適配器工廠代碼工作正常,因爲麻煩的是我們正試圖在另一個SlingServlet的@Activate階段使用它。在加載自定義適配器工廠時遇到問題

卻彷彿當激活階段的吊帶的Servlet中調用自定義適配器工廠類尚未在加載。

有沒有在其他包指定扶養已經加載的方式,或嘗試在激活功能中使用Adaptable通常是一個糟糕的主意。

+0

我覺得這樣做至少不是一個好主意。由於AdapterFactory不是直接引用的,而是針對從源到目標類的adaptTo註冊的。所以我不認爲你會知道如果工廠在你的servlet激活時可用。 – Thomas

回答

1

說得對 - 適配器工廠在servlet之後啓動,並且在servlet激活過程中它不可用。通常情況下,這種情況可以通過OSGi依賴管理來解決,但我們在這裏沒有明確的依賴關係,因爲servlet不是適配器工廠@Reference,而是通過Sling適配器工廠管理器使用的。

你有三個選擇:與

@Reference(target = "(component.name=your.adapter.factory.package.name)") 
  • 如果servlet適配器工廠:

    1. 參考適配器工廠中的servlet創建一個aritficial,兩個組件之間的依賴性被放置在不同的捆綁包中,您可以使用startlevels來控制捆綁包激活的順序。您可以通過將OSGi包到以下目錄JCR控制STARTLEVEL:

      /apps/[app]/install/[startLevel] 
      
    2. 提取從適配器工廠的邏輯,直接在servlet激活使用它,沒有adaptTo()方法。

  • +0

    感謝您的建議Tomek。這證實了我的懷疑。 –

    相關問題