Comparing Sling Resource API and JCR Node API for repository CRUD operations.
JCR Node Operations
1. Hai API Làm Việc Với JCR Node
Nguyên tắc: Dùng Sling Resource API cho mọi CRUD thông thường. Chỉ xuống JCR API khi cần: node ordering, versioning, workspace copy.
2. Tạo Node
Sling API (khuyến nghị)
JCR API
Lưu ý AEM 6.5:
ResourceResolvervàSessionlấy từ service user, không dùng admin session trong production. Khai báo service user mapping trong OSGi configorg.apache.sling.serviceusermapping.impl.ServiceUserMapperImpl.amended~myproject.cfg.jsondướiui.config.
3. Đọc Properties
Sling API — ValueMap
JCR API — Node
Bảng kiểu dữ liệu
4. Cập Nhật Properties
Sling API — ModifiableValueMap
JCR API
Lưu ý:
adaptTo(ModifiableValueMap.class)trả vềnullkhi service user thiếu quyềnjcr:writetrên path đó. Kiểm tra ACL trong CRX/DE:/home/users/system/<service-user>.
5. Xóa Node
Sling API
JCR API
Xóa nhiều node trong vòng lặp — tránh ConcurrentModificationException
6. Move và Copy
Move (atomic, cần save)
Copy (immediate, không cần save)
7. Duyệt Cây Node
Lên/xuống/ngang
Tìm node config theo cây cha (inheritance pattern)
Dùng khi config được set ở page cha và cần tìm từ page con đi lên:
Duyệt đệ quy toàn bộ subtree
Cảnh báo: Duyệt đệ quy trên cây lớn (DAM,
/content) có thể gây OOM. Luôn giới hạn depth hoặc dùng QueryBuilder thay thế.
8. Sắp Xếp Thứ Tự Child Node
Mặc định nt:unstructured và cq:Page giữ thứ tự insertion. Có thể sắp xếp lại bằng JCR API:
Sling Resource API không hỗ trợ node ordering. Bắt buộc dùng JCR API cho tính năng này.
9. Versioning
AEM 6.5 dùng JCR versioning để quản lý lịch sử nội dung. Node cần có mixin mix:versionable.
Lưu ý:
vm.restore()ghi đè nội dung hiện tại. Dùng cẩn thận trong môi trường production. Versioning chỉ áp dụng cho node có mixinmix:versionable(mặc định có trêncq:PageContent).
10. Batch Operations
Khi update hàng nghìn node, không save sau mỗi thay đổi — sẽ rất chậm và gây nhiều transaction nhỏ.
Chọn batch size:
- Node thông thường: 1000
- Node có binary property lớn: giảm xuống 100–200
- Groovy Console: dùng built-in batching utilities của Groovy Console