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.