Hi all (sorry if you receive this message for the second time, it is still not in archives ???!!!),
I have an issue regarding collection creation and index creation within a same run, using embedded mode. I provide the code of a simple app that points the issue. I use build 1.1b4, and the issue is present both on Linux and Windows XP with java 1.4.2_03 The application opens an embedded database, then creates a collection at root level, then creates an indexer in this newly created collection, then exits. The first time I launch the app (run 0), traces are : ... xindice logs ... xmldb:xindice-embed:///db/exampleColl is not defined, creating it !!! ... xindice logs ... creating indexer toto ... xindice logs ... After execution, in . db is present, as well as db/exampleColl, and toto.idx is actually created in db/exampleColl When I restart the application (run 1), traces are : ... xindice logs ... creating indexer toto ... xindice logs ... Thus, in run 1, indexer has been re-created... Is this expected ?????? When I restart application (run 2), traces are : ... xindice logs ... indexer toto is already present ... xindice logs ... which is correct. Thus, in this case I need 2 runs to ensure that indexer is actually created... What worries me is that I'm not sure that, if in run0 I add documents in collection and index them with the index, those information will be actually recorded in database. Note that, if I comment the index creation in run 0, I only create the collection. If I remove the comment for run 1, the indexer is created, and in run 2 the application detects the newly created index correctly. There seems to be something with index creation flush, or am I missing something ? thanks for your support, Christophe. package xindicex; import org.xmldb.api.*; import org.xmldb.api.base.*; import org.xmldb.common.*; import org.xmldb.xupdate.*; import org.apache.xindice.client.xmldb.embed.DatabaseImpl; import org.apache.xindice.client.xmldb.services.CollectionManager; import org.apache.xindice.xml.dom.DOMParser; import org.apache.xindice.util.*; import org.apache.xindice.xml.dom.DocumentImpl; import org.w3c.dom.Document; import org.w3c.dom.Element; import java.util.Hashtable; import java.util.Enumeration; public class example { public static void main(String[] argv) { // Simple app : creates an embedded database or retrieves it, creates // a "exampleColl" collection at root level or retrieves it if it is already present, // creates an indexer "toto" in "exampleColl" or retrieves it if it is already present. Collection colroot = null; Collection coll = null; Database db; try { String driver = "org.apache.xindice.client.xmldb.embed.DatabaseImpl"; Class c = null; c = Class.forName(driver); db = (Database) c.newInstance(); //use default system.xml... DatabaseManager.registerDatabase(db); String uri = "xmldb:xindice-embed:///db/"; colroot = DatabaseManager.getCollection(uri); // create or retrieve exampleColl String curr = uri + "exampleColl" + "/"; coll = DatabaseManager.getCollection(curr); if (coll == null) { System.out.println(curr + " is not defined, creating it !!!"); CollectionManager service = (CollectionManager) colroot.getService("CollectionManager", "1.0"); // Build up the Collection XML configuration. String collectionConfig = "<collection compressed=\"true\" " + " name=\"" + "exampleColl" + "\">" + " <filer class=\"org.apache.xindice.core.filer.BTreeFiler\"/>" + "</collection>"; coll = service.createCollection("exampleColl", DOMParser.toDocument( collectionConfig)); } // create or retrieve indexer toto CollectionManager cm = (CollectionManager) coll.getService( "CollectionManager", "1.0"); // check if indexer exists String[] idxrs = cm.listIndexers(); for (int i = 0; i < idxrs.length; i++) { if (idxrs[i].equals("toto")) { System.out.println("indexer toto already present "); return; } } System.out.println("creating indexer toto "); Document doc = new DocumentImpl(); Element elt = doc.createElement("index"); elt.setAttribute("class", "org.apache.xindice.core.indexer.NameIndexer"); elt.setAttribute("name", "toto"); elt.setAttribute("pattern", "titi"); doc.appendChild(elt); cm.createIndexer(doc); } catch (XindiceException ex) { System.out.println("init error : " + ex.getMessage()); } catch (IllegalAccessException ex) { System.out.println("init error : " + ex.getMessage()); } catch (InstantiationException ex) { System.out.println("init error : " + ex.getMessage()); } catch (XMLDBException ex) { System.out.println("init error : " + ex.getMessage()); } catch (ClassNotFoundException ex) { System.out.println("init error : " + ex.getMessage()); } finally { if (coll != null) { try { coll.close(); } catch (XMLDBException ex1) { } } if (colroot != null) { try { colroot.close(); } catch (XMLDBException ex2) { } } } } }