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 =