knguyen     2004/08/25 15:57:23 CEST

  Modified files:        (Branch: JAHIA-4-0-BRANCH)
    src/java/org/jahia/services/search JahiaSearchBaseService.java 
  Log:
  - Load balanced search engine support, while still using file index
  
  Revision  Changes    Path
  1.42.2.3  +60 -16    
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.2&r2=1.42.2.3&f=h
  
  
  
  Index: JahiaSearchBaseService.java
  ===================================================================
  RCS file: 
/home/cvs/repository/jahia/src/java/org/jahia/services/search/Attic/JahiaSearchBaseService.java,v
  retrieving revision 1.42.2.2
  retrieving revision 1.42.2.3
  diff -u -r1.42.2.2 -r1.42.2.3
  --- JahiaSearchBaseService.java       5 Aug 2004 14:30:14 -0000       1.42.2.2
  +++ JahiaSearchBaseService.java       25 Aug 2004 13:57:22 -0000      1.42.2.3
  @@ -46,6 +46,7 @@
   import org.jahia.settings.SettingsBean;
   import org.jahia.utils.JahiaChrono;
   import org.jahia.utils.LanguageCodeConverters;
  +import org.jahia.services.cache.*;
   
   import org.jahia.services.search.analyzer.*;
   
  @@ -63,7 +64,9 @@
    * @version 1.0
    */
   public class JahiaSearchBaseService extends JahiaSearchService implements
  -        Runnable {
  +        CacheListener, Runnable {
  +
  +    public static final String SEARCH_INDEX_ORDERS_CACHE = 
"SEARCH_INDEX_ORDER_CACHE";
   
       private static org.apache.log4j.Logger logger =
               org.apache.log4j.Logger.getLogger (JahiaSearchBaseService.class);
  @@ -81,6 +84,9 @@
       /** search handlers * */
       private Properties searchHandlers;
   
  +    // Cache used as synchrinized Hub in a Load Balanced environment
  +    private Cache indexOrdersCache;
  +
       // list of all removed/added fields to add/remove from the index in background
       private Vector indexOrders; // les ordres de add/remove
   
  @@ -99,7 +105,6 @@
           searchHandlers.setProperty (JahiaSearcher.PAGE_SEARCHER, "doPageSearch");
           searchHandlers.setProperty (JahiaSearcher.CONTAINER_SEARCHER,
                   "doContainerSearch");
  -        indexOrders = new Vector ();
       }
   
       //--------------------------------------------------------------------------
  @@ -122,24 +127,31 @@
       public void init (SettingsBean jSettings)
           throws JahiaInitializationException {
   
  -        backgroundIndexingThread = new Thread(theObject,
  -                                              "Background content indexing");
  -        backgroundIndexingThread.start(); // start background thread
  +        if ( !this.isInitialized() ){
  +            indexOrders = new Vector();
  +            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 ()
  +            searchIndexesDiskPath = jSettings.getJahiaVarDiskPath()
                   + File.separator
                   + searchIndexesDir;
   
  -        File f = new File (searchIndexesDiskPath);
  -        // Create lucene search index repository if not exists.
  -        if (!f.isDirectory ()) {
  -            f.mkdir ();
  -        }
  +            File f = new File(searchIndexesDiskPath);
  +            // Create lucene search index repository if not exists.
  +            if (!f.isDirectory()) {
  +                f.mkdir();
  +            }
   
  -        // now let's remove any stale lock files if there were some.
  -        removeStaleLockFiles (searchIndexesDiskPath);
  +            // now let's remove any stale lock files if there were some.
  +            removeStaleLockFiles(searchIndexesDiskPath);
   
  -        logger.debug ("Initialized");
  +            logger.debug("Initialized");
  +        }
       }
   
       public synchronized void shutdown() throws JahiaException {
  @@ -175,7 +187,8 @@
               return;
           indObj.setBeAdded (false);
           if (indObj.beforeRemovingFromSearchEngine ()) {
  -            indexOrders.add (indObj);
  +            indexOrders.add(indObj);
  +            indexOrdersCache.put(indObj.getKey(),indObj);
           }
           notifyAll ();
       }
  @@ -375,7 +388,8 @@
                   Object[] value = (Object[]) values.get (languageCode);
                   addedField.setValues (value);
                   if (addedField.beforeAddingToSearchEngine ()) {
  -                    indexOrders.add (addedField);
  +                    indexOrders.add(addedField);
  +                    indexOrdersCache.put(addedField.getKey(),addedField);
                   }
               }
           } catch (Throwable t) {
  @@ -398,6 +412,7 @@
           rField.setBeAdded (false);
           if (rField.beforeRemovingFromSearchEngine ()) {
               indexOrders.add (rField);
  +            indexOrdersCache.put (rField.getKey(),rField);
           }
   
           notifyAll ();
  @@ -418,6 +433,7 @@
           rField.setBeAdded (false);
           if (rField.beforeRemovingFromSearchEngine ()) {
               indexOrders.add (rField);
  +            indexOrdersCache.put (rField.getKey(),rField);
           }
   
           notifyAll ();
  @@ -708,6 +724,7 @@
                       } else {
                           backgroundRemoveObjectFromSearchEngine (nextObject);
                       }
  +                    this.indexOrdersCache.remove(nextObject.getKey());
                   }
               }
   
  @@ -1086,6 +1103,33 @@
           }
       }
   
  +    /**
  +     * Cache Listener implementation
  +     *
  +     * @param cacheName String
  +     */
  +    public void onCacheFlush (String cacheName){
  +
  +    }
  +
  +    /**
  +     * Cache Listener implementation
  +     *
  +     * On cache put, add the new cache entry in the local indexOrders vector.
  +     *
  +     * @param cacheName String
  +     * @param entryKey Object
  +     */
  +    public void onCachePut (String cacheName, Object entryKey){
  +        if ( this.SEARCH_INDEX_ORDERS_CACHE.equals(cacheName)
  +             && entryKey != null ){
  +            Object obj = this.indexOrdersCache.get(entryKey);
  +            if ( obj != null ){
  +                this.indexOrders.add(obj);
  +            }
  +        }
  +    }
  +
       /*
       private void JetspeedAddToIndex(){
           BaseParsedObject parsedObject =
  

Reply via email to