[Mulgara-svn] r110 - in trunk/src/jar: resolver/java/org/mulgara/resolver resolver-relational/java/org/mulgara/resolver/relational
andrae at mulgara.org
andrae at mulgara.org
Tue Oct 24 07:47:11 UTC 2006
Author: andrae
Date: 2006-10-24 02:47:11 -0500 (Tue, 24 Oct 2006)
New Revision: 110
Added:
trunk/src/jar/resolver/java/org/mulgara/resolver/PreallocateOperation.java
Modified:
trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/RelationalResolverFactory.java
trunk/src/jar/resolver/java/org/mulgara/resolver/DatabaseSession.java
Log:
Migrated DatabaseSession::preallocate to an Operation object. This is essential
if we are to encapsulate transactions as this was the last method not using the
execute method.
Modified: trunk/src/jar/resolver/java/org/mulgara/resolver/DatabaseSession.java
===================================================================
--- trunk/src/jar/resolver/java/org/mulgara/resolver/DatabaseSession.java 2006-10-23 10:47:07 UTC (rev 109)
+++ trunk/src/jar/resolver/java/org/mulgara/resolver/DatabaseSession.java 2006-10-24 07:47:11 UTC (rev 110)
@@ -455,24 +455,10 @@
* @throws QueryException if the local node number can't be obtained
*/
long preallocate(Node node) throws QueryException {
- // Find or create the node
- startTransactionalOperation(true);
- try {
- long localNode = systemResolver.localizePersistent(node);
+ PreallocateOperation preOp = new PreallocateOperation(node);
+ execute(preOp, "Failure to preallocated " + node);
- // Create a statement linking the node to the graph so it's never reaped
- systemResolver.modifyModel(metadata.getPreallocationModelNode(),
- new SingletonStatements(metadata.getPreallocationSubjectNode(),
- metadata.getPreallocationPredicateNode(),
- localNode),
- true);
- return localNode;
- } catch (Throwable e) {
- rollbackTransactionalBlock(e);
- } finally {
- finishTransactionalOperation("Could not preallocate " + node);
- }
- throw new QueryException("Illegal transactional state in session");
+ return preOp.getResult();
}
//
Added: trunk/src/jar/resolver/java/org/mulgara/resolver/PreallocateOperation.java
===================================================================
--- trunk/src/jar/resolver/java/org/mulgara/resolver/PreallocateOperation.java 2006-10-23 10:47:07 UTC (rev 109)
+++ trunk/src/jar/resolver/java/org/mulgara/resolver/PreallocateOperation.java 2006-10-24 07:47:11 UTC (rev 110)
@@ -0,0 +1,108 @@
+/*
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS"
+ * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+ * the License for the specific language governing rights and limitations
+ * under the License.
+ *
+ * The Original Code is the Kowari Metadata Store.
+ *
+ * The Initial Developer of the Original Code is Plugged In Software Pty
+ * Ltd (http://www.pisoftware.com, mailto:info at pisoftware.com). Portions
+ * created by Plugged In Software Pty Ltd are Copyright (C) 2001,2002
+ * Plugged In Software Pty Ltd. All Rights Reserved.
+ *
+ * Contributor(s): N/A.
+ *
+ * [NOTE: The text of this Exhibit A may differ slightly from the text
+ * of the notices in the Source Code files of the Original Code. You
+ * should use the text of this Exhibit A rather than the text found in the
+ * Original Code Source Code for Your Modifications.]
+ *
+ */
+
+package org.mulgara.resolver;
+
+// Java 2 standard packages
+import java.io.*;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.*;
+import javax.transaction.xa.XAException;
+import javax.transaction.xa.XAResource;
+
+// Third party packages
+import org.apache.log4j.Logger;
+import org.jrdf.graph.*;
+
+// Local packages
+import org.mulgara.resolver.spi.DatabaseMetadata;
+import org.mulgara.resolver.spi.ResolverSessionFactory;
+import org.mulgara.resolver.spi.SingletonStatements;
+import org.mulgara.resolver.spi.SystemResolver;
+
+/**
+ * An {@link Operation} that implements node preallocation.
+ *
+ * @created 2004-11-24
+ *
+ * @author <a href="mailto:andrae at netymon.com">Andrae Muys</a>
+ *
+ * @version $Revision: $
+ *
+ * @modified $Date: $ by $Author: $
+ *
+ * @maintenanceAuthor $Author: $
+ *
+ * @copyright ©2004 <a href="http://www.tucanatech.com/">Tucana
+ * Technology, Inc</a>
+ *
+ * @licence <a href="{@docRoot}/../../LICENCE">Mozilla Public License v1.1</a>
+ */
+class PreallocateOperation implements Operation
+{
+ /** Logger. */
+ private static final Logger logger =
+ Logger.getLogger(PreallocateOperation.class.getName());
+
+ /**
+ * The node to be preallocated
+ */
+ private final Node node;
+
+ /**
+ * The localized node.
+ */
+ private long localNode;
+
+ PreallocateOperation(Node node) {
+ assert node != null;
+ this.node = node;
+ }
+
+ public void execute(OperationContext operationContext,
+ SystemResolver systemResolver,
+ ResolverSessionFactory resolverSessionFactory,
+ DatabaseMetadata metadata) throws Exception {
+
+ this.localNode = systemResolver.localizePersistent(node);
+
+ // Create a statement linking the node to the graph so it's never reaped
+ systemResolver.modifyModel(metadata.getPreallocationModelNode(),
+ new SingletonStatements(metadata.getPreallocationSubjectNode(),
+ metadata.getPreallocationPredicateNode(), localNode), true);
+ }
+
+ public long getResult() {
+ return localNode;
+ }
+
+ public boolean isWriteOperation() {
+ return true;
+ }
+}
Modified: trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/RelationalResolverFactory.java
===================================================================
--- trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/RelationalResolverFactory.java 2006-10-23 10:47:07 UTC (rev 109)
+++ trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/RelationalResolverFactory.java 2006-10-24 07:47:11 UTC (rev 110)
@@ -54,9 +54,6 @@
import org.mulgara.query.rdf.URIReferenceImpl;
import org.mulgara.query.rdf.LiteralImpl;
import org.mulgara.resolver.spi.*;
-import org.mulgara.store.statement.StatementStore;
-import org.mulgara.store.xa.XAResolverSessionFactory;
-import org.mulgara.store.xa.SimpleXAResourceException;
/**
* Represents the time invariant concept of a relationally backed rdf-graph.
More information about the Mulgara-svn
mailing list