在AEM中是否有一种有效的修改版本的方法
我们希望实现一个流程,在修改该对象时创建页面或资产的版本。有没有一种方法可以在CQ5 ootb中进行设置,或者这需要一个自定义的事件处理程序?您将获得很多版本,因为每次在上下文中或通过对话框更改组件时,都会抛出一个修改事件。这与“修改时的卷展栏”相同,给作者带来了很大的负担 我也会考虑它会占用多少磁盘空间 您可以设置在修改时触发的工作流,并在其中使用CreateVersioningProcess步骤拍摄版本快照在AEM中是否有一种有效的修改版本的方法,aem,Aem,我们希望实现一个流程,在修改该对象时创建页面或资产的版本。有没有一种方法可以在CQ5 ootb中进行设置,或者这需要一个自定义的事件处理程序?您将获得很多版本,因为每次在上下文中或通过对话框更改组件时,都会抛出一个修改事件。这与“修改时的卷展栏”相同,给作者带来了很大的负担 我也会考虑它会占用多少磁盘空间 您可以设置在修改时触发的工作流,并在其中使用CreateVersioningProcess步骤拍摄版本快照 或者,如果您希望根据时间或其他指标连接修改,那么我将采用自定义事件处理程序。我对AE
或者,如果您希望根据时间或其他指标连接修改,那么我将采用自定义事件处理程序。我对AEM还比较陌生,但在过去25年中我一直在IT行业工作。我的建议是在AEM中实现一个JCRlistener,并将该信息(即,修改节点并进行过滤/不进行过滤)保留在不同的系统(DBMS)上 我能够相当容易地将侦听器作为OSGI包实现(尽管我在绑定和取消绑定方法方面遇到了一些问题)。请在下面找到一个完整的(不包括持久性)工作Java类:
package com.dlwconsulting.mywebsite;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.observation.Event;
import javax.jcr.observation.EventIterator;
import javax.jcr.observation.EventListener;
import javax.jcr.observation.ObservationManager;
import org.apache.felix.scr.annotations.*;
import org.apache.sling.jcr.api.SlingRepository;
import org.apache.sling.api.SlingConstants;
import org.osgi.service.event.EventAdmin;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;
import java.util.Dictionary;
@Component(immediate=true, metatype=false, description = "Wim's JCRListener")
@Service
public class JCRListenerImplementator implements EventListener{
private static final Logger LOGGER = LoggerFactory.getLogger(JCRListenerImplementator.class);
private Session session;
private ObservationManager observationManager;
private static final String NODE_TREE = "/content/geometrixx-outdoors";
@Reference
private SlingRepository slingRepository;
// @Reference(policy = ReferencePolicy.STATIC, cardinality = ReferenceCardinality.MANDATORY_UNARY)
// private SlingRepository slingRepository;
/* public void bindEventAdmin (EventAdmin eventAdmin) {
this.eventAdmin = eventAdmin;
}
public void unbindEventAdmin() {
this.eventAdmin = null;
} */
public void bindSlingRepository (SlingRepository slingRepository) {
this.slingRepository = slingRepository;
}
public void unbindSlingRepository(SlingRepository slingRepository) {
this.slingRepository = null;
}
@Activate
public void start() {
LOGGER.info(">>>Delaware: started JCRListenerImplementator.activate()");
try {
LOGGER.info(">>>Delaware: Inside Try!");
session = slingRepository.loginAdministrative(null);
if (slingRepository.getDescriptor(SlingRepository.OPTION_OBSERVATION_SUPPORTED).equals("true")) {
observationManager = session.getWorkspace().getObservationManager();
// final String[] types = {"nt:unstructured","sling:OrderedFolder"};
// final String path = "/content/customer";
observationManager.addEventListener(this, Event.NODE_ADDED, NODE_TREE, true, null, null, false);
observationManager.addEventListener(this, Event.PROPERTY_CHANGED, NODE_TREE, true, null, null, false);
LOGGER.info(">>>Delaware : EventListeners added");
}
else {
LOGGER.info(">>>Delaware : No OBSERVATION SUPPORTED");
}
} catch (RepositoryException e) {
LOGGER.info("Exception in JCRListenerImplementator.activate()");
// throw new RepositoryException (e);
}
}
@Deactivate
public void stop() {
LOGGER.info(">>>Delaware: started JCRListenerImplementator.deactivate()");
try {
if(observationManager != null) {
observationManager.removeEventListener(this);
}
if (session != null) {
session.logout();
session = null;
}
} catch (RepositoryException e) {
LOGGER.info("Exception in JCRListenerImplementator.activate()");
// throw new RepositoryException (e);
}
}
// @Reference
// private EventAdmin eventAdmin;
/** The job topic for my events. */
public static final String JOB_TOPIC = "com/sling/eventing/WimsTopic";
// @Override
public void onEvent(EventIterator events) {
LOGGER.info(">>>Delaware: started JCRListenerImplementator.onEvent()");
while(events.hasNext()){
Event e = events.nextEvent();
try {
LOGGER.info(">>>Delaware: Event " + e.getPath() + " has occurred!");
LOGGER.info(">>>Delaware: >>>Event Identifier = " + e.getIdentifier());
LOGGER.info(">>>Delaware: >>>Event UserData = " + e.getUserData());
LOGGER.info(">>>Delaware: >>>Event date = " + e.getDate());
LOGGER.info(">>>Delaware: >>>Event type = " + e.getType());
Map<String, Object> m = e.getInfo();
for (Map.Entry<String, Object> entry : m.entrySet()) {
String key = entry.getKey();
Object value = entry.getValue();
LOGGER.info(">>>Delaware: >>>Event Info Key = " + key);
LOGGER.info(">>>Delaware: >>>Event Info Value = " + value);
}
final Dictionary<String,Object> properties = new Hashtable();
properties.put("name", "my name");
properties.put("description", "my description");
properties.put("path", e.getPath());
} catch (RepositoryException e1) {
LOGGER.info("Exception in JCRListenerImplementator.onEvent()");
}
} // end while
} // end method
}
package com.dlwconsulting.mywebsite;
导入javax.jcr.RepositoryException;
导入javax.jcr.Session;
导入javax.jcr.observation.Event;
导入javax.jcr.observation.EventIterator;
导入javax.jcr.observation.EventListener;
导入javax.jcr.observation.ObservationManager;
导入org.apache.felix.scr.annotations.*;
导入org.apache.sling.jcr.api.SlingRepository;
导入org.apache.sling.api.SlingConstants;
导入org.osgi.service.event.EventAdmin;
导入org.slf4j.Logger;
导入org.slf4j.LoggerFactory;
导入java.util.HashMap;
导入java.util.Hashtable;
导入java.util.Map;
导入java.util.Dictionary;
@组件(immediate=true,metatype=false,description=“Wim的JCRListener”)
@服务
公共类JCRListenerImplementator实现EventListener{
私有静态最终记录器Logger=LoggerFactory.getLogger(JCRListenerImplementator.class);
非公开会议;
私人观测经理观测经理;
私有静态最终字符串节点_TREE=“/content/geometryxx outdoors”;
@参考文献
专用SlingRepository SlingRepository;
//@Reference(policy=ReferencePolicy.STATIC,cardinality=ReferenceCardinality.MANDATORY_-UNARY)
//专用SlingRepository SlingRepository;
/*public void bindEventAdmin(EventAdmin EventAdmin){
this.eventAdmin=eventAdmin;
}
公共无效未绑定的数据(){
this.eventAdmin=null;
} */
public void bindSlingRepository(SlingRepository SlingRepository){
this.slingRepository=slingRepository;
}
公共无效解除绑定存储库(SlingRepository SlingRepository){
this.slingRepository=null;
}
@激活
公开作废开始(){
LOGGER.info(“>>>特拉华州:启动JCRListenerImplementator.activate()”;
试一试{
LOGGER.info(“>>>特拉华州:内部尝试!”);
session=slingRepository.loginAdministrative(null);
if(slingRepository.getDescriptor(slingRepository.OPTION\u OBSERVATION\u SUPPORTED)。等于(“true”)){
observationManager=session.getWorkspace().getObservationManager();
//最终字符串[]类型={“nt:非结构化”,“sling:OrderedFolder”};
//最终字符串路径=“/content/customer”;
observationManager.addEventListener(这个,Event.NODE_添加,NODE_树,true,null,null,false);
observationManager.addEventListener(此,Event.PROPERTY\u已更改,节点树,true,null,null,false);
info(“>>>特拉华州:添加了EventListeners”);
}
否则{
LOGGER.info(“>>>特拉华州:不支持观察”);
}
}捕获(存储异常e){
info(“JCRListenerImplementator.activate()中的异常”);
//抛出新的RepositoryException(e);
}
}
@停用
公共停车场(){
LOGGER.info(“>>>特拉华州:启动JCRListenerImplementator.deactivate()”;
试一试{
如果(observationManager!=null){
observationManager.removeEventListener(此);
}
if(会话!=null){
session.logout();
会话=空;
}
}捕获(存储异常e){
info(“JCRListenerImplementator.activate()中的异常”);
//抛出新的RepositoryException(e);
}
}
//@参考
//私人事件管理;
/**我的活动的工作主题*/
公共静态最终字符串作业\u TOPIC=“com/sling/eventing/WimsTopic”;
//@覆盖
public void onEvent(事件迭代器事件){
LOGGER.info(“>>>特拉华州:启动JCRListenerImplementator.onEvent()”;
while(events.hasNext()){
Event e=events.nextEvent();
试一试{
LOGGER.info(“>>>特拉华州:事件“+e.getPath()+”已发生!”);
LOGGER.info(“>>>>特拉华州:>>>事件标识符=“+e.getIdentifier());
LOGGER.info(“>>>>特拉华州:>>>事件用户数据=“+e.getUserData());
LOGGER.info(“>>>>特拉华州:>>>事件日期=“+e.getDate());
LOGGER.info(“>>>>特拉华州:>>>事件类型=“+e.getType());
Map m=e.getInfo();
对于(Map.Entry:m.entrySet()){
String key=entry.getKey();
对象值=entry.getValue();
LOGGER.info(“>>>特拉华州:>>>事件信息键=“+Key”);
LOGGER.info(“>>>特拉华州:>>>事件信息值=“+Value”);
}
最终Dic