[Mulgara-svn] r1724 - in trunk: conf src/jar/resolver/java/org/mulgara/resolver src/jar/server-rmi/java/org/mulgara/server/rmi

pag at mulgara.org pag at mulgara.org
Tue Jun 9 19:18:41 UTC 2009


Author: pag
Date: 2009-06-09 12:18:41 -0700 (Tue, 09 Jun 2009)
New Revision: 1724

Modified:
   trunk/conf/mulgara-embedded.xsd
   trunk/src/jar/resolver/java/org/mulgara/resolver/AdvDatabaseSessionUnitTest.java
   trunk/src/jar/resolver/java/org/mulgara/resolver/BasicDatabaseSessionUnitTest.java
   trunk/src/jar/resolver/java/org/mulgara/resolver/BuildRulesOperation.java
   trunk/src/jar/resolver/java/org/mulgara/resolver/Database.java
   trunk/src/jar/resolver/java/org/mulgara/resolver/DatabaseFactory.java
   trunk/src/jar/resolver/java/org/mulgara/resolver/DatabaseSession.java
   trunk/src/jar/resolver/java/org/mulgara/resolver/DatabaseSessionListQueryUnitTest.java
   trunk/src/jar/resolver/java/org/mulgara/resolver/DatabaseSessionUnitTest.java
   trunk/src/jar/resolver/java/org/mulgara/resolver/DatabaseUnitTest.java
   trunk/src/jar/resolver/java/org/mulgara/resolver/ExternalTransactionUnitTest.java
   trunk/src/jar/resolver/java/org/mulgara/resolver/LocalJRDFDatabaseSession.java
   trunk/src/jar/server-rmi/java/org/mulgara/server/rmi/RmiSessionFactory.java
Log:
Now handling lists of rule engines, added after construction time, rather than a single rule engine provided to various constructors

Modified: trunk/conf/mulgara-embedded.xsd
===================================================================
--- trunk/conf/mulgara-embedded.xsd	2009-06-09 19:17:38 UTC (rev 1723)
+++ trunk/conf/mulgara-embedded.xsd	2009-06-09 19:18:41 UTC (rev 1724)
@@ -132,7 +132,7 @@
         <xs:element ref="TemporaryStringPoolFactory"/>
         <xs:element ref="PersistentResolverFactory"/>
         <xs:element ref="TemporaryResolverFactory"/>
-        <xs:element ref="RuleLoader"/>
+        <xs:element ref="RuleLoader" minOccurs="0" maxOccurs="unbounded"/>
         <xs:element ref="DefaultContentHandler" minOccurs="1"/>
         <xs:element ref="ContentHandler" minOccurs="0" maxOccurs="unbounded"/>
         <xs:element ref="ResolverFactory" minOccurs="0" maxOccurs="unbounded"/>

Modified: trunk/src/jar/resolver/java/org/mulgara/resolver/AdvDatabaseSessionUnitTest.java
===================================================================
--- trunk/src/jar/resolver/java/org/mulgara/resolver/AdvDatabaseSessionUnitTest.java	2009-06-09 19:17:38 UTC (rev 1723)
+++ trunk/src/jar/resolver/java/org/mulgara/resolver/AdvDatabaseSessionUnitTest.java	2009-06-09 19:18:41 UTC (rev 1724)
@@ -199,7 +199,6 @@
                    null,                            // no dir for temp strings
                    tempResolverFactoryClassName,    // temporary models
                    null,                            // no dir for temp models
-                   "",                              // no rule loader
                    "org.mulgara.content.rdfxml.RDFXMLContentHandler");
 
       database.addResolverFactory("org.mulgara.resolver.url.URLResolverFactory", null);

Modified: trunk/src/jar/resolver/java/org/mulgara/resolver/BasicDatabaseSessionUnitTest.java
===================================================================
--- trunk/src/jar/resolver/java/org/mulgara/resolver/BasicDatabaseSessionUnitTest.java	2009-06-09 19:17:38 UTC (rev 1723)
+++ trunk/src/jar/resolver/java/org/mulgara/resolver/BasicDatabaseSessionUnitTest.java	2009-06-09 19:18:41 UTC (rev 1724)
@@ -164,7 +164,6 @@
         null,
         systemResolverFactoryClassName,   // temporary
         null,
-        "",                               // no rules engine
         "org.mulgara.content.rdfxml.RDFXMLContentHandler");
   }
 

Modified: trunk/src/jar/resolver/java/org/mulgara/resolver/BuildRulesOperation.java
===================================================================
--- trunk/src/jar/resolver/java/org/mulgara/resolver/BuildRulesOperation.java	2009-06-09 19:17:38 UTC (rev 1723)
+++ trunk/src/jar/resolver/java/org/mulgara/resolver/BuildRulesOperation.java	2009-06-09 19:18:41 UTC (rev 1724)
@@ -14,6 +14,8 @@
 
 // Java 2 standard packages
 import java.net.URI;
+import java.util.Collections;
+import java.util.List;
 
 import org.apache.log4j.Logger;
 import org.mulgara.query.GraphExpression;
@@ -35,7 +37,6 @@
  */
 class BuildRulesOperation implements Operation {
 
-  @SuppressWarnings("unused")
   /** Logger. */
   private static final Logger logger = Logger.getLogger(BuildRulesOperation.class.getName());
 
@@ -48,8 +49,8 @@
   /** The graph to contain the generated extrinsic data */
   private URI destGraph = null;
 
-  /** The name of the class that loads rules */
-  private String ruleLoaderClassName = null;
+  /** The name of the classes that load rules */
+  private List<String> ruleLoaderClassNames = null;
 
   /** The rules structure that can be shipped over RMI */
   private RulesRefImpl result;
@@ -63,24 +64,49 @@
    * @param destGraph The graph the rules will insert generated statements into.
    */
   BuildRulesOperation(String ruleLoaderClassName, URI ruleGraph, GraphExpression baseGraph, URI destGraph) {
-    this.ruleLoaderClassName = ruleLoaderClassName;
+    this.ruleLoaderClassNames = Collections.singletonList(ruleLoaderClassName);
     this.ruleGraph = ruleGraph;
     this.baseGraph = baseGraph;
     this.destGraph = destGraph;
   }
 
   /**
+   * Create an configure this operation.
+   * @param ruleLoaderClassName The name of the class that can load the configured rules.
+   * @param ruleGraph The graph containing the rules to read.
+   * @param baseGraph The graph the rules will be run on.
+   * @param destGraph The graph the rules will insert generated statements into.
+   */
+  BuildRulesOperation(List<String> ruleLoaderClassNames, URI ruleGraph, GraphExpression baseGraph, URI destGraph) {
+    this.ruleLoaderClassNames = ruleLoaderClassNames;
+    this.ruleGraph = ruleGraph;
+    this.baseGraph = baseGraph;
+    this.destGraph = destGraph;
+  }
+
+  /**
    * @see org.mulgara.resolver.Operation#execute(OperationContext, SystemResolver, DatabaseMetadata)
    */
   public void execute(OperationContext       operationContext,
                       SystemResolver         systemResolver,
                       DatabaseMetadata       metadata) throws Exception {
     // Set up the rule parser
-    RuleLoader ruleLoader = RuleLoaderFactory.newRuleLoader(ruleLoaderClassName, ruleGraph, baseGraph, destGraph);
-    if (ruleLoader == null) throw new org.mulgara.rules.InitializerException("No rule loader available");
-  
-    // read in the rules
-    Rules rules =  ruleLoader.readRules(operationContext);
+    Rules rules = null;
+    // iterate through the parsers until one works
+    for (String className: ruleLoaderClassNames) {
+      RuleLoader ruleLoader = RuleLoaderFactory.newRuleLoader(className, ruleGraph, baseGraph, destGraph);
+      if (ruleLoader == null) {
+        logger.error("Rule loader " + className + " is not available.");
+        continue;
+      }
+
+      // read in the rules
+      rules =  ruleLoader.readRules(operationContext);
+      // found a loader that works. We can leave now.
+      if (rules != null) break;
+    }
+    if (rules == null) throw new org.mulgara.rules.InitializerException("No rule loader available");
+
     result = new RulesRefImpl(rules);
   }
 

Modified: trunk/src/jar/resolver/java/org/mulgara/resolver/Database.java
===================================================================
--- trunk/src/jar/resolver/java/org/mulgara/resolver/Database.java	2009-06-09 19:17:38 UTC (rev 1723)
+++ trunk/src/jar/resolver/java/org/mulgara/resolver/Database.java	2009-06-09 19:18:41 UTC (rev 1724)
@@ -45,6 +45,7 @@
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
+import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -79,6 +80,7 @@
 import org.mulgara.store.xa.SimpleXAResourceException;
 import org.mulgara.transaction.TransactionManagerFactory;
 import org.mulgara.util.Closable;
+import org.mulgara.util.ServerInfoRef;
 
 /**
  * A database capable of managing and querying RDF models using a collection of
@@ -113,6 +115,9 @@
   @SuppressWarnings("unused")
   private final long NONE = NodePool.NONE;
 
+  /** A fallback rule loader */
+  private static final String DUMMY_RULE_LOADER = "org.mulgara.rules.DummyRuleLoader";
+
   /** The directory where persistence files are stored.  */
   private final File[] directories;
 
@@ -199,7 +204,7 @@
   ResolverFactory temporaryResolverFactory;
 
   /** The rule loader factory used to make rule loaders. */
-  String ruleLoaderClassName = null;
+  List<String> ruleLoaderClassNames = Collections.singletonList(DUMMY_RULE_LOADER);
 
   /**
    * The set of {@link SecurityAdapter} instances.
@@ -349,7 +354,7 @@
            directory,
            config.getTemporaryResolverFactory().getDir()
          ),
-         config.getRuleLoader().getType(),
+         null,
          config.getDefaultContentHandler().getType());
 
     if (logger.isDebugEnabled()) {
@@ -396,6 +401,99 @@
    * @param temporaryResolverFactoryClassName  the name of a
    *   {@link ResolverFactory} implementation which will be used to store
    *   temporary statements, never <code>null</code>
+   * @param defaultContentHandlerClassName the name of the class that should be
+   *   used to parse external content of unknown MIME type, or
+   *   <code>null</code> to disable blind parsing
+   * @throws IllegalArgumentException if <var>uri</var>,
+   *   <var>systemResolverFactory</var> are <code>null</code>, or if the
+   *   <var>uri</var> has a fragment part
+   * @throws InitializerException  if the {@link org.mulgara.store.nodepool.NodePoolFactory},
+   *   {@link ResolverFactory}, or {@link org.mulgara.store.stringpool.StringPoolFactory} instances
+   *   generated from the various class names can't be initialized
+   * @throws SystemException if <var>transactionTimeout</var> is negative
+   */
+  public Database(URI    uri,
+                  File   directory,
+                  URI    securityDomainURI,
+                  TransactionManagerFactory transactionManagerFactory,
+                  int    transactionTimeout,
+                  int    idleTimeout,
+                  String persistentNodePoolFactoryClassName,
+                  File   persistentNodePoolDirectory,
+                  String persistentStringPoolFactoryClassName,
+                  File   persistentStringPoolDirectory,
+                  String systemResolverFactoryClassName,
+                  File   persistentResolverDirectory,
+                  String temporaryNodePoolFactoryClassName,
+                  File   temporaryNodePoolDirectory,
+                  String temporaryStringPoolFactoryClassName,
+                  File   temporaryStringPoolDirectory,
+                  String temporaryResolverFactoryClassName,
+                  File   temporaryResolverDirectory,
+                  String defaultContentHandlerClassName)
+    throws ConfigurationException, InitializerException, LocalizeException,
+           NamingException, NodePoolException, QueryException,
+           ResolverException, ResolverFactoryException, StringPoolException,
+           SystemException, URISyntaxException {
+    this(uri,
+        new File[] {directory},
+        securityDomainURI,
+        transactionManagerFactory,
+        transactionTimeout,
+        idleTimeout,
+        persistentNodePoolFactoryClassName,
+        new File[] {persistentNodePoolDirectory},
+        persistentStringPoolFactoryClassName,
+        new File[] {persistentStringPoolDirectory},
+        systemResolverFactoryClassName,
+        new File[] {persistentResolverDirectory},
+        temporaryNodePoolFactoryClassName,
+        new File[] {temporaryNodePoolDirectory},
+        temporaryStringPoolFactoryClassName,
+        new File[] {temporaryStringPoolDirectory},
+        temporaryResolverFactoryClassName,
+        new File[] {temporaryResolverDirectory},
+        null,
+        defaultContentHandlerClassName);
+  }
+
+
+  /**
+   * Construct a database.
+   *
+   * @param uri  the unique {@link URI} naming this database, never
+   *   <code>null</code>; this mustn't have a fragment part, because the
+   *   fragment is used to represent models within the database
+   * @param directory  an area on the filesystem for the database's use; if this
+   *   is <code>null</code>, resolvers which require a filesystem can't be added
+   * @param securityDomainURI  the {@link URI} of the security domain this
+   *   database is within, or <code>null</code> if this database is unsecured
+   * @param transactionManagerFactory  the source for the
+   *   {@link javax.transaction.TransactionManager}, never <code>null</code>
+   * @param transactionTimeout  the default number of seconds before transactions
+   *   time out, or zero to take the <var>transactionManagerFactory</var>'s default;
+   *   never negative
+   * @param idleTimeout  the default number of seconds a transaction may be idle before
+   *   it is timed out, or zero to take the <var>transactionManagerFactory</var>'s
+   *   default; never negative
+   * @param persistentNodePoolFactoryClassName  the name of a
+   *   {@link org.mulgara.store.nodepool.NodePoolFactory} implementation which will be used to generate
+   *   persistent local nodes, never <code>null</code>
+   * @param persistentStringPoolFactoryClassName  the name of a
+   *   {@link org.mulgara.store.stringpool.StringPoolFactory} implementation which will be used to manage
+   *   persistent RDF literals, never <code>null</code>
+   * @param systemResolverFactoryClassName  the name of a
+   *   {@link ResolverFactory} implementation which will be used to store
+   *   system models; this class is required to register a model type
+   * @param temporaryNodePoolFactoryClassName  the name of a
+   *   {@link org.mulgara.store.nodepool.NodePoolFactory} implementation which will be used to generate
+   *   temporary local nodes, never <code>null</code>
+   * @param temporaryStringPoolFactoryClassName  the name of a
+   *   {@link org.mulgara.store.stringpool.StringPoolFactory} implementation which will be used to manage
+   *   temporary RDF literals, never <code>null</code>
+   * @param temporaryResolverFactoryClassName  the name of a
+   *   {@link ResolverFactory} implementation which will be used to store
+   *   temporary statements, never <code>null</code>
    * @param ruleLoaderClassName  the name of a
    *   {@link org.mulgara.rules.RuleLoader} implementation which will be used for loading
    *   rule frameworks, never <code>null</code>
@@ -410,6 +508,7 @@
    *   generated from the various class names can't be initialized
    * @throws SystemException if <var>transactionTimeout</var> is negative
    */
+  @Deprecated
   public Database(URI    uri,
                   File   directory,
                   URI    securityDomainURI,
@@ -456,6 +555,7 @@
         defaultContentHandlerClassName);
   }
 
+
   /**
    * Construct a database.
    *
@@ -492,6 +592,88 @@
    * @param temporaryResolverFactoryClassName  the name of a
    *   {@link ResolverFactory} implementation which will be used to store
    *   temporary statements, never <code>null</code>
+   * @param defaultContentHandlerClassName the name of the class that should be
+   *   used to parse external content of unknown MIME type, or
+   *   <code>null</code> to disable blind parsing
+   * @throws IllegalArgumentException if <var>uri</var>,
+   *   <var>systemResolverFactory</var> are <code>null</code>, or if the
+   *   <var>uri</var> has a fragment part
+   * @throws InitializerException  if the {@link org.mulgara.store.nodepool.NodePoolFactory},
+   *   {@link ResolverFactory}, or {@link org.mulgara.store.stringpool.StringPoolFactory} instances
+   *   generated from the various class names can't be initialized
+   * @throws SystemException if <var>transactionTimeout</var> is negative
+   */
+  public Database(URI    uri,
+                  File[] directories,
+                  URI    securityDomainURI,
+                  TransactionManagerFactory transactionManagerFactory,
+                  int    transactionTimeout,
+                  int    idleTimeout,
+                  String persistentNodePoolFactoryClassName,
+                  File[] persistentNodePoolDirectories,
+                  String persistentStringPoolFactoryClassName,
+                  File[] persistentStringPoolDirectories,
+                  String systemResolverFactoryClassName,
+                  File[] persistentResolverDirectories,
+                  String temporaryNodePoolFactoryClassName,
+                  File[] temporaryNodePoolDirectories,
+                  String temporaryStringPoolFactoryClassName,
+                  File[] temporaryStringPoolDirectories,
+                  String temporaryResolverFactoryClassName,
+                  File[] temporaryResolverDirectories,
+                  String defaultContentHandlerClassName)
+    throws ConfigurationException, InitializerException, LocalizeException,
+           NamingException, NodePoolException, QueryException,
+           ResolverException, ResolverFactoryException, StringPoolException,
+           SystemException, URISyntaxException {
+    this(uri, directories, securityDomainURI, transactionManagerFactory, transactionTimeout, idleTimeout,
+        persistentNodePoolFactoryClassName, persistentNodePoolDirectories,
+        persistentStringPoolFactoryClassName, persistentStringPoolDirectories,
+        systemResolverFactoryClassName, persistentResolverDirectories,
+        temporaryNodePoolFactoryClassName, temporaryNodePoolDirectories,
+        temporaryStringPoolFactoryClassName, temporaryStringPoolDirectories,
+        temporaryResolverFactoryClassName, temporaryResolverDirectories,
+        null, defaultContentHandlerClassName
+    );
+  }
+
+  /**
+   * Construct a database.
+   * This includes a parameter for a ruleLoader class, which should now be added though {@link #addRuleLoader(String)}.
+   *
+   * @param uri  the unique {@link URI} naming this database, never
+   *   <code>null</code>; this mustn't have a fragment part, because the
+   *   fragment is used to represent models within the database
+   * @param directories  an array of areas on the filesystem for the database's use; if this
+   *   is <code>null</code>, resolvers which require a filesystem can't be added
+   * @param securityDomainURI  the {@link URI} of the security domain this
+   *   database is within, or <code>null</code> if this database is unsecured
+   * @param transactionManagerFactory  the source for the
+   *   {@link javax.transaction.TransactionManager}, never <code>null</code>
+   * @param transactionTimeout  the default number of seconds before transactions
+   *   time out, or zero to take the <var>transactionManagerFactory</var>'s default;
+   *   never negative
+   * @param idleTimeout  the default number of seconds a transaction may be idle before
+   *   it is timed out, or zero to take the <var>transactionManagerFactory</var>'s
+   *   default; never negative
+   * @param persistentNodePoolFactoryClassName  the name of a
+   *   {@link org.mulgara.store.nodepool.NodePoolFactory} implementation which will be used to generate
+   *   persistent local nodes, never <code>null</code>
+   * @param persistentStringPoolFactoryClassName  the name of a
+   *   {@link org.mulgara.store.stringpool.StringPoolFactory} implementation which will be used to manage
+   *   persistent RDF literals, never <code>null</code>
+   * @param systemResolverFactoryClassName  the name of a
+   *   {@link ResolverFactory} implementation which will be used to store
+   *   system models; this class is required to register a model type
+   * @param temporaryNodePoolFactoryClassName  the name of a
+   *   {@link org.mulgara.store.nodepool.NodePoolFactory} implementation which will be used to generate
+   *   temporary local nodes, never <code>null</code>
+   * @param temporaryStringPoolFactoryClassName  the name of a
+   *   {@link org.mulgara.store.stringpool.StringPoolFactory} implementation which will be used to manage
+   *   temporary RDF literals, never <code>null</code>
+   * @param temporaryResolverFactoryClassName  the name of a
+   *   {@link ResolverFactory} implementation which will be used to store
+   *   temporary statements, never <code>null</code>
    * @param ruleLoaderClassName  the name of a
    *   {@link org.mulgara.rules.RuleLoader} implementation which will be used for loading
    *   rule frameworks, never <code>null</code>
@@ -586,6 +768,9 @@
     if (temporaryResolverFactoryClassName == null) {
       throw new IllegalArgumentException("Null 'temporaryResolverFactoryClassName' parameter");
     }
+    if (ruleLoaderClassName == null) {
+      ruleLoaderClassName = DUMMY_RULE_LOADER;
+    }
 
     // Initialize fields
     this.uri                       = uri;
@@ -656,7 +841,7 @@
     }
 
     hostnameAliases = Collections.unmodifiableSet(hostNames);
-    setHostnameAliases(hostNames);
+    ServerInfoRef.setHostnameAliases(hostNames);
 
     // Create an instance of ResolverSessionFactory
     DatabaseFactoryInitializer persistentStringPoolFactoryInitializer =
@@ -767,7 +952,7 @@
 
 
     URI systemModelURI = new URI(uri.getScheme(), uri.getSchemeSpecificPart(), "");
-    URI defaultGraphURI = getDefaultURI();
+    URI defaultGraphURI = ServerInfoRef.getDefaultURI();
     metadata = new DatabaseMetadataImpl(uri,
                                hostnameAliases,
                                securityDomainURI,
@@ -776,6 +961,10 @@
                                systemResolverFactory.getSystemModelTypeURI(),
                                defaultGraphURI);
 
+    // initialize the list of rule loader class names
+    ruleLoaderClassNames = new LinkedList<String>();
+    ruleLoaderClassNames.add(ruleLoaderClassName);
+
     DatabaseSession session = new DatabaseSession(
         transactionManager,
         transactionManagerFactory,
@@ -793,7 +982,7 @@
         temporaryModelTypeURI,
         defaultTransactionTimeout,
         defaultIdleTimeout,
-        ruleLoaderClassName);
+        ruleLoaderClassNames);
 
     // Updates metadata to reflect bootstrapped system model.
     session.bootstrapSystemModel((DatabaseMetadataImpl)metadata);
@@ -820,7 +1009,6 @@
     );
 
     addSymbolicTransformation(new DuplicateVariableTransformer());
-    this.ruleLoaderClassName = ruleLoaderClassName;
 
     if (logger.isDebugEnabled()) {
       logger.debug("Constructed database");
@@ -938,6 +1126,23 @@
 
 
   /**
+   * Adds the class name of a rule loader to the list of known loaders.
+   * @param loaderClassName The name of a class that can be used for rule loading.
+   *        May be <code>null</code>, in which case this method does nothing.
+   */
+  public void addRuleLoader(String loaderClassName) {
+    // ignore null entries.
+    if (loaderClassName == null) return;
+
+    // If only using a dummy loader, then forget it.
+    if (ruleLoaderClassNames.size() == 1 && ruleLoaderClassNames.get(0).equals(DUMMY_RULE_LOADER)) {
+      ruleLoaderClassNames = new LinkedList<String>();
+    }
+    ruleLoaderClassNames.add(loaderClassName);
+  }
+
+
+  /**
    * Flush all resources associated with the database into a recoverable state.
    */
   public void close() {
@@ -1007,7 +1212,7 @@
         temporaryModelTypeURI,
         defaultTransactionTimeout,
         defaultIdleTimeout,
-        ruleLoaderClassName);
+        ruleLoaderClassNames);
     } catch (ResolverFactoryException e) {
       throw new QueryException("Couldn't create session", e);
     }
@@ -1277,9 +1482,8 @@
           temporaryModelTypeURI,
           defaultTransactionTimeout,
           defaultIdleTimeout,
-          ruleLoaderClassName);
-      }
-      catch (ResolverFactoryException e) {
+          ruleLoaderClassNames);
+      } catch (ResolverFactoryException e) {
         throw new QueryException("Couldn't create session", e);
       }
     }
@@ -1293,7 +1497,7 @@
           transactionManager,
           transactionManagerFactory,
           Collections.singletonList(
-            new SystemGraphSecurityAdapter(metadata.getSystemModelNode())
+            (SecurityAdapter)new SystemGraphSecurityAdapter(metadata.getSystemModelNode())
           ),
           unmodifiableSymbolicTransformationList,
           jrdfSessionFactory,
@@ -1327,59 +1531,4 @@
     }
   }
 
-
-  /**
-   * Sets a property on the ServerInfo, if it is available
-   * @param name The name of the property. Case sensitive.
-   * @param value The value of the property to be set.
-   */
-  private void setServerInfoProperty(String name, Object value) {
-    try {
-      Class<?> si = Class.forName("org.mulgara.server.ServerInfo");
-      java.lang.reflect.Method setter = si.getMethod("set" + name, new Class[] { value.getClass() });
-      setter.invoke(null, new Object[] { value });
-    } catch (Exception e) {
-      /* Not much that can be done here */
-      logger.info("Unable to set '" + name + "' for Server Info", e);
-    }
-  }
-
-
-  /**
-   * Gets a property from the ServerInfo, if it is available
-   * @param name The name of the property. Case sensitive.
-   * @return The value, or <code>null</code> if not available.
-   */
-  private Object getServerInfoProperty(String name) {
-    try {
-      Class<?> si = Class.forName("org.mulgara.server.ServerInfo");
-      java.lang.reflect.Method setter = si.getMethod("get" + name, new Class[] { });
-      return setter.invoke(null, new Object[] { });
-    } catch (Exception e) {
-      /* Not much that can be done here */
-      logger.info("Unable to get '" + name + "' from Server Info", e);
-      return null;
-    }
-  }
-
-
-  /**
-   * Sets the hostnames on the ServerInfo object, if it is visible.
-   *
-   * @param names The set of hostnames to set on ServerInfo
-   */
-  private void setHostnameAliases(Set<String> names) {
-    setServerInfoProperty("HostnameAliases", names);
-  }
-
-
-  /**
-   * Sets the hostnames on the ServerInfo object, if it is visible.
-   *
-   * @return The default graph URI, used by SPARQL
-   */
-  private URI getDefaultURI() {
-    URI u = (URI)getServerInfoProperty("DefaultGraphURI");
-    return u == null ? URI.create(Mulgara.DEFAULT_GRAPH) : u;
-  }
 }

Modified: trunk/src/jar/resolver/java/org/mulgara/resolver/DatabaseFactory.java
===================================================================
--- trunk/src/jar/resolver/java/org/mulgara/resolver/DatabaseFactory.java	2009-06-09 19:17:38 UTC (rev 1723)
+++ trunk/src/jar/resolver/java/org/mulgara/resolver/DatabaseFactory.java	2009-06-09 19:18:41 UTC (rev 1724)
@@ -113,7 +113,6 @@
         subdirs(directory, config.getTemporaryStringPoolFactory().getDir()),
         config.getTemporaryResolverFactory().getType(),
         subdirs(directory, config.getTemporaryResolverFactory().getDir()),
-        config.getRuleLoader().getType(),
         config.getDefaultContentHandler().getType());
 
     if (logger.isDebugEnabled()) logger.debug("Constructed database.");
@@ -229,5 +228,13 @@
       // Add the security adapter
       database.addSecurityAdapter(securityAdapterFactory);
     }
+
+    Enumeration<org.mulgara.config.RuleLoader> ruleLoaders = config.enumerateRuleLoader();
+    while (ruleLoaders.hasMoreElements()) {
+      org.mulgara.config.RuleLoader ruleLoader = ruleLoaders.nextElement();
+
+      if (logger.isInfoEnabled()) logger.info("Loaded resolver factory: " + ruleLoader.getClass());
+      database.addRuleLoader(ruleLoader.getType());
+    }
   }
 }

Modified: trunk/src/jar/resolver/java/org/mulgara/resolver/DatabaseSession.java
===================================================================
--- trunk/src/jar/resolver/java/org/mulgara/resolver/DatabaseSession.java	2009-06-09 19:17:38 UTC (rev 1723)
+++ trunk/src/jar/resolver/java/org/mulgara/resolver/DatabaseSession.java	2009-06-09 19:18:41 UTC (rev 1724)
@@ -130,18 +130,40 @@
   private long idleTimeout;
 
   /** The name of the rule loader to use */
-  private String ruleLoaderClassName;
+  private List<String> ruleLoaderClassNames;
 
-  /** A fallback rule loader */
-  private static final String DUMMY_RULE_LOADER = "org.mulgara.rules.DummyRuleLoader";
-
   /** The registered {@link org.mulgara.content.ContentHandler} instances.  */
   private ContentHandlerManager contentHandlers;
 
   /** The temporary model type-URI. */
   private final URI temporaryModelTypeURI;
 
+
   /**
+   * Non-rule version of the constructor.  Accepts all parameters except ruleLoaderClassName.
+   */
+  DatabaseSession(MulgaraTransactionManager transactionManager,
+      TransactionManagerFactory transactionManagerFactory,
+      List<SecurityAdapter> securityAdapterList,
+      List<SymbolicTransformation> symbolicTransformationList,
+      ResolverSessionFactory resolverSessionFactory,
+      SystemResolverFactory systemResolverFactory,
+      ResolverFactory temporaryResolverFactory,
+      List<ResolverFactory> resolverFactoryList,
+      Map<String,ResolverFactory> externalResolverFactoryMap,
+      Map<URI,InternalResolverFactory> internalResolverFactoryMap,
+      DatabaseMetadata metadata,
+      ContentHandlerManager contentHandlers,
+      Set<ResolverFactory> cachedResolverFactorySet,
+      URI temporaryModelTypeURI) throws ResolverFactoryException {
+    this(transactionManager, transactionManagerFactory, securityAdapterList, symbolicTransformationList, resolverSessionFactory,
+      systemResolverFactory, temporaryResolverFactory, resolverFactoryList, externalResolverFactoryMap,
+      internalResolverFactoryMap, metadata, contentHandlers, cachedResolverFactorySet,
+      temporaryModelTypeURI, 0, 0, null);
+  }
+
+
+  /**
    * Construct a database session.
    *
    * @param transactionManager  the source of transactions for this session,
@@ -180,7 +202,7 @@
    * @param idleTimeout  the default number of milli-seconds a transaction may be idle
    *   before it is timed out, or zero to take the <var>transactionManagerFactory</var>'s
    *   default; never negative
-   * @param ruleLoaderClassName  the rule-loader class to use; may be null 
+   * @param ruleLoaderClassNames  the rule-loader classes to use; may be null 
    * @throws IllegalArgumentException if any argument is <code>null</code>
    */
   DatabaseSession(MulgaraTransactionManager transactionManager,
@@ -199,7 +221,7 @@
       URI temporaryModelTypeURI,
       long transactionTimeout,
       long idleTimeout,
-      String ruleLoaderClassName) throws ResolverFactoryException {
+      List<String> ruleLoaderClassNames) throws ResolverFactoryException {
 
     if (logger.isDebugEnabled()) {
       logger.debug("Constructing DatabaseSession: externalResolverFactoryMap=" +
@@ -240,8 +262,8 @@
       throw new IllegalArgumentException("negative 'transactionTimeout' parameter");
     } else if (idleTimeout < 0) {
       throw new IllegalArgumentException("negative 'idleTimeout' parameter");
-    } else if (ruleLoaderClassName == null) {
-      ruleLoaderClassName = DUMMY_RULE_LOADER;
+    } else if (ruleLoaderClassNames == null) {
+      ruleLoaderClassNames = Collections.emptyList();
     }
 
     // Initialize fields
@@ -260,7 +282,7 @@
     this.temporaryModelTypeURI      = temporaryModelTypeURI;
     this.defaultTransactionTimeout  = transactionTimeout;
     this.defaultIdleTimeout         = idleTimeout;
-    this.ruleLoaderClassName        = ruleLoaderClassName;
+    this.ruleLoaderClassNames       = ruleLoaderClassNames;
 
     this.transactionFactory = null;
     this.externalFactory = new MulgaraExternalTransactionFactory(this, transactionManager);
@@ -274,29 +296,6 @@
   }
 
 
-  /**
-   * Non-rule version of the constructor.  Accepts all parameters except ruleLoaderClassName.
-   */
-  DatabaseSession(MulgaraTransactionManager transactionManager,
-      TransactionManagerFactory transactionManagerFactory,
-      List<SecurityAdapter> securityAdapterList,
-      List<SymbolicTransformation> symbolicTransformationList,
-      ResolverSessionFactory resolverSessionFactory,
-      SystemResolverFactory systemResolverFactory,
-      ResolverFactory temporaryResolverFactory,
-      List<ResolverFactory> resolverFactoryList,
-      Map<String,ResolverFactory> externalResolverFactoryMap,
-      Map<URI,InternalResolverFactory> internalResolverFactoryMap,
-      DatabaseMetadata metadata,
-      ContentHandlerManager contentHandlers,
-      Set<ResolverFactory> cachedResolverFactorySet,
-      URI temporaryModelTypeURI) throws ResolverFactoryException {
-    this(transactionManager, transactionManagerFactory, securityAdapterList, symbolicTransformationList, resolverSessionFactory,
-        systemResolverFactory, temporaryResolverFactory, resolverFactoryList, externalResolverFactoryMap,
-        internalResolverFactoryMap, metadata, contentHandlers, cachedResolverFactorySet,
-        temporaryModelTypeURI, 0, 0, null);
-  }
-
   //
   // Internal methods required for database initialisation.
   //
@@ -599,7 +598,7 @@
   public RulesRef buildRules(URI ruleModel, GraphExpression baseModel, URI destModel) throws QueryException, org.mulgara.rules.InitializerException {
     if (logger.isDebugEnabled()) logger.debug("BUILD RULES: " + ruleModel);
 
-    BuildRulesOperation operation = new BuildRulesOperation(ruleLoaderClassName, ruleModel, baseModel, destModel);
+    BuildRulesOperation operation = new BuildRulesOperation(ruleLoaderClassNames, ruleModel, baseModel, destModel);
     execute(operation, "Failed to create rules");
     return operation.getResult();
   }

Modified: trunk/src/jar/resolver/java/org/mulgara/resolver/DatabaseSessionListQueryUnitTest.java
===================================================================
--- trunk/src/jar/resolver/java/org/mulgara/resolver/DatabaseSessionListQueryUnitTest.java	2009-06-09 19:17:38 UTC (rev 1723)
+++ trunk/src/jar/resolver/java/org/mulgara/resolver/DatabaseSessionListQueryUnitTest.java	2009-06-09 19:18:41 UTC (rev 1724)
@@ -169,7 +169,6 @@
         null,
         systemResolverFactoryClassName, // temporary
         null,
-        "",                          // no rule loader
         null);  // no default content handler
 
     //create and populate models

Modified: trunk/src/jar/resolver/java/org/mulgara/resolver/DatabaseSessionUnitTest.java
===================================================================
--- trunk/src/jar/resolver/java/org/mulgara/resolver/DatabaseSessionUnitTest.java	2009-06-09 19:17:38 UTC (rev 1723)
+++ trunk/src/jar/resolver/java/org/mulgara/resolver/DatabaseSessionUnitTest.java	2009-06-09 19:18:41 UTC (rev 1724)
@@ -527,7 +527,6 @@
         null,
         systemResolverFactoryClassName,  // temporary
         null,
-        "",                              // no rule loader
         null);                           // no default content handler
 
     if (test.resolvers != null) {

Modified: trunk/src/jar/resolver/java/org/mulgara/resolver/DatabaseUnitTest.java
===================================================================
--- trunk/src/jar/resolver/java/org/mulgara/resolver/DatabaseUnitTest.java	2009-06-09 19:17:38 UTC (rev 1723)
+++ trunk/src/jar/resolver/java/org/mulgara/resolver/DatabaseUnitTest.java	2009-06-09 19:18:41 UTC (rev 1724)
@@ -59,6 +59,7 @@
 
 public class DatabaseUnitTest extends TestCase {
   /** Logger.  */
+  @SuppressWarnings("unused")
   private Logger logger = Logger.getLogger(DatabaseUnitTest.class.getName());
 
   /**
@@ -103,7 +104,7 @@
   public void test1Constructor() {
     try {
       new Database(null, (File)null, null, null, 0, 0, null, null, null, null, null,
-                   null, null, null, null, null, null, null, null, null);
+                   null, null, null, null, null, null, null, null);
       fail("Expected " + IllegalArgumentException.class);
     } catch (IllegalArgumentException e) {
       // correct behavior
@@ -161,7 +162,6 @@
           null,
           "org.mulgara.resolver.memory.MemoryResolverFactory",
           null,
-          null,
           null);  // no default content handler
     } catch (Exception e) {
       fail(e);

Modified: trunk/src/jar/resolver/java/org/mulgara/resolver/ExternalTransactionUnitTest.java
===================================================================
--- trunk/src/jar/resolver/java/org/mulgara/resolver/ExternalTransactionUnitTest.java	2009-06-09 19:17:38 UTC (rev 1723)
+++ trunk/src/jar/resolver/java/org/mulgara/resolver/ExternalTransactionUnitTest.java	2009-06-09 19:18:41 UTC (rev 1724)
@@ -186,7 +186,6 @@
                    null,                            // no dir for temp strings
                    tempResolverFactoryClassName,    // temporary models
                    null,                            // no dir for temp models
-                   "",                              // no rule loader
                    "org.mulgara.content.rdfxml.RDFXMLContentHandler");
 
       database.addResolverFactory("org.mulgara.resolver.url.URLResolverFactory", null);

Modified: trunk/src/jar/resolver/java/org/mulgara/resolver/LocalJRDFDatabaseSession.java
===================================================================
--- trunk/src/jar/resolver/java/org/mulgara/resolver/LocalJRDFDatabaseSession.java	2009-06-09 19:17:38 UTC (rev 1723)
+++ trunk/src/jar/resolver/java/org/mulgara/resolver/LocalJRDFDatabaseSession.java	2009-06-09 19:18:41 UTC (rev 1724)
@@ -28,7 +28,6 @@
 package org.mulgara.resolver;
 
 // Java 2 standard packages
-import java.io.*;
 import java.net.URI;
 import java.util.*;
 
@@ -117,13 +116,18 @@
    */
   LocalJRDFDatabaseSession(MulgaraTransactionManager transactionManager, 
       TransactionManagerFactory transactionManagerFactory,
-      List securityAdapterList, List symbolicTransformationList,
+      List<SecurityAdapter> securityAdapterList,
+      List<SymbolicTransformation> symbolicTransformationList,
       ResolverSessionFactory resolverSessionFactory,
       SystemResolverFactory systemResolverFactory,
-      ResolverFactory temporaryResolverFactory, List resolverFactoryList,
-      Map externalResolverFactoryMap, Map internalResolverFactoryMap,
-      DatabaseMetadata metadata, ContentHandlerManager contentHandlers,
-      Set cachedResolverFactorySet, URI temporaryModelTypeURI)
+      ResolverFactory temporaryResolverFactory,
+      List<ResolverFactory> resolverFactoryList,
+      Map<String,ResolverFactory> externalResolverFactoryMap,
+      Map<URI,InternalResolverFactory> internalResolverFactoryMap,
+      DatabaseMetadata metadata,
+      ContentHandlerManager contentHandlers,
+      Set<ResolverFactory> cachedResolverFactorySet,
+      URI temporaryModelTypeURI)
       throws ResolverFactoryException {
     super(transactionManager, transactionManagerFactory, securityAdapterList,
         symbolicTransformationList, resolverSessionFactory,

Modified: trunk/src/jar/server-rmi/java/org/mulgara/server/rmi/RmiSessionFactory.java
===================================================================
--- trunk/src/jar/server-rmi/java/org/mulgara/server/rmi/RmiSessionFactory.java	2009-06-09 19:17:38 UTC (rev 1723)
+++ trunk/src/jar/server-rmi/java/org/mulgara/server/rmi/RmiSessionFactory.java	2009-06-09 19:18:41 UTC (rev 1724)
@@ -42,6 +42,7 @@
 import org.mulgara.server.NonRemoteSessionException;
 import org.mulgara.server.Session;
 import org.mulgara.server.SessionFactory;
+import org.mulgara.util.ServerInfoRef;
 
 /**
  * Proxy for a remote SessionFactory connected via Java RMI.
@@ -118,7 +119,7 @@
     remoteSessionFactory = (RemoteSessionFactory) rmiRegistryContext.lookup(serverURI.getPath().substring(1));
 
     URI remoteURI = remoteSessionFactory.getDefaultServerURI();
-    URI localURI = getLocalURI();
+    URI localURI = ServerInfoRef.getServerURI();
     if (logger.isDebugEnabled()) logger.debug("remoteURI=" + remoteURI+" localURI="+localURI);
     if (remoteURI == null) {
       logger.warn("host uri is not set, local = " + (localURI == null ? "<client>" : localURI.toString()) + ", remote = " + remoteURI);
@@ -211,21 +212,4 @@
     // null implementation
   }
 
-  /**
-   * Method to ask the ServerInfo for the local server URI.
-   * This will return null if ServerInfo is not available.
-   * @return the local server URI
-   */
-  private URI getLocalURI() {
-    try {
-      Class<?> rsf = Class.forName("org.mulgara.server.ServerInfo");
-      java.lang.reflect.Method getServerURI = rsf.getMethod("getServerURI", (Class<?>[])null);
-      Object uri = getServerURI.invoke(null, (Object[])null);
-      return (URI)uri;
-    } catch (Exception e) {
-      logger.info("Unable to find ServerInfo.  This may cause problems if this is a server");
-    }
-    return null;
-  }
-
 }




More information about the Mulgara-svn mailing list