svn commit: r523128 - in /xml/xindice/trunk: build.xml config/web.xml java/src/org/apache/xindice/server/Xindice.java java/src/org/apache/xindice/server/XindiceServlet.java status.xml xindice.sh

[email protected]
Newsgroups gmane.text.xml.xindice.devel
Message-ID <[email protected]>
Author: vgritsenko
Date: Tue Mar 27 18:00:00 2007
New Revision: 523128

URL: http://svn.apache.org/viewvc?view=rev&rev=523128
Log:
            <action dev="VG" type="update">
                Moved configuration file in WAR file to /WEB-INF/config. Updated
                XindiceServlet to check for xindice.configuration system property
                before attempting to load configuration from WAR file.
            </action>


Modified:
    xml/xindice/trunk/build.xml
    xml/xindice/trunk/config/web.xml
    xml/xindice/trunk/java/src/org/apache/xindice/server/Xindice.java
    xml/xindice/trunk/java/src/org/apache/xindice/server/XindiceServlet.java
    xml/xindice/trunk/status.xml
    xml/xindice/trunk/xindice.sh

Modified: xml/xindice/trunk/build.xml
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/build.xml?view=diff&rev=523128&r1=523127&r2=523128
==============================================================================
--- xml/xindice/trunk/build.xml (original)
+++ xml/xindice/trunk/build.xml Tue Mar 27 18:00:00 2007
@@ -296,11 +296,8 @@
 
         <war destfile="${dist.dir}/${project.filename}-${project.version}.war"
              update="false" webxml="config/web.xml">
-            <webinf dir="${config.dir}">
-                <include name="system.xml"/>
-            </webinf>
             <webinf dir=".">
-                <!-- TODO include name="${config.dir}/system.xml"/ -->
+                <include name="${config.dir}/system.xml"/>
                 <include name="${config.dir}/commands.xml"/>
             </webinf>
             <webinf dir="${build.dir}/war-bin">

Modified: xml/xindice/trunk/config/web.xml
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/config/web.xml?view=diff&rev=523128&r1=523127&r2=523128
==============================================================================
--- xml/xindice/trunk/config/web.xml (original)
+++ xml/xindice/trunk/config/web.xml Tue Mar 27 18:00:00 2007
@@ -45,7 +45,7 @@
       -->
     <init-param>
       <param-name>xindice.configuration</param-name>
-      <param-value>WEB-INF/system.xml</param-value>
+      <param-value>WEB-INF/config/system.xml</param-value>
     </init-param>
 
     <load-on-startup>1</load-on-startup>

Modified: xml/xindice/trunk/java/src/org/apache/xindice/server/Xindice.java
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/server/Xindice.java?view=diff&rev=523128&r1=523127&r2=523128
==============================================================================
--- xml/xindice/trunk/java/src/org/apache/xindice/server/Xindice.java (original)
+++ xml/xindice/trunk/java/src/org/apache/xindice/server/Xindice.java Tue Mar 27 18:00:00 2007
@@ -39,7 +39,8 @@
     public static final String PROP_XINDICE_DB_HOME = "xindice.db.home";
 
     /**
-     * System property specyfying location of the Xindice configuration file (system.xml).
+     * System property specyfying location of the Xindice database configuration
+     * file (system.xml).
      */
     public static final String PROP_XINDICE_CONFIGURATION = "xindice.configuration";
 
@@ -51,23 +52,23 @@
     public static final String Codename = "Christmas+.2";
 
     // Copyright/Authorship Information
-    public static final String Title = "Xindice";
-    public static final String Author = "The Apache Foundation";
-    public static final String Year = "2003";
-    public static final String Company = "The Apache Foundation";
-    public static final String URL = "http://xml.apache.org/xindice/";
+    public static final String Title   = "Xindice";
+    public static final String Author  = "The Apache Software Foundation";
+    public static final String Year    = "2003";
+    public static final String Company = "The Apache Software Foundation";
+    public static final String URL     = "http://xml.apache.org/xindice/";
 
     // Default configuration if a system.xml file isn't available.
     public static final String DEFAULT_CONFIGURATION
             = "<xindice>"
-            + "    <root-collection dbroot=\"./db/\" name=\"db\">"
+            + "    <root-collection dbroot='./db/' name='db'>"
             + "        <queryengine>"
-            + "            <resolver autoindex=\"false\" class=\"org.apache.xindice.core.query.XPathQueryResolver\" />"
-            + "            <resolver class=\"org.apache.xindice.core.xupdate.XUpdateQueryResolver\" />"
+            + "            <resolver autoindex='false' class='org.apache.xindice.core.query.XPathQueryResolver'/>"
+            + "            <resolver class='org.apache.xindice.core.xupdate.XUpdateQueryResolver'/>"
             + "        </queryengine>"
             + "    </root-collection>"
             + "    <xml-rpc>"
-            + "        <driver name=\"xerces\" />"
+            + "        <driver name='xerces'/>"
             + "    </xml-rpc>"
             + "</xindice>";
 }

Modified: xml/xindice/trunk/java/src/org/apache/xindice/server/XindiceServlet.java
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/server/XindiceServlet.java?view=diff&rev=523128&r1=523127&r2=523128
==============================================================================
--- xml/xindice/trunk/java/src/org/apache/xindice/server/XindiceServlet.java (original)
+++ xml/xindice/trunk/java/src/org/apache/xindice/server/XindiceServlet.java Tue Mar 27 18:00:00 2007
@@ -37,6 +37,7 @@
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
@@ -110,63 +111,64 @@
             Configuration[] rootConfigurations = configuration.getChildren("root-collection");
             if (rootConfigurations.length == 0) {
                 throw new ConfigurationException("The database configuration is missing the <root-collection> element");
-            } else {
-                for (int i = 0; i < rootConfigurations.length; i++) {
-                    Configuration rootConfiguration = rootConfigurations[i];
-                    String name = rootConfiguration.getAttribute(Database.NAME);
-
-                    //
-                    // We need to ensure that the database points to a place where it makes
-                    // sense. If the path in the system.xml file is an absolute path, then
-                    // honor it. If it's not, we first check for the system property "xindice.db.home"
-                    // and if the lookup is successful we use it as the database root parent. If
-                    // the property is not set, we use /WEB-INF relative to the servlet context, unless
-                    // the war has not been unpacked. In this case, we throw an exception and
-                    // ask the user to specify the location of database root
-                    //
-                    String dbRoot = rootConfiguration.getAttribute(Database.DBROOT, Database.DBROOT_DEFAULT);
-
-                    //
-                    // If there is no absolute path, we have to perform some checks.
-                    //
-                    if (!new File(dbRoot).isAbsolute()) {
-
-                        // Stupid hack but spec compliant:
-                        // If getRealPath() returns null the war archive has not been unpacked.
-                        String realPath = servletConfig.getServletContext().getRealPath("/WEB-INF");
-
-                        // Let's see if the property was specified.
-                        String home = System.getProperty(Xindice.PROP_XINDICE_DB_HOME);
-                        if (log.isDebugEnabled()) {
-                            log.debug(Xindice.PROP_XINDICE_DB_HOME + " is set to " + home);
-                        }
-
-                        if (home != null) {
-                            dbRoot = new File(home + File.separator + dbRoot).getCanonicalPath();
-                        } else if (realPath != null) {
-                            dbRoot = new File(realPath + File.separator + dbRoot).getCanonicalPath();
-                            log.warn("The database '" + name + "' root directory has been set to " + dbRoot +
-                                     ". Keep in mind that if a war upgrade will take place the database will be lost.");
-                        } else {
-                            throw new ConfigurationException(
-                                    "The database '" + name + "' configuration points to a relative path, "
-                                    + "but there was no " + Xindice.PROP_XINDICE_DB_HOME + " property set. "
-                                    + "Furthermore, the war was not unpacked by the application server "
-                                    + "so Xindice was unable to find a database location "
-                                    + "Please check /WEB-INF/system.xml and set an absolute path "
-                                    + "as the \"dbroot\" attribute of \"root-collection\" "
-                                    + "or specify a suitable " + Xindice.PROP_XINDICE_DB_HOME + " system property.");
-                        }
-                        rootConfiguration.setAttribute(Database.DBROOT, dbRoot);
+            }
+
+            for (int i = 0; i < rootConfigurations.length; i++) {
+                Configuration rootConfiguration = rootConfigurations[i];
+                String name = rootConfiguration.getAttribute(Database.NAME);
+
+                //
+                // We need to ensure that the database points to a place where it makes
+                // sense. If the path in the system.xml file is an absolute path, then
+                // honor it. If it's not, we first check for the system property "xindice.db.home"
+                // and if the lookup is successful we use it as the database root parent. If
+                // the property is not set, we use /WEB-INF relative to the servlet context, unless
+                // the war has not been unpacked. In this case, we throw an exception and
+                // ask the user to specify the location of database root
+                //
+                String dbRoot = rootConfiguration.getAttribute(Database.DBROOT, Database.DBROOT_DEFAULT);
+
+                //
+                // If there is no absolute path, we have to perform some checks.
+                //
+                if (!new File(dbRoot).isAbsolute()) {
+
+                    // Stupid hack but spec compliant:
+                    // If getRealPath() returns null the war archive has not been unpacked.
+                    String realPath = servletConfig.getServletContext().getRealPath("/WEB-INF");
+
+                    // Let's see if the property was specified.
+                    String home = System.getProperty(Xindice.PROP_XINDICE_DB_HOME);
+                    if (log.isDebugEnabled()) {
+                        log.debug(Xindice.PROP_XINDICE_DB_HOME + " is set to " + home);
+                    }
+
+                    if (home != null) {
+                        dbRoot = new File(home + File.separator + dbRoot).getCanonicalPath();
+                    } else if (realPath != null) {
+                        dbRoot = new File(realPath + File.separator + dbRoot).getCanonicalPath();
+                        log.warn("The database '" + name + "' root directory has been set to " + dbRoot +
+                                 ". Keep in mind that if a war upgrade will take place the database will be lost.");
+                    } else {
+                        throw new ConfigurationException(
+                                "The database '" + name + "' configuration points to a relative path, "
+                                + "but there was no " + Xindice.PROP_XINDICE_DB_HOME + " property set. "
+                                + "Furthermore, the war was not unpacked by the application server "
+                                + "so Xindice was unable to find a database location "
+                                + "Please check /WEB-INF/system.xml and set an absolute path "
+                                + "as the \"dbroot\" attribute of \"root-collection\" "
+                                + "or specify a suitable " + Xindice.PROP_XINDICE_DB_HOME + " system property.");
                     }
 
-                    //
-                    // We need to use this method to be consistent between deployments (embed, standalone, etc)
-                    // and let the Database object maintain the set of Databases.
-                    //
-                    Database.getDatabase(rootConfiguration);
-                    log.info("Database '" + name + "' successfully opened");
+                    rootConfiguration.setAttribute(Database.DBROOT, dbRoot);
                 }
+
+                //
+                // We need to use this method to be consistent between deployments (embed, standalone, etc)
+                // and let the Database object maintain the set of Databases.
+                //
+                Database.getDatabase(rootConfiguration);
+                log.info("Database '" + name + "' successfully opened");
             }
 
             // Setup the XML-RPC impl to support UTF-8 input via Xerces.
@@ -215,43 +217,52 @@
     /**
      * Loads the Xindice configuration file. The file is searched in the following locations:
      * <ul>
-     * <li>the <tt>ServletConfig.getInitParameter(Xindice.PROP_XINDICE_CONFIGURATION)</tt> variable located in the servlet
-     * configuration file</li>
-     * <li>use the default configuration stored in the <tt>Xindice</tt> class</li>
+     * <li>the <i>System.getProperty(Xindice.PROP_XINDICE_CONFIGURATION)</i> system property.
+     * <li>the <i>ServletConfig.getInitParameter(Xindice.PROP_XINDICE_CONFIGURATION)</i> servlet
+     * configuration parameter in web.xml file.</li>
+     * <li>default configuration stored in the <tt>Xindice</tt> class</li>
      * </ul>
      *
-     * <br/>
-     * TODO: we should probably try to load from the file system if we can't load it this way.
+     * @return Xindice configuration
+     * @throws ConfigurationException if unable to read configuration file or parse it
      */
     public Configuration loadConfiguration(ServletConfig servletConfig) {
         try {
-            Document configurationDocument;
-
-            String path = servletConfig.getInitParameter(Xindice.PROP_XINDICE_CONFIGURATION);
-            if (path != null) {
-                InputStream inputStream;
-                if (path.startsWith("/")) {
-                    // Absolute file path
-                    log.debug("Loading configuration from filesystem path " + path);
-                    inputStream = new FileInputStream(path);
-                } else {
-                    // Relative (to the context) path
-                    log.debug("Loading configuration from context path " + path);
-                    ServletContext context = servletConfig.getServletContext();
-                    inputStream = context.getResourceAsStream("/" + path);
+            InputStream in = null;
+            String path = System.getProperty(Xindice.PROP_XINDICE_CONFIGURATION);
+            if (path != null && path.length() > 0) {
+                // Configuration file specified by system property
+                log.info("Loading configuration from file path " + path + " (system property)");
+                in = new FileInputStream(path);
+            } else {
+                path = servletConfig.getInitParameter(Xindice.PROP_XINDICE_CONFIGURATION);
+                if (path != null && path.length() > 0) {
+                    if (path.startsWith("/")) {
+                        // Absolute file path
+                        log.info("Loading configuration from file path " + path);
+                        in = new FileInputStream(path);
+                    } else {
+                        // Relative (to the context) path
+                        log.info("Loading configuration from context path " + path);
+                        ServletContext context = servletConfig.getServletContext();
+                        in = context.getResourceAsStream("/" + path);
+                    }
                 }
+            }
 
+            Document doc;
+            if (in != null) {
                 try {
-                    configurationDocument = DOMParser.toDocument(inputStream);
+                    doc = DOMParser.toDocument(in);
                 } finally {
-                    inputStream.close();
+                    in.close();
                 }
             } else {
-                log.debug("Loading the standard configuration");
-                configurationDocument = DOMParser.toDocument(Xindice.DEFAULT_CONFIGURATION);
+                log.warn("Loading the standard configuration");
+                doc = DOMParser.toDocument(Xindice.DEFAULT_CONFIGURATION);
             }
 
-            return new Configuration(configurationDocument, false);
+            return new Configuration(doc, false);
         } catch (Exception e) {
             throw new ConfigurationException("Failed to load configuration.", e);
         }

Modified: xml/xindice/trunk/status.xml
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/status.xml?view=diff&rev=523128&r1=523127&r2=523128
==============================================================================
--- xml/xindice/trunk/status.xml (original)
+++ xml/xindice/trunk/status.xml Tue Mar 27 18:00:00 2007
@@ -117,7 +117,12 @@
     </todo>
 
     <changes>
-        <release version="1.1b5-dev" date="Mar 1 2007">
+        <release version="1.1b5-dev" date="(not released)">
+            <action dev="VG" type="update">
+                Moved configuration file in WAR file to /WEB-INF/config. Updated
+                XindiceServlet to check for xindice.configuration system property
+                before attempting to load configuration from WAR file.
+            </action>
             <action dev="VG" type="fix" fixes-bug="33148" due-to="Natalia Shilenkova">
                 Eliminate gap when index is registered but not created yet, causing
                 corruption of index file.

Modified: xml/xindice/trunk/xindice.sh
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/xindice.sh?view=diff&rev=523128&r1=523127&r2=523128
==============================================================================
--- xml/xindice/trunk/xindice.sh (original)
+++ xml/xindice/trunk/xindice.sh Tue Mar 27 18:00:00 2007
@@ -84,6 +84,9 @@
   XINDICE_HOME=`pwd`
 fi
 
+if [ "$XINDICE_DB_HOME" = "" ] ; then XINDICE_DB_HOME=$XINDICE_HOME ; fi
+if [ "$XINDICE_CONFIG" = "" ] ; then XINDICE_CONFIG=$XINDICE_HOME/config/system.xml ; fi
+
 if [ "$JETTY_PORT" = "" ] ; then
   JETTY_PORT=8888
 fi
@@ -129,6 +132,8 @@
   JETTY_CONFIG=`cygpath --path --windows "$JETTY_CONFIG"`
   JETTY_WEBAPP=`cygpath --path --windows "$JETTY_WEBAPP"`
   XINDICE_HOME=`cygpath --path --windows "$XINDICE_HOME"`
+  XINDICE_DB_HOME=`cygpath --path --windows "$XINDICE_DB_HOME"`
+  XINDICE_CONFIG=`cygpath --path --windows "$XINDICE_CONFIG"`
 fi
 
 case "$ACTION" in
@@ -147,14 +152,14 @@
         echo "Starting Xindice - Log files are under $XINDICE_HOME/logs"
         echo
 
-        nohup "$JAVACMD" $JAVA_OPTIONS -classpath "$CP" -Djava.endorsed.dirs=lib/endorsed -Dxindice.home="$XINDICE_HOME" -Dxindice.db.home="$XINDICE_HOME" -Dwebapp="$JETTY_WEBAPP" -Dorg.xml.sax.parser=org.apache.xerces.parsers.SAXParser -Djetty.port=$JETTY_PORT -Djetty.admin.port=$JETTY_ADMIN_PORT org.mortbay.jetty.Server "$JETTY_CONFIG" >> $XINDICE_HOME/logs/xindice.out 2>&1 &
+        nohup "$JAVACMD" $JAVA_OPTIONS -classpath "$CP" -Djava.endorsed.dirs=lib/endorsed -Dxindice.home="$XINDICE_HOME" -Dxindice.db.home="$XINDICE_DB_HOME" -Dxindice.configuration="$XINDICE_CONFIG" -Dwebapp="$JETTY_WEBAPP" -Dorg.xml.sax.parser=org.apache.xerces.parsers.SAXParser -Djetty.port=$JETTY_PORT -Djetty.admin.port=$JETTY_ADMIN_PORT org.mortbay.jetty.Server "$JETTY_CONFIG" >> $XINDICE_HOME/logs/xindice.out 2>&1 &
 
         echo $! > $XINDICE_PID
         echo "Xindice is running with PID `cat $XINDICE_PID`"
         ;;
 
   debug)
-        "$JAVACMD" $JAVA_OPTIONS -Xdebug -Xrunjdwp:transport=dt_socket,address=$JAVA_DEBUG_PORT,server=y,suspend=n -classpath "$CP" -Djava.endorsed.dirs=lib/endorsed -Dxindice.home="$XINDICE_HOME" -Dxindice.db.home="$XINDICE_HOME" -Dwebapp="$JETTY_WEBAPP" -Dorg.xml.sax.parser=org.apache.xerces.parsers.SAXParser -Djetty.port=$JETTY_PORT -Djetty.admin.port=$JETTY_ADMIN_PORT org.mortbay.jetty.Server "$JETTY_CONFIG" "$XINDICE_HOME/tools/jetty/conf/admin.xml" >> $XINDICE_HOME/logs/xindice.out 2>&1
+        "$JAVACMD" $JAVA_OPTIONS -Xdebug -Xrunjdwp:transport=dt_socket,address=$JAVA_DEBUG_PORT,server=y,suspend=n -classpath "$CP" -Djava.endorsed.dirs=lib/endorsed -Dxindice.home="$XINDICE_HOME" -Dxindice.db.home="$XINDICE_DB_HOME" -Dxindice.configuration="$XINDICE_CONFIG" -Dwebapp="$JETTY_WEBAPP" -Dorg.xml.sax.parser=org.apache.xerces.parsers.SAXParser -Djetty.port=$JETTY_PORT -Djetty.admin.port=$JETTY_ADMIN_PORT org.mortbay.jetty.Server "$JETTY_CONFIG" "$XINDICE_HOME/tools/jetty/conf/admin.xml" >> $XINDICE_HOME/logs/xindice.out 2>&1
         ;;
 
   stop)
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.