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);