Unpublish Action in AEM AEM
1. Kiến trúc luồng Replication & Unpublish trong AEM 6.5
Trong mô hình Author-Publish:
- Replication Action Type:
ReplicationActionType.DEACTIVATEgửi một gói replication chứa chỉ thị xóa hoặc đánh dấu deactivation của node tương ứng trên Publish instance. - Replication Agent: Đọc payload từ hàng đợi (Replication Queue), đóng gói thành HTTP POST request (thường qua servlet
/bin/receive) gửi sang Publish. - Dispatcher Flush: Khi một node bị de-activate, Agent Flush của Dispatcher cần nhận tín hiệu để xóa file tĩnh hoặc vô hiệu hóa
.statfile tương ứng.
2. Các yêu cầu kỹ thuật & Rủi ro cần lưu ý
- JCR Mixin Type:
- Node cần có mixin
cq:ReplicationStatus(mix:versionablenếu cần kiểm soát version history trước khi xóa). - Mixin này cung cấp các thuộc tính:
cq:lastReplicated,cq:lastReplicationAction,cq:lastReplicatedBy.
- Sự tồn tại của Node trên Author sau khi Unpublish:
- Trường hợp 1 (Chỉ Unpublish): Node vẫn tồn tại trên Author nhưng bị xóa khỏi Publish. Cần cập nhật
cq:lastReplicationAction = Deactivate. - Trường hợp 2 (Unpublish rồi Xóa hẳn trên Author): Phải đảm bảo replication sang Publish hoàn tất thành công trước khi tiến hành xóa node trên Author. Nếu xóa trên Author trước, Replication Agent sẽ không tìm thấy path để tạo replication payload.
- Quyền hạn (ACLs / Service User):
- Workflow Process Step phải sử dụng
ResourceResolverFactory.getServiceResourceResolver(...)với System User có đủ quyền: jcr:read,jcr:modifyPropertiestrên path của Author.- Quyền replicate (
crx:replicate). - Quyền xóa/sửa trên Publish instance thông qua user cấu hình trong Transport của Replication Agent.
3. Thiết kế Custom Workflow Process Step
Để xử lý unpublish an toàn, ta xây dựng một OSGi Workflow Process Step bằng Java:
3.1. Java Implementation
4. Cấu hình OSGi Service User & Permissions
Để workflow chạy ổn định mà không phụ thuộc vào session của người kích hoạt (thường thiếu quyền replicate hoặc admin):
- Tạo Service User:
workflow-replication-servicethông qua Apache Sling Service User Mapper. - Cấu hình Service User Mapping (
org.apache.sling.serviceusermapping.impl.ServiceUserMapperImpl.amended):
- Phân quyền Repository (ACLs):
- Gán quyền cho principal
custom-workflow-replication-subservice: - Read, Write, Modify Properties trên thư mục chứa custom node.
- Quyền
crx:replicatetrên/hoặc trên subtree tương ứng.
5. Cấu hình Dispatcher Invalidation cho Custom Node
Khác với cq:Page tự động gửi request .stat invalidation lên thư mục HTML, custom node thường phục vụ API (JSON, XML) hoặc model dữ liệu backend:
- Dispatcher Flush Agent: Kiểm tra replication agent loại
Dispatcher Flushtrên Author hoặc Publish. - Nếu node payload nằm ngoài
/contentthông thường (ví dụ:/var/data/...), cần cấu hình custom header hoặc servlet re-flush: - Trong cấu hình
/filtervà/invalidatecủa filedispatcher.any, khai báo path của custom node: