You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by cz...@apache.org on 2007/01/11 17:15:23 UTC

svn commit: r495275 - in /cocoon/trunk/blocks/cocoon-databases/cocoon-databases-hsqldb-server/src/main: java/org/apache/cocoon/components/hsqldb/ resources/META-INF/cocoon/spring/

Author: cziegeler
Date: Thu Jan 11 08:15:22 2007
New Revision: 495275

URL: http://svn.apache.org/viewvc?view=rev&rev=495275
Log:
Allow configuration of more than one database

Removed:
    cocoon/trunk/blocks/cocoon-databases/cocoon-databases-hsqldb-server/src/main/java/org/apache/cocoon/components/hsqldb/Server.java
Modified:
    cocoon/trunk/blocks/cocoon-databases/cocoon-databases-hsqldb-server/src/main/java/org/apache/cocoon/components/hsqldb/ServerImpl.java
    cocoon/trunk/blocks/cocoon-databases/cocoon-databases-hsqldb-server/src/main/resources/META-INF/cocoon/spring/cocoon-hsqldb-block.xml

Modified: cocoon/trunk/blocks/cocoon-databases/cocoon-databases-hsqldb-server/src/main/java/org/apache/cocoon/components/hsqldb/ServerImpl.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-databases/cocoon-databases-hsqldb-server/src/main/java/org/apache/cocoon/components/hsqldb/ServerImpl.java?view=diff&rev=495275&r1=495274&r2=495275
==============================================================================
--- cocoon/trunk/blocks/cocoon-databases/cocoon-databases-hsqldb-server/src/main/java/org/apache/cocoon/components/hsqldb/ServerImpl.java (original)
+++ cocoon/trunk/blocks/cocoon-databases/cocoon-databases-hsqldb-server/src/main/java/org/apache/cocoon/components/hsqldb/ServerImpl.java Thu Jan 11 08:15:22 2007
@@ -18,6 +18,9 @@
 
 import java.io.File;
 import java.io.IOException;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Properties;
 
 import javax.servlet.ServletContext;
 
@@ -48,18 +51,12 @@
     /** The threadpool name to be used for daemon thread */
     private String daemonThreadPoolName = "daemon";
 
-    /** The path to the db. */
-    private String path = DEFAULT_DB_PATH;
-
     /** By default we use the logger for this class. */
     private Log logger = LogFactory.getLog(getClass());
 
     /** The servlet context. */
     private ServletContext servletContext;
 
-    /** The db name. */
-    private String name = DEFAULT_DB_NAME;
-
     /** The runnable manager. */
     private RunnableManager runnableManager;
 
@@ -67,10 +64,14 @@
     private boolean silent = DEFAULT_SILENT;
     private int port = DEFAULT_PORT;
 
+    private Properties databases;
+
     public ServerImpl() {
         hsqlServer.setLogWriter(null); /* Remove console log */
         hsqlServer.setErrWriter(null); /* Remove console log */
-        hsqlServer.setNoSystemExit(true);        
+        hsqlServer.setNoSystemExit(true);
+        this.databases = new Properties();
+        this.databases.setProperty(DEFAULT_DB_NAME, DEFAULT_DB_PATH);
     }
 
     public Log getLogger() {
@@ -89,8 +90,8 @@
         this.daemonThreadPoolName = name;
     }
 
-    public void setPath(String newPath) {
-        this.path = newPath;
+    public void setDatabases(Properties p) {
+        this.databases = p;
     }
 
     public void setPort(int p) {
@@ -105,10 +106,6 @@
         this.trace = trace;
     }
 
-    public void setName(String newName) {
-        this.name = newName;
-    }
-
     public void setServletContext(ServletContext c) {
         this.servletContext = c;
     }
@@ -121,6 +118,11 @@
      * Initialize the ServerImpl.
      */
     public void init() {
+        if ( this.databases == null || this.databases.size() == 0 ) {
+            this.getLogger().warn("HSQLDB Server is configured, but no databases are configured!");
+            this.getLogger().warn("HSQLDB Server not started.");
+            return;
+        }
         this.hsqlServer.setSilent(this.silent);
         this.hsqlServer.setTrace(this.trace);
         this.hsqlServer.setPort(this.port);
@@ -130,26 +132,33 @@
                               ", trace: " + hsqlServer.isTrace());
         }
 
-        final String dbCfgPath = this.path;
-        String dbPath = dbCfgPath;
-        // Test if we are running inside a WAR file
-        if(dbPath.startsWith(ServerImpl.CONTEXT_PROTOCOL)) {
-            dbPath = this.servletContext.getRealPath(dbPath.substring(ServerImpl.CONTEXT_PROTOCOL.length()));
-        }
-        if (dbPath == null) {
-            throw new IllegalArgumentException("The hsqldb cannot be used inside an unexpanded WAR file. " +
-                                         "Real path for <" + dbCfgPath + "> is null.");
-        }
-
-        try {
-            hsqlServer.setDatabasePath(0, new File(dbPath).getCanonicalPath() + File.separator + name);
-            hsqlServer.setDatabaseName(0, name);
-        } catch (IOException e) {
-            throw new RuntimeException("Could not get database directory <" + dbPath + ">", e);
-        }
-
-        if (getLogger().isDebugEnabled()) {
-            getLogger().debug("Database path is <" + hsqlServer.getDatabasePath(0, true) + ">");
+        final Iterator i = this.databases.entrySet().iterator();
+        int index = 0;
+        while ( i.hasNext() ) {
+            final Map.Entry current = (Map.Entry)i.next();
+            final String name = current.getKey().toString();
+            final String dbCfgPath = current.getValue().toString();
+            String dbPath = dbCfgPath;
+            // Test if we are running inside a WAR file
+            if (dbPath.startsWith(ServerImpl.CONTEXT_PROTOCOL)) {
+                dbPath = this.servletContext.getRealPath(dbPath.substring(ServerImpl.CONTEXT_PROTOCOL.length()));
+            }
+            if (dbPath == null) {
+                throw new IllegalArgumentException("The hsqldb cannot be used inside an unexpanded WAR file. " +
+                                             "Real path for <" + dbCfgPath + "> is null.");
+            }
+
+            try {
+                hsqlServer.setDatabasePath(index, new File(dbPath).getCanonicalPath() + File.separator + name);
+                hsqlServer.setDatabaseName(index, name);
+            } catch (IOException e) {
+                throw new RuntimeException("Could not get database directory <" + dbPath + ">", e);
+            }
+
+            if (getLogger().isDebugEnabled()) {
+                getLogger().debug("Database path for " + name + " is <" + hsqlServer.getDatabasePath(index, true) + ">, index " + index);
+            }
+            index++;
         }
         this.start();
     }

Modified: cocoon/trunk/blocks/cocoon-databases/cocoon-databases-hsqldb-server/src/main/resources/META-INF/cocoon/spring/cocoon-hsqldb-block.xml
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-databases/cocoon-databases-hsqldb-server/src/main/resources/META-INF/cocoon/spring/cocoon-hsqldb-block.xml?view=diff&rev=495275&r1=495274&r2=495275
==============================================================================
--- cocoon/trunk/blocks/cocoon-databases/cocoon-databases-hsqldb-server/src/main/resources/META-INF/cocoon/spring/cocoon-hsqldb-block.xml (original)
+++ cocoon/trunk/blocks/cocoon-databases/cocoon-databases-hsqldb-server/src/main/resources/META-INF/cocoon/spring/cocoon-hsqldb-block.xml Thu Jan 11 08:15:22 2007
@@ -28,8 +28,9 @@
       |  port   : number      port where the server is listening
       |  silent : true/false  display all queries
       |  trace  : true/false  display JDBC trace messages
-      |  name   : string      name of the HSQL-DB
-      |  path   : string      path to the database - context-protocol is resolved
+      |  databases : Properties configuring the databases, the key is the name of the
+      |              database and the value is the path to the database. Context protocol
+      |              can be used.
       +-->
   <bean name="org.apache.cocoon.components.hsqldb.Server"
         class="org.apache.cocoon.components.hsqldb.ServerImpl"
@@ -40,7 +41,10 @@
     <property name="silent" value="true"/>
     <property name="trace" value="false"/>
     <property name="threadPoolName" value="daemon"/>
-    <property name="name" value="cocoondb"/>
-    <property name="path" value="${org.apache.cocoon.hsqldb.server.db.path}"/>
+    <property name="databases">
+      <value>
+        cocoondb=${org.apache.cocoon.hsqldb.server.db.path}
+      </value>
+    </property>
   </bean>
 </beans>