knguyen     2004/08/26 18:29:42 CEST

  Modified files:        (Branch: JAHIA-4-0-BRANCH)
    src/java/org/jahia/services/search AddedField.java 
                                       JahiaIndexableDocumentImpl.java 
                                       JahiaSearchBaseService.java 
                                       RemovedField.java 
  Log:
  - fix Constructor for object serialization.
  - first tested in load balancing and seems to work
  
  Revision  Changes    Path
  1.14.2.2  +51 -34    jahia/src/java/org/jahia/services/search/AddedField.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/src/java/org/jahia/services/search/AddedField.java.diff?r1=1.14.2.1&r2=1.14.2.2&f=h
  1.5.2.1   +8 -5      
jahia/src/java/org/jahia/services/search/JahiaIndexableDocumentImpl.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/src/java/org/jahia/services/search/JahiaIndexableDocumentImpl.java.diff?r1=1.5&r2=1.5.2.1&f=h
  1.42.2.7  +77 -45    
jahia/src/java/org/jahia/services/search/JahiaSearchBaseService.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/src/java/org/jahia/services/search/JahiaSearchBaseService.java.diff?r1=1.42.2.6&r2=1.42.2.7&f=h
  1.3.4.2   +25 -4     jahia/src/java/org/jahia/services/search/RemovedField.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/src/java/org/jahia/services/search/RemovedField.java.diff?r1=1.3.4.1&r2=1.3.4.2&f=h
  
  
  
  Index: AddedField.java
  ===================================================================
  RCS file: 
/home/cvs/repository/jahia/src/java/org/jahia/services/search/Attic/AddedField.java,v
  retrieving revision 1.14.2.1
  retrieving revision 1.14.2.2
  diff -u -r1.14.2.1 -r1.14.2.2
  --- AddedField.java   25 Aug 2004 14:45:58 -0000      1.14.2.1
  +++ AddedField.java   26 Aug 2004 16:29:41 -0000      1.14.2.2
  @@ -1,36 +1,19 @@
   package org.jahia.services.search;
   
  -import org.jahia.bin.Jahia;
  -import org.jahia.content.ContentContainerKey;
  -import org.jahia.content.ContentFieldKey;
  -import org.jahia.data.containers.JahiaContainerDefinition;
  -import org.jahia.data.fields.FieldTypes;
  -import org.jahia.data.fields.JahiaField;
  -import org.jahia.data.fields.JahiaFieldDefinition;
  -import org.jahia.data.files.JahiaFileField;
  -import org.jahia.registries.JahiaContainerDefinitionsRegistry;
  -import org.jahia.registries.ServicesRegistry;
  -import org.jahia.services.categories.Category;
  -import org.jahia.services.containers.ContentContainer;
  -import org.jahia.services.sites.JahiaSite;
  -import org.jahia.services.version.EntryLoadRequest;
  -import org.jahia.services.webdav.DAVFileAccess;
  -import org.jahia.services.webdav.JahiaWebdavBaseService;
  -import org.jahia.utils.FileUtils;
  -import org.jahia.utils.fileparsers.HDFExtractor;
  -import org.jahia.utils.fileparsers.PDFExtractor;
  -
  -import java.io.IOException;
  -import java.io.ByteArrayInputStream;
  -import java.io.BufferedInputStream;
  -import java.io.BufferedOutputStream;
  -import java.io.BufferedReader;
  -import java.io.BufferedWriter;
  -import java.io.Reader;
  -import java.io.InputStream;
  -import java.io.InputStreamReader;
  +import java.io.*;
   import java.util.*;
  -import java.io.Serializable;
  +
  +import org.jahia.content.*;
  +import org.jahia.data.containers.*;
  +import org.jahia.data.fields.*;
  +import org.jahia.data.files.*;
  +import org.jahia.registries.*;
  +import org.jahia.services.categories.*;
  +import org.jahia.services.containers.*;
  +import org.jahia.services.sites.*;
  +import org.jahia.services.webdav.*;
  +import org.jahia.utils.*;
  +import org.jahia.utils.fileparsers.*;
   
   /**
    * <p>Title: This class represents a field wrapper used by search engine</p>
  @@ -41,7 +24,7 @@
    * @author Khue Nguyen
    * @version 1.0
    */
  -class AddedField extends JahiaIndexableDocumentImpl implements Serializable {
  +class AddedField extends JahiaIndexableDocumentImpl {
   
       private static org.apache.log4j.Logger logger =
               org.apache.log4j.Logger.getLogger (AddedField.class);
  @@ -59,6 +42,16 @@
       Object[] values;
   
       /**
  +     * @param siteId
  +     * @param key
  +     * @param fields
  +     */
  +    public AddedField (int siteId, String key,
  +                                       Hashtable fields) {
  +        super (siteId, null, key, fields);
  +    }
  +
  +    /**
        * A Field instance to store in the search index
        *
        * @param theField
  @@ -203,8 +196,7 @@
                                   }
                               } else if ("application/pdf".equals (contentType)) {
                                   PDFExtractor pdfExtractor = new PDFExtractor ();
  -
  -                                BufferedReader in;
  +                                BufferedReader in = null;
                                   String charSet = null;
                                   try {
                                       in = new BufferedReader(
  @@ -214,6 +206,10 @@
                                       charSet = "UTF-8";
                                   } catch (IOException ie) {
                                       logger.debug(ie);
  +                                } finally {
  +                                    if ( in != null ){
  +                                        in.close();
  +                                    }
                                   }
                                   Reader pdfReader = null;
                                   try {
  @@ -226,8 +222,29 @@
                                       logger.debug(t);
                                   } finally {
                                       try {
  -                                        pdfReader.close();
  +                                        if ( pdfReader != null ){
  +                                            pdfReader.close();
  +                                        }
                                       } catch ( Throwable t ){
  +                                        logger.debug(t);
  +                                    }
  +                                }
  +                                if ( strVal == null ){
  +                                    try {
  +                                        pdfReader = pdfExtractor.
  +                                            getPDFReader(
  +                                            file.downloadFile());
  +                                        strVal = 
FileUtils.readerToString(pdfReader);
  +                                    } catch ( Throwable t ){
  +                                        logger.debug(t);
  +                                    } finally {
  +                                        try {
  +                                            if ( pdfReader != null ){
  +                                                pdfReader.close();
  +                                            }
  +                                        } catch ( Throwable t ){
  +                                            logger.debug(t);
  +                                        }
                                       }
                                   }
                               } else if ("application/msword".equals (contentType)) {
  
  
  
  Index: JahiaIndexableDocumentImpl.java
  ===================================================================
  RCS file: 
/home/cvs/repository/jahia/src/java/org/jahia/services/search/Attic/JahiaIndexableDocumentImpl.java,v
  retrieving revision 1.5
  retrieving revision 1.5.2.1
  diff -u -r1.5 -r1.5.2.1
  --- JahiaIndexableDocumentImpl.java   10 Feb 2004 19:39:11 -0000      1.5
  +++ JahiaIndexableDocumentImpl.java   26 Aug 2004 16:29:41 -0000      1.5.2.1
  @@ -1,8 +1,7 @@
   package org.jahia.services.search;
   
  -import java.util.HashSet;
  -import java.util.Hashtable;
  -import java.util.Set;
  +import java.io.*;
  +import java.util.*;
   
   //import org.apache.jetspeed.services.search.ParsedObject;
   //import org.apache.jetspeed.services.search.BaseParsedObject;
  @@ -16,7 +15,8 @@
    * @author Khue Nguyen
    * @version 1.0
    */
  -public class JahiaIndexableDocumentImpl implements JahiaIndexableDocument {
  +public class JahiaIndexableDocumentImpl implements JahiaIndexableDocument ,
  +    Serializable {
   
       protected int siteId;
   
  @@ -30,6 +30,7 @@
   
       protected boolean toBeAdded = true;
   
  +
       /**
        * @param siteId
        * @param key
  @@ -54,7 +55,9 @@
       public JahiaIndexableDocumentImpl (int siteId, String keyFieldName,
                                          String key, Hashtable fields) {
           this.siteId = siteId;
  -        this.keyFieldName = keyFieldName;
  +        if ( keyFieldName != null ){
  +            this.keyFieldName = keyFieldName;
  +        }
           this.key = key;
           this.fields = fields;
           if (this.fields == null) {
  
  
  
  Index: JahiaSearchBaseService.java
  ===================================================================
  RCS file: 
/home/cvs/repository/jahia/src/java/org/jahia/services/search/Attic/JahiaSearchBaseService.java,v
  retrieving revision 1.42.2.6
  retrieving revision 1.42.2.7
  diff -u -r1.42.2.6 -r1.42.2.7
  --- JahiaSearchBaseService.java       25 Aug 2004 15:21:03 -0000      1.42.2.6
  +++ JahiaSearchBaseService.java       26 Aug 2004 16:29:41 -0000      1.42.2.7
  @@ -128,15 +128,15 @@
           throws JahiaInitializationException {
   
           if ( !this.isInitialized() ){
  +
               indexOrders = new Vector();
  +
  +            configureSystemProperties();
  +
               indexOrdersCache = CacheFactory.getInstance().createCache(
                   SEARCH_INDEX_ORDERS_CACHE);
               indexOrdersCache.registerListener(this);
   
  -            backgroundIndexingThread = new Thread(theObject,
  -                                                  "Background content indexing");
  -            backgroundIndexingThread.start(); // start background thread
  -
               searchIndexesDiskPath = jSettings.getJahiaVarDiskPath()
                   + File.separator
                   + searchIndexesDir;
  @@ -150,8 +150,34 @@
               // now let's remove any stale lock files if there were some.
               removeStaleLockFiles(searchIndexesDiskPath);
   
  +            backgroundIndexingThread = new Thread(theObject,
  +                                                  "Background content indexing");
  +            backgroundIndexingThread.start(); // start background thread
  +
               logger.debug("Initialized");
  +
  +        }
  +    }
  +
  +    private void configureSystemProperties(){
  +        //int test = org.apache.lucene.search.BooleanQuery.getMaxClauseCount();
  +        int test = 0;
  +        Enumeration enum = org.jahia.bin.Jahia.getStaticServletConfig()
  +            .getInitParameterNames();
  +        String name = "";
  +        String value = "";
  +        while ( enum.hasMoreElements() ){
  +            name = (String)enum.nextElement();
  +            if ( name.startsWith("org.apache.lucene") ){
  +                value = (String) org.jahia.bin.Jahia.getStaticServletConfig()
  +                    .getInitParameter(name);
  +                if ( value != null && !"".equals(value.trim()) ){
  +                    System.setProperty(name, value);
  +                }
  +            }
           }
  +        test = org.apache.lucene.search.BooleanQuery.getMaxClauseCount();
  +        test = 2;
       }
   
       public synchronized void shutdown() throws JahiaException {
  @@ -702,44 +728,7 @@
        */
       public void run () {
           while (indexingThreadActivated) {
  -
  -            long indexingStartTime = System.currentTimeMillis();
  -            int indexOrderCount = indexOrders.size ();
  -
  -            while (indexOrders.size () > 0) {
  -                JahiaIndexableDocument nextObject = null;
  -
  -                synchronized (indexOrders) {
  -                    if (indexOrders.size () != 0) {
  -                        nextObject = (JahiaIndexableDocument)
  -                                indexOrders.elementAt (0);
  -                        indexOrders.remove (0);
  -                    }
  -                }
  -
  -                // okay now we have the next added/removed field, we process it!
  -                if (nextObject != null) {
  -                    if (nextObject.toBeAdded ()) {
  -                        backgroundAddObjectToSearchEngine (nextObject);
  -                    } else {
  -                        backgroundRemoveObjectFromSearchEngine (nextObject);
  -                    }
  -                    this.indexOrdersCache.remove(nextObject.getKey());
  -                }
  -            }
  -
  -            long indexingElapsedTime = System.currentTimeMillis() - 
indexingStartTime;
  -            if (logger.isInfoEnabled()) {
  -                logger.info(
  -                    "Finished processing " + indexOrderCount +
  -                    " indexing orders in " + indexingElapsedTime + "ms.");
  -            }
  -
  -            // FIXME : oops, As we are in a separate thread, this would may have 
sence
  -            // to terminate Connection ?
  -            org.jahia.services.database.ConnectionDispenser.
  -                    terminateConnection ();
  -
  +            indexQueue();
               synchronized (this) {
                   try {
                       wait (); // wait for next notify
  @@ -757,6 +746,46 @@
       //
       //**************************************************************************
   
  +     private synchronized void indexQueue(){
  +         long indexingStartTime = System.currentTimeMillis();
  +         int indexOrderCount = indexOrders.size ();
  +
  +         synchronized (indexOrders) {
  +
  +             while (indexOrders.size() > 0) {
  +                 JahiaIndexableDocument nextObject = null;
  +
  +                 if (indexOrders.size() != 0) {
  +                     nextObject = (JahiaIndexableDocument)
  +                         indexOrders.elementAt(0);
  +                     indexOrders.remove(0);
  +                 }
  +
  +                 // okay now we have the next added/removed field, we process it!
  +                 if (nextObject != null) {
  +                     if (nextObject.toBeAdded()) {
  +                         backgroundAddObjectToSearchEngine(nextObject);
  +                     }
  +                     else {
  +                         backgroundRemoveObjectFromSearchEngine(nextObject);
  +                     }
  +                     //this.indexOrdersCache.remove(nextObject.getKey());
  +                 }
  +             }
  +         }
  +
  +         long indexingElapsedTime = System.currentTimeMillis() - indexingStartTime;
  +         if (logger.isInfoEnabled()) {
  +             logger.info(
  +                 "Finished processing " + indexOrderCount +
  +                 " indexing orders in " + indexingElapsedTime + "ms.");
  +         }
  +
  +         // FIXME : oops, As we are in a separate thread, this would may have sence
  +         // to terminate Connection ?
  +         org.jahia.services.database.ConnectionDispenser.
  +                 terminateConnection ();
  +     }
   
       //--------------------------------------------------------------------------
       /**
  @@ -813,7 +842,6 @@
           removeDoc (indObj.getSiteId (), term, reader);
   
           boolean closeWriter = false;
  -
           try {
   
               // Try to get the site's index if any.
  @@ -937,8 +965,8 @@
   
               // Try to get the site's index if any.
               if ( reader == null ){
  -                reader = getIndexReader(siteID);
                   closeReader = true;
  +                reader = getIndexReader(siteID);
               }
               if (reader == null)
                   return;
  @@ -1122,9 +1150,13 @@
        */
   
       public void onCachePut (String cacheName, Object entryKey, Object entryValue){
  +        logger.debug("Search Cache listener :" + cacheName + entryKey.toString());
           if ( this.SEARCH_INDEX_ORDERS_CACHE.equals(cacheName)
                && entryKey != null && entryValue != null ){
  -            this.indexOrders.add(entryValue);
  +            CacheEntry cacheEntry = (CacheEntry)entryValue;
  +            this.indexOrders.add(cacheEntry.getObject());
  +            logger.debug("Search Cache listener : added value in indexOrders");
  +            indexQueue();
           }
       }
   
  
  
  
  Index: RemovedField.java
  ===================================================================
  RCS file: 
/home/cvs/repository/jahia/src/java/org/jahia/services/search/Attic/RemovedField.java,v
  retrieving revision 1.3.4.1
  retrieving revision 1.3.4.2
  diff -u -r1.3.4.1 -r1.3.4.2
  --- RemovedField.java 25 Aug 2004 14:47:45 -0000      1.3.4.1
  +++ RemovedField.java 26 Aug 2004 16:29:41 -0000      1.3.4.2
  @@ -1,19 +1,40 @@
   package org.jahia.services.search;
   
  -import org.jahia.data.fields.JahiaField;
  -import org.jahia.services.fields.ContentField;
  -import java.io.Serializable;
  +import java.util.*;
  +
  +import org.jahia.data.fields.*;
  +import org.jahia.services.fields.*;
   
   /**
    * This class represents a field wrapper used by the search engine
    */
  -class RemovedField extends JahiaIndexableDocumentImpl implements Serializable {
  +class RemovedField extends JahiaIndexableDocumentImpl {
       int id;
       int jahiaID;
       int versionID;
       int workflowState;
       String languageCode;
   
  +    /**
  +     * @param siteId
  +     * @param keyFieldName
  +     * @param key
  +     * @param fields
  +     */
  +    public  RemovedField (int siteId, String keyFieldName,
  +                                       String key, Hashtable fields) {
  +         super (siteId, keyFieldName, key, fields);
  +    }
  +
  +    /**
  +     * @param siteId
  +     * @param key
  +     * @param fields
  +     */
  +    public RemovedField (int siteId, String key, Hashtable fields) {
  +        super (siteId, null, key, fields);
  +    }
  +
       public RemovedField (JahiaField theField) {
   
           super (theField.getJahiaID (), null, null);
  

Reply via email to