knguyen     2005/12/23 17:52:39 CET

  Modified files:
    core/src/java/org/jahia/services/metadata/core/listeners 
                                                             
ContentLastContributorListener.java 
                                                             
ContentLastModificationDateListener.java 
  Log:
  - minimize metadata update
  
  Revision  Changes    Path
  1.12      +46 -1     
jahia/core/src/java/org/jahia/services/metadata/core/listeners/ContentLastContributorListener.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/core/src/java/org/jahia/services/metadata/core/listeners/ContentLastContributorListener.java.diff?r1=1.11&r2=1.12&f=h
  1.16      +25 -0     
jahia/core/src/java/org/jahia/services/metadata/core/listeners/ContentLastModificationDateListener.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/core/src/java/org/jahia/services/metadata/core/listeners/ContentLastModificationDateListener.java.diff?r1=1.15&r2=1.16&f=h
  
  
  
  Index: ContentLastContributorListener.java
  ===================================================================
  RCS file: 
/home/cvs/repository/jahia/core/src/java/org/jahia/services/metadata/core/listeners/ContentLastContributorListener.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- ContentLastContributorListener.java       6 Dec 2005 12:12:50 -0000       
1.11
  +++ ContentLastContributorListener.java       23 Dec 2005 16:52:39 -0000      
1.12
  @@ -4,6 +4,7 @@
   import org.jahia.content.ContentObject;
   import org.jahia.content.JahiaObject;
   import org.jahia.content.PageReferenceableInterface;
  +import org.jahia.content.ObjectKey;
   import org.jahia.content.events.ContentUndoStagingEvent;
   import org.jahia.content.events.ContentObjectDeleteEvent;
   import org.jahia.content.events.ContentObjectRestoreVersionEvent;
  @@ -45,6 +46,9 @@
               org.apache.log4j.Logger.getLogger 
(ContentLastContributorListener.class);
   
       private String metadataName;
  +    private static ThreadLocal lastUpdateTimeThreadLocal = new ThreadLocal();
  +
  +    private Long updateTimeMinInterval;
   
       public void setMetadataName(String metadataName){
           this.metadataName = metadataName;
  @@ -54,6 +58,35 @@
           return this.metadataName;
       }
   
  +    public Long getLastUpdateTime(ObjectKey key) {
  +        HashMap map = (HashMap)lastUpdateTimeThreadLocal.get();
  +        if ( map == null ){
  +            map = new HashMap();
  +            lastUpdateTimeThreadLocal.set(map);
  +        }
  +        return (Long)map.get(key);
  +    }
  +
  +    public void putLastUpdateTime(ObjectKey key, Long time) {
  +        if ( lastUpdateTimeThreadLocal == null ){
  +            lastUpdateTimeThreadLocal = new ThreadLocal();
  +            lastUpdateTimeThreadLocal.set(new HashMap());
  +        }
  +        HashMap map = (HashMap)lastUpdateTimeThreadLocal.get();
  +        map.put(key,time);
  +    }
  +
  +    public Long getUpdateTimeMinInterval() {
  +        if ( updateTimeMinInterval == null ){
  +            updateTimeMinInterval = new Long(300);
  +        }
  +        return updateTimeMinInterval;
  +    }
  +
  +    public void setUpdateTimeMinInterval(Long updateTimeMinInterval) {
  +        this.updateTimeMinInterval = updateTimeMinInterval;
  +    }
  +
       public void metadataEngineAfterInit (JahiaEvent theEvent) {
           processEvent("metadataEngineAfterInit",theEvent);
       }
  @@ -88,7 +121,7 @@
           handleObjectChanged(theEvent);
       }
   
  -    protected void handleObjectChanged (JahiaEvent theEvent) {
  +    protected synchronized void handleObjectChanged (JahiaEvent theEvent) {
           ContentObject contentObject = (ContentObject)theEvent.getObject();
           if ( contentObject == null ){
               return;
  @@ -96,6 +129,18 @@
           if (contentObject instanceof ContentField && 
((ContentField)contentObject).getContainerID() != 0) {
               return;
           }
  +
  +        Long lastUpdateTime = 
getLastUpdateTime(contentObject.getObjectKey());
  +        if ( lastUpdateTime != null ){
  +            if ((theEvent.getEventTime()-lastUpdateTime.longValue())
  +                    <this.getUpdateTimeMinInterval().longValue()){
  +                //logger.info("Skip updating last contributor metadata for 
content "
  +                //        + contentObject.getObjectKey());
  +                return;
  +            }
  +        }
  +        putLastUpdateTime(contentObject.getObjectKey(),new 
Long(theEvent.getEventTime()));
  +
           try {
               
updateMetadata(contentObject,theEvent.getProcessingContext(),theEvent);
   
  
  
  
  Index: ContentLastModificationDateListener.java
  ===================================================================
  RCS file: 
/home/cvs/repository/jahia/core/src/java/org/jahia/services/metadata/core/listeners/ContentLastModificationDateListener.java,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- ContentLastModificationDateListener.java  6 Dec 2005 12:12:50 -0000       
1.15
  +++ ContentLastModificationDateListener.java  23 Dec 2005 16:52:39 -0000      
1.16
  @@ -45,6 +45,8 @@
               org.apache.log4j.Logger.getLogger 
(ContentLastModificationDateListener.class);
   
       private String metadataName;
  +    private HashMap lastUpdateTimeMap = new HashMap();
  +    private Long updateTimeMinInterval;
   
       public void setMetadataName(String metadataName){
           this.metadataName = metadataName;
  @@ -54,6 +56,17 @@
           return this.metadataName;
       }
   
  +    public Long getUpdateTimeMinInterval() {
  +        if ( updateTimeMinInterval == null ){
  +            updateTimeMinInterval = new Long(300);
  +        }
  +        return updateTimeMinInterval;
  +    }
  +
  +    public void setUpdateTimeMinInterval(Long updateTimeMinInterval) {
  +        this.updateTimeMinInterval = updateTimeMinInterval;
  +    }
  +
       public void metadataEngineAfterInit (JahiaEvent theEvent) {
           processEvent("metadataEngineAfterInit",theEvent);
       }
  @@ -96,6 +109,18 @@
           if (contentObject instanceof ContentField  && 
((ContentField)contentObject).getContainerID() != 0) {
               return;
           }
  +
  +        Long lastUpdateTime = 
(Long)lastUpdateTimeMap.get(contentObject.getObjectKey());
  +        if ( lastUpdateTime != null ){
  +            if ((theEvent.getEventTime()-lastUpdateTime.longValue())
  +                    <updateTimeMinInterval.longValue()){
  +                //logger.info("Skip updating last modification metadata for 
content "
  +                //        + contentObject.getObjectKey());
  +                return;
  +            }
  +        }
  +        lastUpdateTimeMap.put(contentObject.getObjectKey(),new 
Long(theEvent.getEventTime()));
  +
           try {
               
updateMetadata(contentObject,Jahia.getThreadParamBean(),theEvent);
   
  

Reply via email to