Author: vgritsenko Date: Fri Apr 27 16:27:10 2007 New Revision: 533255 URL: http://svn.apache.org/viewvc?view=rev&rev=533255 Log: delay initialization of database till after the lock is obtained.
Modified: xml/xindice/trunk/java/src/org/apache/xindice/core/CollectionManager.java xml/xindice/trunk/java/src/org/apache/xindice/core/Database.java xml/xindice/trunk/java/src/org/apache/xindice/tools/XMLTools.java Modified: xml/xindice/trunk/java/src/org/apache/xindice/core/CollectionManager.java URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/core/CollectionManager.java?view=diff&rev=533255&r1=533254&r2=533255 ============================================================================== --- xml/xindice/trunk/java/src/org/apache/xindice/core/CollectionManager.java (original) +++ xml/xindice/trunk/java/src/org/apache/xindice/core/CollectionManager.java Fri Apr 27 16:27:10 2007 @@ -155,8 +155,8 @@ public boolean close() throws DBException { synchronized (collections) { - for(Iterator i = collections.values().iterator(); i.hasNext(); ) { - Collection collection = (Collection)i.next(); + for (Iterator i = collections.values().iterator(); i.hasNext(); ) { + Collection collection = (Collection) i.next(); try { collection.close(); } catch (DBException e) { 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=533255&r1=533254&r2=533255 ============================================================================== --- xml/xindice/trunk/java/src/org/apache/xindice/core/Database.java (original) +++ xml/xindice/trunk/java/src/org/apache/xindice/core/Database.java Fri Apr 27 16:27:10 2007 @@ -76,33 +76,31 @@ * name if one has already been loaded, otherwise it will * create a new instance. * - * @param config - * @return Database + * @param config Database configuration + * @return Database instance * @throws ConfigurationException if database name is missing in the configuration */ public static Database getDatabase(Configuration config) { - String name = config.getAttribute(Database.NAME); // No name in the config file ... can't get the database - if (null == name) { + if (name == null) { throw new ConfigurationException("Database configuration didn't contain a database name"); } Database database = (Database) databases.get(name); - if (null == database) { + if (database == null) { // In case it's currently being added (only pay the sync hit on a miss) synchronized (databases) { // Was it created while we waited? database = (Database) databases.get(name); - if (null == database) { + if (database == null) { database = new Database(); - try { database.setConfig(config); } catch (XindiceException x) { - // TODO: Configurable interface should use ConfigurationException instead of XindiceException. - throw new ConfigurationException(x); + // TODO: Configurable interface should use ConfigurationException instead of XindiceException... Right? + throw new ConfigurationException("XindiceException: " + x.getMessage(), x); } databases.put(database.getName(), database); @@ -115,15 +113,14 @@ /** * This will merely return an instance of a Database for the given - * name if one has already been loaded. + * name if one has already been loaded. * - * @param name + * @param name Database name * @return Database */ public static Database getDatabase(String name) { - Database database = (Database) databases.get(name); - if (null == database) { + if (database == null) { // in case it's currently being added (only pay the sync hit on a miss) synchronized (databases) { database = (Database) databases.get(name); @@ -160,11 +157,9 @@ public Database() { super(); - this.docCache = new DocumentCache(); - this.engine = new QueryEngine(this); - shutdownHandler.registerDatabase(this); - timer = new Timer(false); - closed = false; + docCache = new DocumentCache(); + engine = new QueryEngine(this); + closed = true; } /** @@ -172,9 +167,10 @@ * twice. * * @param removeFromShutdown If true removes its self from the shutdown hook + * @return true if closed + * @throws DBException if unable to close */ protected synchronized boolean close(boolean removeFromShutdown) throws DBException { - if (removeFromShutdown) { // we have already been closed so no need to do this again. shutdownHandler.removeDatabase(this); @@ -283,6 +279,7 @@ /** * Return database's timer instance. + * @return Database timer instance */ protected Timer getTimer() { return timer; @@ -348,11 +345,16 @@ "Exception: " + e); } + // Now we are ready to open it up + shutdownHandler.registerDatabase(this); + timer = new Timer(false); + closed = false; + // Initialize query engine try { Configuration queryCfg = config.getChild(QUERYENGINE); if (queryCfg != null) { - this.engine.setConfig(queryCfg); + engine.setConfig(queryCfg); } } catch (Exception e) { if (log.isWarnEnabled()) { Modified: xml/xindice/trunk/java/src/org/apache/xindice/tools/XMLTools.java URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/tools/XMLTools.java?view=diff&rev=533255&r1=533254&r2=533255 ============================================================================== --- xml/xindice/trunk/java/src/org/apache/xindice/tools/XMLTools.java (original) +++ xml/xindice/trunk/java/src/org/apache/xindice/tools/XMLTools.java Fri Apr 27 16:27:10 2007 @@ -269,39 +269,39 @@ } } - if (commandClass != null) { - Command command; - try { - // Register Xindice Database with xml:db - DatabaseImpl db = new DatabaseImpl(); - DatabaseManager.registerDatabase(db); + if (commandClass == null) { + throw new IllegalArgumentException("\"" + action + "\" not recognized."); + } - // Execute command class - command = (Command) Class.forName(commandClass).newInstance(); - command.execute(table); + Command command; + try { + // Register Xindice Database with XML:DB + DatabaseImpl db = new DatabaseImpl(); + DatabaseManager.registerDatabase(db); - return true; - } catch (XMLDBException e) { - System.err.println("XMLDB Exception " + e.errorCode + ": " + e.getMessage()); - if (isVerbose()) { - e.printStackTrace(System.err); - } - return false; - } catch (Exception e) { - System.err.println("ERROR : " + e.getMessage()); - if (isVerbose()) { - e.printStackTrace(System.err); - } - return false; - } finally { - // Close Database - if ("true".equals(table.get(LOCAL))) { - command = new org.apache.xindice.tools.command.Shutdown(); - command.execute(table); - } + // Execute command class + command = (Command) Class.forName(commandClass).newInstance(); + command.execute(table); + + return true; + } catch (XMLDBException e) { + System.err.println("XMLDB Exception " + e.errorCode + ": " + e.getMessage()); + if (isVerbose()) { + e.printStackTrace(System.err); + } + return false; + } catch (Exception e) { + System.err.println("ERROR : " + e.getMessage()); + if (isVerbose()) { + e.printStackTrace(System.err); + } + return false; + } finally { + // Close Database + if ("true".equals(table.get(LOCAL))) { + command = new org.apache.xindice.tools.command.Shutdown(); + command.execute(table); } - } else { - throw new IllegalArgumentException("\"" + action + "\" not recognized."); } }