[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