在AEM中是否有一种有效的修改版本的方法

在AEM中是否有一种有效的修改版本的方法,aem,Aem,我们希望实现一个流程,在修改该对象时创建页面或资产的版本。有没有一种方法可以在CQ5 ootb中进行设置,或者这需要一个自定义的事件处理程序?您将获得很多版本,因为每次在上下文中或通过对话框更改组件时,都会抛出一个修改事件。这与“修改时的卷展栏”相同,给作者带来了很大的负担 我也会考虑它会占用多少磁盘空间 您可以设置在修改时触发的工作流,并在其中使用CreateVersioningProcess步骤拍摄版本快照 或者,如果您希望根据时间或其他指标连接修改,那么我将采用自定义事件处理程序。我对AE

我们希望实现一个流程,在修改该对象时创建页面或资产的版本。有没有一种方法可以在CQ5 ootb中进行设置,或者这需要一个自定义的事件处理程序?

您将获得很多版本,因为每次在上下文中或通过对话框更改组件时,都会抛出一个修改事件。这与“修改时的卷展栏”相同,给作者带来了很大的负担

我也会考虑它会占用多少磁盘空间

您可以设置在修改时触发的工作流,并在其中使用CreateVersioningProcess步骤拍摄版本快照


或者,如果您希望根据时间或其他指标连接修改,那么我将采用自定义事件处理程序。

我对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