You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by Gabriel Bucher <ga...@razor.ch> on 2001/09/11 22:16:32 UTC

[PATCH] fix dir context problem in JDBC store

 > 12. Fix dir context problem in JDBC store
This patches fix the dir context problems in the JDBC store!

file://conf/sqlResources.xml means <james_app_home>/conf/sqlResources.xml

Buchi

PS: I will also take a look into the nntp-repository. I think, there is 
the same to do!


Index: build.xml
===================================================================
RCS file: /home/cvspublic/jakarta-james/build.xml,v
retrieving revision 1.75
diff -u -r1.75 build.xml
--- build.xml	2001/08/11 10:31:17	1.75
+++ build.xml	2001/09/11 19:51:05
@@ -326,7 +326,7 @@
          <include name="activation.jar"/>
          <include name="mail_1_2.jar"/>
          <include name="jakarta-oro-2.0.1.jar"/>
-        <include name="mysql-2.0.4.jar"/>
+<!--        <include name="mysql-2.0.4.jar"/> -->
        </zipfileset>

        <zipfileset dir="${build.conf}" fullpath="conf/config.xml">
@@ -341,6 +341,9 @@
          <include name="james-server.xml"/>
        </zipfileset>

+      <zipfileset dir="${build.conf}" prefix="conf">
+        <include name="sqlResources.xml"/>
+      </zipfileset>
      </jar>

    </target>
@@ -374,6 +377,7 @@
          <include name="jmxtools.jar"/>
          <include name="logkit.jar"/>
          <include name="xerces.jar"/>
+        <include name="mysql-2.0.4.jar"/>
        </fileset>
      </copy>

Index: src/conf/james-config.xml
===================================================================
RCS file: /home/cvspublic/jakarta-james/src/conf/james-config.xml,v
retrieving revision 1.10
diff -u -r1.10 james-config.xml
--- src/conf/james-config.xml	2001/09/11 04:29:30	1.10
+++ src/conf/james-config.xml	2001/09/11 19:52:36
@@ -455,7 +455,7 @@
              <type>MAIL</type>
            </types>
            <config>
-            <sqlFile>dist/conf/sqlResources.xml</sqlFile>
+            <sqlFile>file://conf/sqlResources.xml</sqlFile>
            </config>
          </repository>
          <repository
@@ -467,7 +467,7 @@
              <type>SPOOL</type>
            </types>
            <config>
-            <sqlFile>dist/conf/sqlResources.xml</sqlFile>
+            <sqlFile>file://conf/sqlResources.xml</sqlFile>
              <filestore>file://var/dbspool</filestore>
            </config>
          </repository>
@@ -533,27 +533,27 @@
        <repository name="LocalUsers"
 
class="org.apache.james.userrepository.JamesUsersJdbcRepository"
                    destinationURL="db://maildb/users">
-          <sqlFile>dist/conf/sqlResources.xml</sqlFile>
+          <sqlFile>file://conf/sqlResources.xml</sqlFile>
        </repository>
        <!-- The list used by the default ListServ mailet -->
        <repository name="list-james"
 
class="org.apache.james.userrepository.ListUsersJdbcRepository"
                    destinationURL="db://maildb/lists/list-james">
-          <sqlFile>dist/conf/sqlResources.xml</sqlFile>
+          <sqlFile>file://conf/sqlResources.xml</sqlFile>
        </repository>
        <!-- An example mailinglist repository, with no "listName" parameter
             specified. Uses the default value from the sql definition 
file. -->
        <repository name="list-test"
 
class="org.apache.james.userrepository.ListUsersJdbcRepository"
                    destinationURL="db://maildb/lists">
-          <sqlFile>dist/conf/sqlResources.xml</sqlFile>
+          <sqlFile>file://conf/sqlResources.xml</sqlFile>
        </repository>
        <!-- An example UserRepository for DefaultUser implementations. 
Testing purposes
             only. -->
        <repository name="default-users"
 
class="org.apache.james.userrepository.DefaultUsersJdbcRepository"
                    destinationURL="db://maildb/DefaultUsers">
-          <sqlFile>dist/conf/sqlResources.xml</sqlFile>
+          <sqlFile>file://conf/sqlResources.xml</sqlFile>
        </repository>
    </users-store>

@@ -565,23 +565,23 @@
      <data-sources>
          <!-- Example, connecting to a MySQL database called "mail" on 
localhost
          -->
-        <!--
+
          <data-source name="maildb"
- 
type="org.apache.avalon.excalibur.datasource.JdbcDataSource">
+ 
class="org.apache.avalon.excalibur.datasource.JdbcDataSource">
              <driver>org.gjt.mm.mysql.Driver</driver>
-            <dburl>jdbc:mysql://127.0.0.1/mail</dburl>
-            <user>username</user>
-            <password>password</password>
+            <dburl>jdbc:mysql://127.0.0.1/james</dburl>
+            <user>root</user>
+            <password>root</password>
          </data-source>
-        -->
-
+
+<!--
          <data-source name="maildb"
-        			type="org.apache.avalon.excalibur.datasource.JdbcDataSource">
+        			class="org.apache.avalon.excalibur.datasource.JdbcDataSource">
          	<driver>com.inet.tds.TdsDriver</driver>
          	<dburl>jdbc:inetdae7:127.0.0.1?database=James</dburl>
          	<user>sa_james</user>
          	<password>blahblah</password>
-        </data-source>
+        </data-source> -->
      </data-sources>
    </database-connections>

Index: src/conf/sqlResources.xml
===================================================================
RCS file: /home/cvspublic/jakarta-james/src/conf/sqlResources.xml,v
retrieving revision 1.1
diff -u -r1.1 sqlResources.xml
--- src/conf/sqlResources.xml	2001/09/11 04:29:30	1.1
+++ src/conf/sqlResources.xml	2001/09/11 19:52:42
@@ -117,7 +117,7 @@
      <sql name="createTable" db="mysql">
          CREATE TABLE ${table} (
          	message_name varchar (200) NOT NULL PRIMARY KEY,
-        	repository_name varchar (200) NOT NULL PRIMARY KEY,
+        	repository_name varchar (200) NOT NULL ,
          	message_state varchar (30) NOT NULL ,
          	error_message varchar (200) NULL ,
          	sender varchar (200) NULL ,
Index: src/java/org/apache/james/core/AvalonMailStore.java
===================================================================
RCS file: 
/home/cvspublic/jakarta-james/src/java/org/apache/james/core/AvalonMailStore.java,v
retrieving revision 1.6
diff -u -r1.6 AvalonMailStore.java
--- src/java/org/apache/james/core/AvalonMailStore.java	2001/09/11 04:32:44	1.6
+++ src/java/org/apache/james/core/AvalonMailStore.java	2001/09/11 19:52:44
@@ -20,6 +20,9 @@
  import org.apache.avalon.framework.configuration.Configuration;
  import org.apache.avalon.framework.configuration.ConfigurationException;
  import org.apache.avalon.framework.configuration.DefaultConfiguration;
+import org.apache.avalon.framework.context.Context;
+import org.apache.avalon.framework.context.ContextException;
+import org.apache.avalon.framework.context.Contextualizable;
  import org.apache.avalon.framework.logger.Loggable;
  import org.apache.avalon.framework.logger.AbstractLoggable;
  import org.apache.james.services.MailRepository;
@@ -38,7 +41,7 @@
   */
  public class AvalonMailStore
      extends AbstractLoggable
-    implements Block, Composable, Configurable, MailStore, Initializable {
+    implements Block, Contextualizable, Composable, Configurable, 
Initializable, MailStore {

      private static final String REPOSITORY_NAME = "Repository";
      private static long id;
@@ -51,11 +54,17 @@
      // map of [Repository Class]->default config for repository.
      private HashMap defaultConfigs;

+    protected Context                context;
      protected Configuration          configuration;
      protected ComponentManager       componentManager;

      private SpoolRepository inboundSpool;

+    public void contextualize(final Context context)
+            throws ContextException {
+        this.context = context;
+    }
+
      public void compose( final ComponentManager componentManager )
          throws ComponentException
      {
@@ -189,11 +198,14 @@
                     if (reply instanceof Loggable) {
  		       setupLogger(reply);
                      }
-                    if (reply instanceof Configurable) {
-                        ((Configurable) reply).configure(config);
+                    if (reply instanceof Contextualizable) {
+                        ((Contextualizable) reply).contextualize(context);
                      }
                      if (reply instanceof Composable) {
                          ((Composable) reply).compose( componentManager );
+                    }
+                    if (reply instanceof Configurable) {
+                        ((Configurable) reply).configure(config);
                      }
                      if (reply instanceof Initializable) {
                          ((Initializable) reply).initialize();
Index: src/java/org/apache/james/core/AvalonUsersStore.java
===================================================================
RCS file: 
/home/cvspublic/jakarta-james/src/java/org/apache/james/core/AvalonUsersStore.java,v
retrieving revision 1.2
diff -u -r1.2 AvalonUsersStore.java
--- src/java/org/apache/james/core/AvalonUsersStore.java	2001/06/10 13:19:57	1.2
+++ src/java/org/apache/james/core/AvalonUsersStore.java	2001/09/11 19:52:44
@@ -19,6 +19,9 @@
  import org.apache.avalon.framework.configuration.Configurable;
  import org.apache.avalon.framework.configuration.Configuration;
  import org.apache.avalon.framework.configuration.ConfigurationException;
+import org.apache.avalon.framework.context.Context;
+import org.apache.avalon.framework.context.ContextException;
+import org.apache.avalon.framework.context.Contextualizable;
  import org.apache.avalon.framework.logger.AbstractLoggable;
  import org.apache.james.services.UsersRepository;
  import org.apache.james.services.UsersStore;
@@ -30,12 +33,19 @@
   */
  public class AvalonUsersStore
      extends AbstractLoggable
-    implements Block, Composable, Configurable, UsersStore, Initializable {
+    implements Block, Contextualizable, Composable, Configurable, 
Initializable, UsersStore {

      private HashMap repositories;
+    protected Context                context;
      protected Configuration          configuration;
      protected ComponentManager       componentManager;

+
+    public void contextualize(final Context context)
+            throws ContextException {
+        this.context = context;
+    }
+
      public void configure( final Configuration configuration )
          throws ConfigurationException {
          this.configuration = configuration;
@@ -64,18 +74,15 @@

              setupLogger((Component)rep);

+            if (rep instanceof Contextualizable) {
+                ((Contextualizable) rep).contextualize(context);
+            }
              if (rep instanceof Composable) {
                  ((Composable) rep).compose( componentManager );
              }
-
              if (rep instanceof Configurable) {
                  ((Configurable) rep).configure(repConf);
              }
-            /*
-              if (rep instanceof Contextualizable) {
-              ((Contextualizable) rep).contextualize(context);
-              }
-            */
              if (rep instanceof Initializable) {
                  ((Initializable) rep).initialize();
              }
Index: src/java/org/apache/james/mailrepository/AvalonMailRepository.java
===================================================================
RCS file: 
/home/cvspublic/jakarta-james/src/java/org/apache/james/mailrepository/AvalonMailRepository.java,v
retrieving revision 1.7
diff -u -r1.7 AvalonMailRepository.java
--- src/java/org/apache/james/mailrepository/AvalonMailRepository.java	2001/09/11 04:33:08	1.7
+++ src/java/org/apache/james/mailrepository/AvalonMailRepository.java	2001/09/11 19:52:50
@@ -13,6 +13,7 @@
  import java.io.InputStream;
  import java.io.OutputStream;
  import java.util.Iterator;
+import org.apache.avalon.framework.activity.Initializable;
  import org.apache.avalon.framework.component.Component;
  import org.apache.avalon.framework.component.ComponentException;
  import org.apache.avalon.framework.component.ComponentManager;
@@ -46,7 +47,7 @@
   */
  public class AvalonMailRepository
      extends AbstractLoggable
-    implements MailRepository, Component, Configurable, Composable {
+    implements MailRepository, Component, Configurable, Composable, 
Initializable {

      private Lock lock;
      protected static boolean DEEP_DEBUG = false;
@@ -60,6 +61,7 @@

      public void configure(Configuration conf) throws 
ConfigurationException {
          destination = conf.getAttribute("destinationURL");
+        getLogger().debug("AvalonMailRepository.destinationURL: " + 
destination);
          String checkType = conf.getAttribute("type");
          if (! (checkType.equals("MAIL") || checkType.equals("SPOOL")) ) {
              getLogger().warn( "Attempt to configure 
AvalonMailRepository as " +
@@ -69,12 +71,16 @@
          // ignore model
      }

+
      public void compose( final ComponentManager componentManager )
-        throws ComponentException {
-        try {
-            store = (Store)componentManager.
-                lookup( 
"org.apache.avalon.cornerstone.services.store.Store" );
+            throws ComponentException {
+        store = (Store)componentManager.
+            lookup( "org.apache.avalon.cornerstone.services.store.Store" );
+    }

+    public void initialize()
+            throws Exception {
+        try {
              //prepare Configurations for object and stream repositories
              DefaultConfiguration objectConfiguration
                  = new DefaultConfiguration( "repository",
@@ -99,7 +105,7 @@
          } catch (Exception e) {
              final String message = "Failed to retrieve Store 
component:" + e.getMessage();
              getLogger().error( message, e );
-            throw new ComponentException( message, e );
+            throw e;
          }
      }

Index: src/java/org/apache/james/mailrepository/JDBCMailRepository.java
===================================================================
RCS file: 
/home/cvspublic/jakarta-james/src/java/org/apache/james/mailrepository/JDBCMailRepository.java,v
retrieving revision 1.5
diff -u -r1.5 JDBCMailRepository.java
--- src/java/org/apache/james/mailrepository/JDBCMailRepository.java	2001/09/11 04:33:08	1.5
+++ src/java/org/apache/james/mailrepository/JDBCMailRepository.java	2001/09/11 19:52:53
@@ -14,6 +14,7 @@
  import java.sql.ResultSet;
  import java.sql.SQLException;
  import java.io.ByteArrayOutputStream;
+import java.io.File;
  import java.io.FileInputStream;
  import java.io.InputStream;
  import java.io.IOException;
@@ -44,7 +45,11 @@
  import org.apache.avalon.framework.configuration.Configuration;
  import org.apache.avalon.framework.configuration.ConfigurationException;
  import org.apache.avalon.framework.configuration.DefaultConfiguration;
+import org.apache.avalon.framework.context.Context;
+import org.apache.avalon.framework.context.ContextException;
+import org.apache.avalon.framework.context.Contextualizable;
  import org.apache.avalon.framework.logger.AbstractLoggable;
+import org.apache.avalon.phoenix.BlockContext;
  import org.apache.james.core.MimeMessageWrapper;
  import org.apache.james.core.MailImpl;
  import org.apache.james.services.MailRepository;
@@ -74,8 +79,9 @@
   */
  public class JDBCMailRepository
      extends AbstractLoggable
-    implements MailRepository, Component, Configurable, Composable, 
Initializable
+    implements MailRepository, Component, Contextualizable, Composable, 
Configurable, Initializable
  {
+    protected Context context;

      private Lock lock;

@@ -96,6 +102,12 @@
      // Contains all of the sql strings for this component.
      protected SqlResources sqlQueries;

+
+    public void contextualize(final Context context)
+            throws ContextException {
+        this.context = context;
+    }
+
      public void configure(Configuration conf) throws 
ConfigurationException
      {
          getLogger().debug(this.getClass().getName() + ".configure()");
@@ -138,6 +150,10 @@

          filestore = conf.getChild("filestore").getValue(null);
          sqlFileName = conf.getChild("sqlFile").getValue();
+        if (!sqlFileName.startsWith("file://")) {
+            throw new ConfigurationException
+                ("Malformed sqlFile - Must be of the format 
\"file://<filename>\".");
+        }
      }

      public void compose( final ComponentManager componentManager )
@@ -197,7 +213,10 @@

          try{
              // Initialise the sql strings.
-            java.io.File sqlFile = new java.io.File(sqlFileName);
+            String fileName = sqlFileName.substring("file://".length());
+            fileName = ((BlockContext)context).getBaseDirectory() +
+                        File.separator + fileName;
+            File sqlFile = (new File(fileName)).getCanonicalFile();

              String resourceName = 
"org.apache.james.mailrepository.JDBCMailRepository";

Index: 
src/java/org/apache/james/userrepository/AbstractJdbcUsersRepository.java
===================================================================
RCS file: 
/home/cvspublic/jakarta-james/src/java/org/apache/james/userrepository/AbstractJdbcUsersRepository.java,v
retrieving revision 1.1
diff -u -r1.1 AbstractJdbcUsersRepository.java
--- src/java/org/apache/james/userrepository/AbstractJdbcUsersRepository.java	2001/09/11 04:34:49	1.1
+++ src/java/org/apache/james/userrepository/AbstractJdbcUsersRepository.java	2001/09/11 19:52:57
@@ -18,6 +18,7 @@
  import org.apache.avalon.framework.logger.*;
  import org.apache.avalon.excalibur.datasource.*;
  import 
org.apache.avalon.cornerstone.services.datasource.DataSourceSelector;
+import org.apache.avalon.phoenix.BlockContext;

  import java.sql.*;
  import java.util.*;
@@ -47,8 +48,9 @@
   * @author Darrell DeBoer <dd...@bigdaz.com>
   */
  public abstract class AbstractJdbcUsersRepository extends 
AbstractUsersRepository
-    implements UsersRepository, Loggable, Component, Composable, 
Configurable, Initializable
+    implements UsersRepository, Loggable, Component, Contextualizable, 
Composable, Configurable, Initializable
  {
+    protected Context context;
      protected Map m_sqlParameters;
      private String m_sqlFileName;
      private String m_datasourceName;
@@ -71,6 +73,11 @@
      private String m_createUserTableSql;


+    public void contextualize(final Context context)
+            throws ContextException {
+        this.context = context;
+    }
+
      /**
       * Compose the repository with the DataSourceSelector component.
       */
@@ -140,6 +147,10 @@

          // Get the SQL file location
          m_sqlFileName = configuration.getChild("sqlFile", 
true).getValue();
+        if (!m_sqlFileName.startsWith("file://")) {
+            throw new ConfigurationException
+                ("Malformed sqlFile - Must be of the format 
\"file://<filename>\".");
+        }

          // Get other sql parameters from the configuration object,
          // if any.
@@ -174,7 +185,10 @@
              DatabaseMetaData dbMetaData = conn.getMetaData();

              // Initialise the sql strings.
-            java.io.File sqlFile = new java.io.File(m_sqlFileName);
+            String fileName = m_sqlFileName.substring("file://".length());
+            fileName = ((BlockContext)context).getBaseDirectory() +
+                        File.separator + fileName;
+            File sqlFile = (new File(fileName)).getCanonicalFile();

              getLogger().debug("Reading SQL resources from file: " +
                                sqlFile.getAbsolutePath() + ", section " +


---------------------------------------------------------------------
To unsubscribe, e-mail: james-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: james-dev-help@jakarta.apache.org