svn commit: r471113 - in /xml/xindice/trunk: java/src/org/apache/xindice/core/Collection.java java/src/org/apache/xindice/core/Database.java java/src/org/apache/xindice/core/indexer/IndexManager.java status.xml

[email protected]
Newsgroups gmane.text.xml.xindice.devel
Message-ID <[email protected]>
Author: vgritsenko
Date: Fri Nov  3 20:25:44 2006
New Revision: 471113

URL: http://svn.apache.org/viewvc?view=rev&rev=471113
Log:
<action dev="VG" type="fix" fixes-bug="23571">
  Stop timer thread on database shutdown.
</action>


Modified:
    xml/xindice/trunk/java/src/org/apache/xindice/core/Collection.java
    xml/xindice/trunk/java/src/org/apache/xindice/core/Database.java
    xml/xindice/trunk/java/src/org/apache/xindice/core/indexer/IndexManager.java
    xml/xindice/trunk/status.xml

Modified: xml/xindice/trunk/java/src/org/apache/xindice/core/Collection.java
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/core/Collection.java?view=diff&rev=471113&r1=471112&r2=471113
==============================================================================
--- xml/xindice/trunk/java/src/org/apache/xindice/core/Collection.java (original)
+++ xml/xindice/trunk/java/src/org/apache/xindice/core/Collection.java Fri Nov  3 20:25:44 2006
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  *
- * CVS $Id$
+ * $Id$
  */
 
 package org.apache.xindice.core;
@@ -66,7 +66,7 @@
  * the Filer storage implementation, and the Indexes associated with
  * the Collection.
  *
- * @version CVS $Revision$, $Date$
+ * @version $Revision$, $Date$
  */
 public class Collection extends CollectionManager
                         implements Named, DBObject, Configurable {
@@ -1044,9 +1044,8 @@
      * @return A parsed DOM document or null if failure
      */
     private Document parseDocument(Key key, String xml) throws DBException {
-        Document doc = null;
         try {
-            doc = DOMParser.toDocument(xml);
+            Document doc = DOMParser.toDocument(xml);
 
             // Have to move it to Xindice DOM for XMLObject AutoLinking
             byte[] b = DOMCompressor.Compress(doc, symbols);
@@ -1055,11 +1054,12 @@
             if (documentCache != null) {
                 documentCache.putDocument(this, key, b);
             }
+
+            return doc;
         } catch (Exception e) {
             throw new DBException(FaultCodes.COL_DOCUMENT_MALFORMED,
                                   "Unable to parse document '" + key + "' in '" + getCanonicalName() + "'", e);
         }
-        return doc;
     }
 
     /*
@@ -1121,7 +1121,7 @@
          *        otherwise without headers, for the BTree.
          */
 
-        byte[] documentBytes = null;
+        byte[] documentBytes;
 
         if (compressed) {
             try {
@@ -1240,7 +1240,7 @@
         }
 
         checkFiler(FaultCodes.QRY_STYLE_NOT_FOUND);
-        Key[] k = null;
+        Key[] k;
         if (key instanceof Key[]) {
             k = (Key[]) key;
         } else {
@@ -1435,7 +1435,7 @@
 
             // Index Manager
             try {
-                indexManager = new IndexManager(this);
+                indexManager = new IndexManager(this, getDatabase().getTimer());
                 Configuration idxConfig = config.getChild(INDEXES, true);
                 indexManager.setConfig(idxConfig);
             } catch (Exception e) {
@@ -1531,7 +1531,7 @@
         // update the meta data if necessary
         if (isMetaEnabled()) {
             MetaSystemCollection metacol = getMetaSystemCollection();
-            MetaData meta = null;
+            MetaData meta;
             try {
                 meta = metacol.getCollectionMeta(this);
             } catch (DBException e) {
@@ -1563,7 +1563,6 @@
                 if (log.isWarnEnabled()) {
                     log.warn("Error setting meta for collection '" + getCanonicalName() + "'", e);
                 }
-                return;
             }
         }
     }

Modified: xml/xindice/trunk/java/src/org/apache/xindice/core/Database.java
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/core/Database.java?view=diff&rev=471113&r1=471112&r2=471113
==============================================================================
--- xml/xindice/trunk/java/src/org/apache/xindice/core/Database.java (original)
+++ xml/xindice/trunk/java/src/org/apache/xindice/core/Database.java Fri Nov  3 20:25:44 2006
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  *
- * CVS $Id$
+ * $Id$
  */
 
 package org.apache.xindice.core;
@@ -39,13 +39,15 @@
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Timer;
 
 /**
  * Database is the primary container for the Xindice Database Engine.
  *
- * @version CVS $Revision$, $Date$
+ * @version $Revision$, $Date$
  */
-public final class Database extends Collection implements Named {
+public final class Database extends Collection
+                            implements Named {
 
     private static final Log log = LogFactory.getLog(Database.class);
 
@@ -61,6 +63,7 @@
 
     private static final Map databases = new HashMap(); // String to Database
     private static final DatabaseShutdownHandler shutdownHandler = new DatabaseShutdownHandler();
+
     static {
         // sets up our golbal observer. will automatically flush document
         // changes to disk.
@@ -150,11 +153,16 @@
     private FileOutputStream lock;
     private boolean closed;
 
+    /** Shared timer instance for this database's IndexManagers */
+    private Timer timer;
+
+
     public Database() {
         super();
         this.docCache = new DocumentCache();
         this.engine = new QueryEngine(this);
         shutdownHandler.registerDatabase(this);
+        timer = new Timer(false);
         closed = false;
     }
 
@@ -192,11 +200,16 @@
             synchronized (databases) {
                 databases.remove(getName());
             }
+
+            // Stop the timer thread
+            timer.cancel();
+
             closed = true;
         }
 
         return true;
     }
+
     /**
      * @see org.apache.xindice.core.DBObject#close()
      * @see org.apache.xindice.core.Database#close(boolean removeFromShutdown)
@@ -265,6 +278,13 @@
      */
     public SystemCollection getSystemCollection() {
         return systemCollection;
+    }
+
+    /**
+     * Return database's timer instance.
+     */
+    protected Timer getTimer() {
+        return timer;
     }
 
     /**

Modified: xml/xindice/trunk/java/src/org/apache/xindice/core/indexer/IndexManager.java
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/core/indexer/IndexManager.java?view=diff&rev=471113&r1=471112&r2=471113
==============================================================================
--- xml/xindice/trunk/java/src/org/apache/xindice/core/indexer/IndexManager.java (original)
+++ xml/xindice/trunk/java/src/org/apache/xindice/core/indexer/IndexManager.java Fri Nov  3 20:25:44 2006
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  *
- * CVS $Id$
+ * $Id$
  */
 
 package org.apache.xindice.core.indexer;
@@ -44,15 +44,15 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-import java.util.Timer;
 import java.util.TimerTask;
 import java.util.WeakHashMap;
+import java.util.Timer;
 
 /**
  * IndexManager is a class that manages Indexes.  Good description, eh?
  * I should win a Pulitzer Prize for that one.
  *
- * @version CVS $Revision$, $Date$
+ * @version $Revision$, $Date$
  */
 public final class IndexManager extends SimpleConfigurable {
 
@@ -72,19 +72,17 @@
     private static final int ACTION_UPDATE = 1;
     private static final int ACTION_DELETE = 2;
 
-    // FIXME: Bug#23571: Timer is not disposed on webapp shutdown. Need to replace with cron service. 
-    private static final Timer timer = new Timer(true);
-
-    private Map patternMap = new HashMap(); // IndexPattern to IndexerInfo
-    private Map indexes = new HashMap(); // String to IndexerInfo
-    private Map bestIndexers = new HashMap(); // String to SoftRefTab
-    // of IndexPattern to Indexer
+    private Map patternMap = new HashMap();   // IndexPattern to IndexerInfo
+    private Map indexes = new HashMap();      // String to IndexerInfo
+    private Map bestIndexers = new HashMap(); // String to Map of IndexPattern to Indexer
 
     private IndexerInfo[] idxList = EMPTY_INDEXERS;
 
     private Collection collection;
+    private Timer timer;
     private SymbolTable symbols;
-    private List newIndexers = new ArrayList(); // of IndexerInfo
+    private final List newIndexers = new ArrayList(); // of IndexerInfo
+
 
     /**
      * Create IndexManager for a given collection
@@ -92,9 +90,10 @@
      * @param collection Collection for this IndexManager
      * @throws DBException if can't get collection's symbols
      */
-    public IndexManager(Collection collection) throws DBException {
+    public IndexManager(Collection collection, Timer timer) throws DBException {
         this.collection = collection;
         this.symbols = collection.getSymbols();
+        this.timer = timer;
     }
 
     /**
@@ -288,7 +287,7 @@
     }
 
     private void populateNewIndexers() throws DBException {
-        IndexerInfo[] list = null;
+        IndexerInfo[] list;
         synchronized (newIndexers) {
             list = (IndexerInfo[]) newIndexers.toArray(EMPTY_INDEXERS);
             newIndexers.clear();

Modified: xml/xindice/trunk/status.xml
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/status.xml?view=diff&rev=471113&r1=471112&r2=471113
==============================================================================
--- xml/xindice/trunk/status.xml (original)
+++ xml/xindice/trunk/status.xml Fri Nov  3 20:25:44 2006
@@ -74,6 +74,9 @@
 
     <changes>
         <release version="1.1b5-dev" date="Oct 27 2006">
+            <action dev="VG" type="fix" fixes-bug="23571">
+                Stop timer thread on database shutdown.
+            </action>
             <action dev="VG" type="fix" fixes-bug="31159">
                 Add pagecount configuration parameter to Paged based
                 filers: HashFiler, BTreeFiler.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.