散佈佇列因AccessDeniedException而遭到封鎖
嘗試使用快速Publish、管理出版物或復寫來復寫頁面內容、XF或其他資源時,作者上的發佈佇列會遭到封鎖。 您可以從發佈UI (AEM >工具>部署>發佈)檢查 發佈 發佈佇列,以驗證此專案。 請依照本檔案提供的步驟解決問題。
說明 description
環境
- Experience Manager
- Experience Manager as a cloud service
問題/症狀
嘗試使用「快速Publish」、「管理出版物」或「復寫」來復寫某些頁面內容(或XF和其他型別的資源)時,作者上的發佈佇列會遭到 封鎖。
從發佈UI (AEM — 工具 — 部署 — 發佈)中檢查 發佈 發佈佇列即可觀察到:
選取Golden Publisher佇列(從清單中選取粗體專案),會提供詳細資訊,尤其是涉及的 PATH (此處可能有多個元素):
檢視 Logs 標籤會顯示下列對應錯誤:
2023/03/08 12:11:26:238 - INFO — 透過散發套件PackageMessage(pubSlingId=a1133c97-680 9-411e-a435-4eea0ecbe889, reqType=ADD, pkgId=dstrpck-1678277486031-63159f4b-c577-4079-8741-d41660597d20, pkgType=journal_filevault, pkgLength=6330, pubAgentName=publish, userId=replication-service,paths=[ /content/wknd/fr] , deepPaths=[ ] ),偏移量=158705
2023/03/08 12:11:27:459 - WARN — 訊息:無法嘗試(0/infinite)匯入散發套件PackageMessage(pubSlingId=a1133c97-6809-411e-a435-4eea0ecbe889, reqType=ADD, pkgId=dstrpck-1678277486031-63159f4b-c57 7-4079-8741-d41660597158705 d20, pkgType=journal_filevault, pkgLength=6330, pubAgentName=publish, userId=replication-service, paths=[ /content/wknd/fr] , deepPaths=[ ] ),由於「javax.jcr.AccessDeniedException: OakAccess0000000000: Access拒絕」,匯入程式將稍後重試
Stacktrace: org.apache.sling.distribution.common.DistributionException: javax.jcr.AccessDeniedException: OakAccess000:存取遭拒[ …]
您需要 清除佇列 (或移除該專案)才能解除封鎖佇列。
解決方法 resolution
儘管錯誤為 javax.jcr.AccessDeniedException,但是與發佈服務使用者的ACL /許可權可能沒有關係,但如果下列情況不適用於您的案例,則應該考慮這一點。
診斷
在某些情況下,當復寫的內容確實具有與特殊 jcr:lockIsDeep 屬性相關的特定組態時,可能會發生上述錯誤。
為了確認診斷,您必須使用下列您可以存取/適用的任何工具來檢查 每個提及的路徑:
- 適用於DEV例項的CRX/DE
- 存放庫瀏覽器
- 在「封裝管理員」中建立內容封裝(此選項也是解決方案的一部分)
然後,您需要檢查在發佈佇列UI中找到的每個路徑的 jcr:content 節點,並驗證:
- 它 有
jcr:lockIsDeep="(布林值)true" 屬性 - 它 沒有 具有
jcr:lockOwner="xxx"屬性 - ( it 在
jcr:mixinTypes中不 有mix:lockable值)
如果是這種情況,則問題已確認,因為 jcr:lockIsDeep 屬性不應單獨出現。 當 鎖定 頁面時,此屬性應一律與 jcr:lockOwner 共同設定。
即使使用JCR API,也不可能只設定 jcr:lockIsDeep 屬性,因此說明此情況的根本原因主要是安裝了包含該單一屬性的 損毀 內容封裝。
解析度
若要修正內容,唯一的解決方案是在作者中安裝套件,該套件在對應節點上設定了正確的屬性。
您可以從具有對應內容的另一個執行個體建立該套件,或者如果您在受影響的執行個體上只有此內容,則您可以遵循下列指示:
- 在中斷的執行個體上為錯誤頁面產生套件
- 下載套件
- 擷取頁面/jcr:content的
.content.xml - 手動移除含有 jcr:lockIsDeep 的行
- 使用新的/固定的.content.xml更新您的套件
- 重新上傳並安裝修改後的套件
再次檢查頁面屬性,並成功測試復寫/散發。