在AEM 6.5 LTS上使用jakarta.annotation.PostConstruction的Sling模型失敗

AEM 6.5 LTS上的Sling模型使用jakarta.annotation.PostConstruct時無法初始化,這會使建構後邏輯無法執行並中斷元件行為。 更新模型以使用javax.annotation.PostConstruct會還原適當的初始化和預期的元件功能。

若要解決此問題,請將Sling模型還原為javax.annotation.PostConstruct

說明 description

環境

  • Adobe Experience Manager (AEM) Managed Services
  • 含Sling模型的AEM 6.5 LTS

問題/症狀

  • @PostConstruct切換後,Sling模型jakarta.annotation.PostConstruct方法沒有執行。
  • 依賴建構後邏輯的元件無法轉譯或行為正確。
  • 模型部署成功,但初始化邏輯無法執行。

根本原因

AEM 6.5 LTS不完全支援使用jakarta.annotation名稱空間的Sling模型。 Sling模型實作只辨識javax.annotation.PostConstruct,因此在模型初始化期間不會執行jakarta.annotation.PostConstruct方法。

解決方法 resolution

解決步驟:

  1. 更新所有Sling模型類別以使用javax.annotation.PostConstruct而非jakarta.annotation.PostConstruct
  2. 從所有Sling模型類別中移除與jakarta.*相關的所有@PostConstruct匯入。
  3. 檢閱您的專案相依性(例如pom.xml),並確認僅將javax相依性用於Sling模型相關的註解。
  4. 重建專案以確保相依性和匯入變更正確套用。
  5. 部署更新的程式碼,並確認包含Sling模型的套件組合在 中處於 作用中/system/console/bundles狀態。
  6. 確認所有Sling模型類別都列在/system/console/status-slingmodels.
  7. 確認已成功叫用@PostConstruct 方法,且元件如預期般運作。

附註:

  • AEM 6.5 LTS不支援移轉到jakarta.*名稱空間(包括jakarta-based @PostConstruct)的Sling成品。
  • 此行為會與AEM WKND Sites專案之類的參考實作一致,此專案會繼續在AEM 6.5 LTS上使用javax.annotation.PostConstruct

相關閱讀

recommendation-more-help
3d58f420-19b5-47a0-a122-5c9dab55ec7f