[Mulgara-svn] r2054 - in trunk/src/jar: content-rdfxml/java/org/mulgara/content/rdfxml/writer krule/java/org/mulgara/krule query/java/org/jrdf/graph/mem query/java/org/mulgara/query resolver/java/org/mulgara/resolver server-rmi/java/org/mulgara/server/rmi store-nodepool-xa/java/org/mulgara/store/nodepool/xa util/java/org/mulgara/util util-xa/java/org/mulgara/store/xa
alexhall at mulgara.org
alexhall at mulgara.org
Wed Sep 28 16:13:13 UTC 2011
Author: alexhall
Date: 2011-09-28 16:13:13 +0000 (Wed, 28 Sep 2011)
New Revision: 2054
Modified:
trunk/src/jar/content-rdfxml/java/org/mulgara/content/rdfxml/writer/NamespaceMap.java
trunk/src/jar/krule/java/org/mulgara/krule/ConsistencyCheck.java
trunk/src/jar/krule/java/org/mulgara/krule/QueryStruct.java
trunk/src/jar/krule/java/org/mulgara/krule/Rule.java
trunk/src/jar/krule/java/org/mulgara/krule/RuleStructure.java
trunk/src/jar/query/java/org/jrdf/graph/mem/GraphImpl.java
trunk/src/jar/query/java/org/mulgara/query/AnswerOperations.java
trunk/src/jar/query/java/org/mulgara/query/GraphAnswer.java
trunk/src/jar/query/java/org/mulgara/query/RdfXmlEmitter.java
trunk/src/jar/resolver/java/org/mulgara/resolver/BackupOperation.java
trunk/src/jar/resolver/java/org/mulgara/resolver/CreateDefaultGraphOperation.java
trunk/src/jar/resolver/java/org/mulgara/resolver/CreateGraphOperation.java
trunk/src/jar/resolver/java/org/mulgara/resolver/ExhaustiveTransitiveFunction.java
trunk/src/jar/resolver/java/org/mulgara/resolver/ExportOperation.java
trunk/src/jar/resolver/java/org/mulgara/resolver/ModifyGraphOperation.java
trunk/src/jar/resolver/java/org/mulgara/resolver/RestoreOperation.java
trunk/src/jar/resolver/java/org/mulgara/resolver/TransitiveFunction.java
trunk/src/jar/resolver/java/org/mulgara/resolver/WalkFunction.java
trunk/src/jar/resolver/java/org/mulgara/resolver/WalkFunctionUnitTest.java
trunk/src/jar/server-rmi/java/org/mulgara/server/rmi/RemoteJRDFSessionImpl.java
trunk/src/jar/server-rmi/java/org/mulgara/server/rmi/RemoteJenaSessionImpl.java
trunk/src/jar/store-nodepool-xa/java/org/mulgara/store/nodepool/xa/XANodePoolImpl.java
trunk/src/jar/util-xa/java/org/mulgara/store/xa/FreeList.java
trunk/src/jar/util-xa/java/org/mulgara/store/xa/ManagedBlockFile.java
trunk/src/jar/util/java/org/mulgara/util/IntFile.java
Log:
More updates for Fortify compliance - rewriting flow control around try/finally to throw the first exception encountered by an operation, not the last.
Modified: trunk/src/jar/content-rdfxml/java/org/mulgara/content/rdfxml/writer/NamespaceMap.java
===================================================================
--- trunk/src/jar/content-rdfxml/java/org/mulgara/content/rdfxml/writer/NamespaceMap.java 2011-09-28 13:40:13 UTC (rev 2053)
+++ trunk/src/jar/content-rdfxml/java/org/mulgara/content/rdfxml/writer/NamespaceMap.java 2011-09-28 16:13:13 UTC (rev 2054)
@@ -195,6 +195,7 @@
Statements clonedStatements = (Statements)statements.clone();
+ boolean success = false;
try {
//last nodes to be evaluated
@@ -228,9 +229,14 @@
evaluateAndPut(object, session);
}
}
+ success = true;
} finally {
-
- clonedStatements.close();
+ try {
+ clonedStatements.close();
+ } catch (TuplesException e) {
+ if (success) throw e; // This is a new exception, need to re-throw it.
+ else logger.info("Suppressing exception cleaning up from failed read", e); // Log suppressed exception.
+ }
}
}
Modified: trunk/src/jar/krule/java/org/mulgara/krule/ConsistencyCheck.java
===================================================================
--- trunk/src/jar/krule/java/org/mulgara/krule/ConsistencyCheck.java 2011-09-28 13:40:13 UTC (rev 2053)
+++ trunk/src/jar/krule/java/org/mulgara/krule/ConsistencyCheck.java 2011-09-28 16:13:13 UTC (rev 2054)
@@ -39,7 +39,7 @@
private static final long serialVersionUID = 5514372363770138432L;
/** Logger. */
- private static Logger logger = Logger.getLogger(ConsistencyCheck.class.getName());
+ private static final Logger logger = Logger.getLogger(ConsistencyCheck.class.getName());
/**
Modified: trunk/src/jar/krule/java/org/mulgara/krule/QueryStruct.java
===================================================================
--- trunk/src/jar/krule/java/org/mulgara/krule/QueryStruct.java 2011-09-28 13:40:13 UTC (rev 2053)
+++ trunk/src/jar/krule/java/org/mulgara/krule/QueryStruct.java 2011-09-28 16:13:13 UTC (rev 2054)
@@ -60,7 +60,7 @@
static final long serialVersionUID = -6472138136362435835L;
/** Logger. */
- private static Logger logger = Logger.getLogger(QueryStruct.class.getName());
+ private static final Logger logger = Logger.getLogger(QueryStruct.class.getName());
/** List of elements which are variables, or ConstantValues. */
private List<SelectElement> variables = null;
Modified: trunk/src/jar/krule/java/org/mulgara/krule/Rule.java
===================================================================
--- trunk/src/jar/krule/java/org/mulgara/krule/Rule.java 2011-09-28 13:40:13 UTC (rev 2053)
+++ trunk/src/jar/krule/java/org/mulgara/krule/Rule.java 2011-09-28 16:13:13 UTC (rev 2054)
@@ -59,7 +59,7 @@
private static final long serialVersionUID = 3080424724378196982L;
/** Logger. */
- private static Logger logger = Logger.getLogger(Rule.class.getName());
+ private static final Logger logger = Logger.getLogger(Rule.class.getName());
/** The name of this rule. */
protected String name;
Modified: trunk/src/jar/krule/java/org/mulgara/krule/RuleStructure.java
===================================================================
--- trunk/src/jar/krule/java/org/mulgara/krule/RuleStructure.java 2011-09-28 13:40:13 UTC (rev 2053)
+++ trunk/src/jar/krule/java/org/mulgara/krule/RuleStructure.java 2011-09-28 16:13:13 UTC (rev 2054)
@@ -62,7 +62,7 @@
static final long UNINITIALIZED = -1;
/** Logger. */
- private static Logger logger = Logger.getLogger(RuleStructure.class.getName());
+ private static final Logger logger = Logger.getLogger(RuleStructure.class.getName());
/** The rules in the framework. */
private Set<Rule> rules;
Modified: trunk/src/jar/query/java/org/jrdf/graph/mem/GraphImpl.java
===================================================================
--- trunk/src/jar/query/java/org/jrdf/graph/mem/GraphImpl.java 2011-09-28 13:40:13 UTC (rev 2053)
+++ trunk/src/jar/query/java/org/jrdf/graph/mem/GraphImpl.java 2011-09-28 16:13:13 UTC (rev 2054)
@@ -421,10 +421,16 @@
removeFrom012(values[0], values[1], values[2]);
// if the first one succeeded then try and attempt removal on both of the others
+ boolean success = false;
try {
removeFrom120(values[1], values[2], values[0]);
+ success = true;
} finally {
- removeFrom201(values[2], values[0], values[1]);
+ try {
+ removeFrom201(values[2], values[0], values[1]);
+ } catch (GraphException e) {
+ if (success) throw e; // Only re-throw if no other exception happened first. No logger, so ignore otherwise.
+ }
}
}
Modified: trunk/src/jar/query/java/org/mulgara/query/AnswerOperations.java
===================================================================
--- trunk/src/jar/query/java/org/mulgara/query/AnswerOperations.java 2011-09-28 13:40:13 UTC (rev 2053)
+++ trunk/src/jar/query/java/org/mulgara/query/AnswerOperations.java 2011-09-28 16:13:13 UTC (rev 2054)
@@ -102,8 +102,8 @@
// Clone the arguments to avoid interfering with their cursors
lhs = (Answer) lhs.clone();
- rhs = (Answer) rhs.clone();
try {
+ rhs = (Answer) rhs.clone();
// Check that all row values match
lhs.beforeFirst();
rhs.beforeFirst();
@@ -144,8 +144,11 @@
}
finally {
// Close our clones
- lhs.close();
- rhs.close();
+ try {
+ lhs.close();
+ } finally {
+ if (rhs != null) rhs.close();
+ }
}
}
}
Modified: trunk/src/jar/query/java/org/mulgara/query/GraphAnswer.java
===================================================================
--- trunk/src/jar/query/java/org/mulgara/query/GraphAnswer.java 2011-09-28 13:40:13 UTC (rev 2053)
+++ trunk/src/jar/query/java/org/mulgara/query/GraphAnswer.java 2011-09-28 16:13:13 UTC (rev 2054)
@@ -189,7 +189,11 @@
// Return the raw cardinality
return rawCardinality;
} finally {
- answerCopy.close();
+ try {
+ answerCopy.close();
+ } catch (TuplesException e) {
+ logger.warn("Exception closing cloned answer", e);
+ }
}
}
@@ -213,7 +217,11 @@
while (answerCopy.next()) result++;
return result * rowsPerSoln;
} finally {
- answerCopy.close();
+ try {
+ answerCopy.close();
+ } catch (TuplesException e) {
+ logger.warn("Exception closing cloned answer", e);
+ }
}
}
Modified: trunk/src/jar/query/java/org/mulgara/query/RdfXmlEmitter.java
===================================================================
--- trunk/src/jar/query/java/org/mulgara/query/RdfXmlEmitter.java 2011-09-28 13:40:13 UTC (rev 2053)
+++ trunk/src/jar/query/java/org/mulgara/query/RdfXmlEmitter.java 2011-09-28 16:13:13 UTC (rev 2054)
@@ -25,6 +25,7 @@
import java.util.List;
import java.util.Map;
+import org.apache.log4j.Logger;
import org.jrdf.graph.BlankNode;
import org.jrdf.graph.Literal;
import org.jrdf.graph.Node;
@@ -57,6 +58,8 @@
*/
public class RdfXmlEmitter {
+ private static final Logger logger = Logger.getLogger(RdfXmlEmitter.class);
+
/** Comparator for sorting statements in the graph. */
private static final TripleComparator TRIPLE_COMPARATOR = new TripleComparator();
@@ -247,7 +250,7 @@
try {
if (closeAns) answer.close();
} catch (TuplesException te) {
- throw new QueryException("Error closing GraphAnswer", te);
+ logger.warn("Error closing GraphAnswer", te);
}
}
Modified: trunk/src/jar/resolver/java/org/mulgara/resolver/BackupOperation.java
===================================================================
--- trunk/src/jar/resolver/java/org/mulgara/resolver/BackupOperation.java 2011-09-28 13:40:13 UTC (rev 2053)
+++ trunk/src/jar/resolver/java/org/mulgara/resolver/BackupOperation.java 2011-09-28 16:13:13 UTC (rev 2054)
@@ -29,6 +29,7 @@
// Java 2 standard packages
import java.io.BufferedWriter;
+import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
@@ -36,8 +37,10 @@
import java.util.Date;
import java.util.zip.GZIPOutputStream;
+import org.apache.log4j.Logger;
import org.mulgara.query.ConstraintImpl;
import org.mulgara.query.QueryException;
+import org.mulgara.query.TuplesException;
import org.mulgara.resolver.spi.DatabaseMetadata;
import org.mulgara.resolver.spi.SecurityAdapter;
import org.mulgara.resolver.spi.SystemResolver;
@@ -60,6 +63,8 @@
*/
class BackupOperation extends OutputOperation implements BackupConstants, Operation {
+ private static final Logger logger = Logger.getLogger(BackupOperation.class);
+
//
// Constructor
//
@@ -95,8 +100,9 @@
}
}
- OutputStream os = getOutputStream();;
+ OutputStream os = getOutputStream();
Writer writer = null;
+ boolean success = false;
try {
// The existence of a fragment indicates that a model is to be backed
// up otherwise the entire database is to be backed up.
@@ -105,15 +111,21 @@
));
backupDatabase(systemResolver, metadata, writer);
+ success = true;
} finally {
// Clean up.
- if (writer != null) {
- // Close the writer if it exists. This will also close the wrapped
- // OutputStream.
- writer.close();
- } else if (os != null) {
- // Close the os if it exists.
- os.close();
+ try {
+ if (writer != null) {
+ // Close the writer if it exists. This will also close the wrapped
+ // OutputStream.
+ writer.close();
+ } else if (os != null) {
+ // Close the os if it exists.
+ os.close();
+ }
+ } catch (IOException e) {
+ if (success) throw e; // The backup worked but we couldn't close, so re-throw.
+ else logger.info("Suppressing I/O exception closing failed backup writer", e); // Log and ignore.
}
}
}
@@ -151,7 +163,11 @@
writer.write('\n');
}
} finally {
- t.close();
+ try {
+ t.close();
+ } catch (TuplesException e) {
+ logger.warn("Error closing tuples during backup", e);
+ }
}
// Dump the triples.
@@ -181,7 +197,11 @@
}
}
} finally {
- tuples.close();
+ try {
+ tuples.close();
+ } catch (TuplesException e) {
+ logger.warn("Error closing tuples during backup", e);
+ }
}
writer.write("END\n");
Modified: trunk/src/jar/resolver/java/org/mulgara/resolver/CreateDefaultGraphOperation.java
===================================================================
--- trunk/src/jar/resolver/java/org/mulgara/resolver/CreateDefaultGraphOperation.java 2011-09-28 13:40:13 UTC (rev 2053)
+++ trunk/src/jar/resolver/java/org/mulgara/resolver/CreateDefaultGraphOperation.java 2011-09-28 16:13:13 UTC (rev 2054)
@@ -36,7 +36,6 @@
*/
class CreateDefaultGraphOperation implements Operation {
/** Logger. This is named after the class. */
- @SuppressWarnings("unused")
private static final Logger logger = Logger.getLogger(CreateDefaultGraphOperation.class.getName());
/** The URI of the model to be created. */
@@ -82,6 +81,7 @@
new Variable("x"),
new LocalNode(metadata.getSystemModelNode())));
+ boolean success = false;
try {
resolution.beforeFirst();
if (resolution.next()) {
@@ -98,8 +98,14 @@
throw new QueryException("Invalid model type entry in system model: " + graphURI + " <rdf:type> " + eNode);
}
}
+ success = true;
} finally {
- resolution.close();
+ try {
+ resolution.close();
+ } catch (TuplesException e) {
+ if (success) throw e; // This is a new exception, need to re-throw it.
+ else logger.info("Suppressing exception cleaning up from failed read", e); // Log suppressed exception.
+ }
}
// Find the local node identifying the system graph and rdf:type
Modified: trunk/src/jar/resolver/java/org/mulgara/resolver/CreateGraphOperation.java
===================================================================
--- trunk/src/jar/resolver/java/org/mulgara/resolver/CreateGraphOperation.java 2011-09-28 13:40:13 UTC (rev 2053)
+++ trunk/src/jar/resolver/java/org/mulgara/resolver/CreateGraphOperation.java 2011-09-28 16:13:13 UTC (rev 2054)
@@ -55,7 +55,6 @@
*/
class CreateGraphOperation implements Operation {
/** Logger. This is named after the class. */
- @SuppressWarnings("unused")
private static final Logger logger = Logger.getLogger(CreateGraphOperation.class.getName());
/** The parameter used for describing subgraphs within a URI. */
@@ -124,6 +123,7 @@
new Variable("x"),
new LocalNode(metadata.getSystemModelNode())));
+ boolean success = false;
try {
resolution.beforeFirst();
if (resolution.next()) {
@@ -138,8 +138,14 @@
throw new QueryException("Invalid model type entry in system model: " + graphURI + " <rdf:type> " + eNode);
}
}
+ success = true;
} finally {
- resolution.close();
+ try {
+ resolution.close();
+ } catch (TuplesException e) {
+ if (success) throw e; // This is a new exception, need to re-throw it.
+ else logger.info("Suppressing exception cleaning up from failed read", e); // Log suppressed exception.
+ }
}
Modified: trunk/src/jar/resolver/java/org/mulgara/resolver/ExhaustiveTransitiveFunction.java
===================================================================
--- trunk/src/jar/resolver/java/org/mulgara/resolver/ExhaustiveTransitiveFunction.java 2011-09-28 13:40:13 UTC (rev 2053)
+++ trunk/src/jar/resolver/java/org/mulgara/resolver/ExhaustiveTransitiveFunction.java 2011-09-28 16:13:13 UTC (rev 2054)
@@ -81,7 +81,7 @@
/**
* Logger.
*/
- private static Logger logger = Logger.getLogger(
+ private static final Logger logger = Logger.getLogger(
ExhaustiveTransitiveFunction.class.getName());
/**
@@ -124,6 +124,7 @@
Tuples initialTuples = null;
Tuples workingTuples = null;
+ boolean success = false;
try {
// Get the wrapped constraint
@@ -184,7 +185,7 @@
}
// remember that the subject has been visited
- Set visited = new HashSet();
+ Set<Long> visited = new HashSet<Long>();
visited.add(subjectL);
// add the object to the "given" tuples
@@ -221,14 +222,19 @@
logger.debug("Finished all inferencing");
}
+ success = true;
return inferredResult;
} finally {
- if (initialTuples != null) {
- initialTuples.close();
+ try {
+ try {
+ if (initialTuples != null) initialTuples.close();
+ } finally {
+ if (workingTuples != null) workingTuples.close();
+ }
+ } catch (TuplesException e) {
+ if (success) throw e; // Everything worked up to this point, re-throw this one.
+ else logger.info("Suppressing exception closing failed tuples", e); // Log and ignore redundant exception.
}
- if (workingTuples != null) {
- workingTuples.close();
- }
}
}
@@ -293,6 +299,7 @@
Tuples initialTuples = null;
Tuples workingTuples = null;
+ boolean success = false;
try {
// Get the wrapped constraint
Constraint anchoredConstraint = constraint.getAnchoredConstraint();
@@ -359,7 +366,7 @@
}
// remember that the subject has been visited
- Set visited = new HashSet();
+ Set<Long> visited = new HashSet<Long>();
visited.add(subjectL);
// add the object to the "given" tuples
@@ -396,14 +403,19 @@
logger.debug("Finished all inferencing");
}
+ success = true;
return inferredResult;
} finally {
- if (initialTuples != null) {
- initialTuples.close();
+ try {
+ try {
+ if (initialTuples != null) initialTuples.close();
+ } finally {
+ if (workingTuples != null) workingTuples.close();
+ }
+ } catch (TuplesException e) {
+ if (success) throw e; // Everything worked up to this point, re-throw this one.
+ else logger.info("Suppressing exception closing failed tuples", e); // Log and ignore redundant exception.
}
- if (workingTuples != null) {
- workingTuples.close();
- }
}
}
}
Modified: trunk/src/jar/resolver/java/org/mulgara/resolver/ExportOperation.java
===================================================================
--- trunk/src/jar/resolver/java/org/mulgara/resolver/ExportOperation.java 2011-09-28 13:40:13 UTC (rev 2053)
+++ trunk/src/jar/resolver/java/org/mulgara/resolver/ExportOperation.java 2011-09-28 16:13:13 UTC (rev 2054)
@@ -15,12 +15,14 @@
*/
package org.mulgara.resolver;
+import java.io.IOException;
import java.io.OutputStream;
import java.net.URI;
import java.util.Map;
import javax.activation.MimeType;
+import org.apache.log4j.Logger;
import org.mulgara.content.Content;
import org.mulgara.content.ContentHandler;
import org.mulgara.content.ContentHandlerManager;
@@ -49,6 +51,8 @@
*/
class ExportOperation extends OutputOperation {
+ private static final Logger logger = Logger.getLogger(ExportOperation.class);
+
private final URI graphURI;
private final Map<String,URI> prefixes;
private final MimeType contentType;
@@ -99,6 +103,7 @@
OutputStream os = getOutputStream();
assert os != null;
+ boolean success = false;
try {
Content content = new StreamContent(os, destinationURI, contentType);
ContentHandler handler = contentManager.getContentHandler(content);
@@ -123,11 +128,17 @@
// This will close the wrapped resolution as well.
graphStatements.close();
}
+ success = true;
} finally {
// Clean up.
if (os != null) {
// Close the os if it exists.
- os.close();
+ try {
+ os.close();
+ } catch (IOException e) {
+ if (success) throw e; // The export worked but we couldn't close the stream, so re-throw.
+ else logger.info("Suppressing I/O exception closing failed export output", e); // Log and ignore.
+ }
}
}
} else {
Modified: trunk/src/jar/resolver/java/org/mulgara/resolver/ModifyGraphOperation.java
===================================================================
--- trunk/src/jar/resolver/java/org/mulgara/resolver/ModifyGraphOperation.java 2011-09-28 13:40:13 UTC (rev 2053)
+++ trunk/src/jar/resolver/java/org/mulgara/resolver/ModifyGraphOperation.java 2011-09-28 16:13:13 UTC (rev 2054)
@@ -166,7 +166,7 @@
SystemResolver systemResolver,
DatabaseMetadata metadata) throws Exception
{
- Statements statements;
+ Statements statements = null;
if (tripleSet != null) {
assert query == null;
@@ -183,16 +183,29 @@
statements = new TuplesWrapperStatements(
new LocalizedTuples(systemResolver, answer, insert),
vars[0], vars[1], vars[2]);
- } finally {
answer.close();
+ } catch (TuplesException e) {
+ try {
+ if (statements == null) answer.close();
+ } catch (TuplesException e2) {
+ logger.warn("Suppressing exception closing failed answer.", e2);
+ }
+ throw e;
}
}
assert statements != null;
+ boolean success = false;
try {
doModify(operationContext, systemResolver, modelURI, statements, insert);
+ success = true;
} finally {
- statements.close();
+ try {
+ statements.close();
+ } catch (TuplesException e) {
+ if (success) throw e;
+ else logger.warn("Suppressing exception closing statements on failed modify", e);
+ }
}
}
Modified: trunk/src/jar/resolver/java/org/mulgara/resolver/RestoreOperation.java
===================================================================
--- trunk/src/jar/resolver/java/org/mulgara/resolver/RestoreOperation.java 2011-09-28 13:40:13 UTC (rev 2053)
+++ trunk/src/jar/resolver/java/org/mulgara/resolver/RestoreOperation.java 2011-09-28 16:13:13 UTC (rev 2054)
@@ -49,6 +49,7 @@
import org.apache.log4j.Logger;
import org.mulgara.query.ConstraintImpl;
import org.mulgara.query.QueryException;
+import org.mulgara.query.TuplesException;
import org.mulgara.resolver.spi.BackupRestoreSession;
import org.mulgara.resolver.spi.DatabaseMetadata;
import org.mulgara.resolver.spi.Resolver;
@@ -140,13 +141,17 @@
restoreDatabase(systemResolver, systemResolver, metadata, br);
} finally {
- if (br != null) {
- // Close the BufferedReader if it exists. This will also close the
- // wrapped InputStream.
- br.close();
- } else if (is != null) {
- // Close the InputStream if it exists.
- is.close();
+ try {
+ if (br != null) {
+ // Close the BufferedReader if it exists. This will also close the
+ // wrapped InputStream.
+ br.close();
+ } else if (is != null) {
+ // Close the InputStream if it exists.
+ is.close();
+ }
+ } catch (IOException e) {
+ logger.warn("I/O exception closing input to system restore", e);
}
}
}
@@ -222,6 +227,7 @@
StatementStore.VARIABLES[3]));
int[] colMap = mapColumnsToStd(tuples.getVariables());
+ boolean success = false;
try {
tuples.beforeFirst();
@@ -238,8 +244,14 @@
);
}
}
+ success = true;
} finally {
- tuples.close();
+ try {
+ tuples.close();
+ } catch (TuplesException e) {
+ if (success) throw e; // New exception, need to re-throw it.
+ else logger.info("Suppressing exception closing failed tuples", e); // Already failed, log this exception.
+ }
}
// n2nMap maps from node IDs in the backup file to node IDs in the
@@ -540,6 +552,7 @@
StatementStore.VARIABLES[3]));
int[] colMap = mapColumnsToStd(tuples.getVariables());
+ boolean success = false;
try {
tuples.beforeFirst();
@@ -556,8 +569,14 @@
);
}
}
+ success = true;
} finally {
- tuples.close();
+ try {
+ tuples.close();
+ } catch (TuplesException e) {
+ if (success) throw e; // New exception, need to re-throw it.
+ else logger.info("Suppressing exception closing failed tuples", e); // Already failed, log this exception.
+ }
}
// n2nMap maps from node IDs in the backup file to node IDs in the store.
@@ -637,7 +656,7 @@
} finally {
try {
if (n2nMap != null) n2nMap.delete();
- } catch (IOException e) {
+ } catch (Exception e) {
logger.warn("I/O error on close", e);
}
}
Modified: trunk/src/jar/resolver/java/org/mulgara/resolver/TransitiveFunction.java
===================================================================
--- trunk/src/jar/resolver/java/org/mulgara/resolver/TransitiveFunction.java 2011-09-28 13:40:13 UTC (rev 2053)
+++ trunk/src/jar/resolver/java/org/mulgara/resolver/TransitiveFunction.java 2011-09-28 16:13:13 UTC (rev 2054)
@@ -28,9 +28,7 @@
package org.mulgara.resolver;
// Java 2 standard packages;
-import java.net.*;
import java.util.*;
-import java.io.*;
// Third party packages
import org.apache.log4j.Logger;
@@ -66,8 +64,7 @@
/**
* Logger.
*/
- private static Logger logger = Logger.getLogger(
- TransitiveFunction.class.getName());
+ private static final Logger logger = Logger.getLogger(TransitiveFunction.class.getName());
/**
* This method finds all statements that match a <code>given</code> tuples,
@@ -91,7 +88,7 @@
*/
protected static void inferTransitiveStatements(
Long baseSubject, long subject, Tuples initialTuples,
- Tuples given, Set visited, LiteralTuples inferredResult)
+ Tuples given, Set<Long> visited, LiteralTuples inferredResult)
throws TuplesException {
assert initialTuples.getNumberOfVariables() == 2;
assert given.getNumberOfVariables() == 1;
@@ -131,6 +128,7 @@
logger.debug("Joined with a given of: " + gs);
}
+ TuplesException te = null;
try {
// check if there is any data from the join
joinResult.beforeFirst();
@@ -185,10 +183,24 @@
// tell the visited set that we have been here
visited.add(objectL);
} while (joinResult.next());
+ } catch (TuplesException e) {
+ te = e;
} finally {
// clean up the tuples objects, either by falling through, or from the break above
- joinResult.close();
- given.close();
+ try {
+ if (joinResult != null) joinResult.close();
+ } catch (TuplesException e) {
+ if (te == null) te = e;
+ else logger.info("Suppressing exception closing tuples on failed transitive function", e);
+ } finally {
+ try {
+ if (given != null) given.close();
+ } catch (TuplesException e) {
+ if (te == null) te = e;
+ else logger.info("Suppressing exception closing tuples on failed transitive function", e);
+ }
+ }
+ if (te != null) throw te;
}
// use this new given, and iterate
Modified: trunk/src/jar/resolver/java/org/mulgara/resolver/WalkFunction.java
===================================================================
--- trunk/src/jar/resolver/java/org/mulgara/resolver/WalkFunction.java 2011-09-28 13:40:13 UTC (rev 2053)
+++ trunk/src/jar/resolver/java/org/mulgara/resolver/WalkFunction.java 2011-09-28 16:13:13 UTC (rev 2054)
@@ -83,8 +83,7 @@
/**
* Logger.
*/
- private static Logger logger = Logger.getLogger(
- WalkFunction.class.getName());
+ private static final Logger logger = Logger.getLogger(WalkFunction.class.getName());
/**
* Resolves a walk constraint. This means finding all statements matching
@@ -146,6 +145,7 @@
Tuples initialTuples = null;
Tuples predTuples = null;
+ boolean success = false;
try {
// ask for all statements for this predicate
@@ -235,7 +235,7 @@
predTuples = query.resolve(graphExpression, openConstraint);
// remember that the current value has been visited
- Set visited = new HashSet();
+ Set<Long> visited = new HashSet<Long>();
visited.add(value);
// Get object/subject node value
@@ -253,17 +253,20 @@
logger.debug("Finished all inferencing");
}
+ success = true;
return inferredResult;
- }
- finally {
-
+ } finally {
// clean up tuples
- if (initialTuples != null) {
- initialTuples.close();
+ try {
+ try {
+ if (initialTuples != null) initialTuples.close();
+ } finally {
+ if (predTuples != null) predTuples.close();
+ }
+ } catch (TuplesException e) {
+ if (success) throw e; // Everything worked up to this point, re-throw this one.
+ else logger.info("Suppressing exception closing failed tuples", e); // Log and ignore redundant exception.
}
- if (predTuples != null) {
- predTuples.close();
- }
}
}
@@ -288,7 +291,7 @@
* around in results of the query resolutions.
*/
public static void walkStatements(Tuples initialTuples,
- Tuples given, Set visited, LiteralTuples inferredResult)
+ Tuples given, Set<Long> visited, LiteralTuples inferredResult)
throws TuplesException, QueryException {
assert initialTuples.getNumberOfVariables() == 2;
@@ -335,6 +338,7 @@
logger.debug("Joined with a given of: " + gs);
}
+ boolean success = false;
try {
// check if there is any data from the join
@@ -384,12 +388,20 @@
visited.add(objectL);
}
while (joinResult.next());
+ success = true;
}
finally {
-
// clean up the tuples objects, either by falling through, or from the break above
- joinResult.close();
- given.close();
+ try {
+ try {
+ if (joinResult != null) joinResult.close();
+ } finally {
+ if (given != null) given.close();
+ }
+ } catch (TuplesException e) {
+ if (success) throw e; // Everything worked up to this point, re-throw this one.
+ else logger.info("Suppressing exception closing failed tuples", e); // Log and ignore redundant exception.
+ }
}
// use this new given, and iterate
Modified: trunk/src/jar/resolver/java/org/mulgara/resolver/WalkFunctionUnitTest.java
===================================================================
--- trunk/src/jar/resolver/java/org/mulgara/resolver/WalkFunctionUnitTest.java 2011-09-28 13:40:13 UTC (rev 2053)
+++ trunk/src/jar/resolver/java/org/mulgara/resolver/WalkFunctionUnitTest.java 2011-09-28 16:13:13 UTC (rev 2054)
@@ -63,8 +63,8 @@
/**
* Logger.
*/
- private Logger logger =
- Logger.getLogger(WalkFunctionUnitTest.class.getName());
+ @SuppressWarnings("unused")
+ private Logger logger = Logger.getLogger(WalkFunctionUnitTest.class.getName());
/**
* Tuples for testing with.
@@ -305,7 +305,7 @@
given.appendTuple(new long[] { subject });
// Visited.
- Set visited = new HashSet();
+ Set<Long> visited = new HashSet<Long>();
visited.add(new Long(subject));
// Results are the subject and object.
Modified: trunk/src/jar/server-rmi/java/org/mulgara/server/rmi/RemoteJRDFSessionImpl.java
===================================================================
--- trunk/src/jar/server-rmi/java/org/mulgara/server/rmi/RemoteJRDFSessionImpl.java 2011-09-28 13:40:13 UTC (rev 2053)
+++ trunk/src/jar/server-rmi/java/org/mulgara/server/rmi/RemoteJRDFSessionImpl.java 2011-09-28 16:13:13 UTC (rev 2054)
@@ -63,7 +63,6 @@
class RemoteJRDFSessionImpl extends JRDFSessionWrapperRemoteJRDFSession implements RemoteJRDFSession {
/** Logger. */
- @SuppressWarnings("unused")
private final static Logger logger = Logger.getLogger(RemoteJRDFSessionImpl.class.getName());
/**
@@ -90,12 +89,18 @@
* @throws RemoteException EXCEPTION TO DO
*/
public void close() throws QueryException, RemoteException {
+ boolean success = false;
try {
super.close();
+ success = true;
+ } finally {
+ try {
+ // remove the instance from the factory
+ remoteSessionFactory.removeSession(this);
+ } catch (RemoteException e) {
+ if (success) throw e; // This is a new exception, need to re-throw it.
+ else logger.info("Suppressing remote exception cleaning up from failed close", e); // Log suppressed exception.
+ }
}
- finally {
- // remove the instance from the factory
- remoteSessionFactory.removeSession(this);
- }
}
}
Modified: trunk/src/jar/server-rmi/java/org/mulgara/server/rmi/RemoteJenaSessionImpl.java
===================================================================
--- trunk/src/jar/server-rmi/java/org/mulgara/server/rmi/RemoteJenaSessionImpl.java 2011-09-28 13:40:13 UTC (rev 2053)
+++ trunk/src/jar/server-rmi/java/org/mulgara/server/rmi/RemoteJenaSessionImpl.java 2011-09-28 16:13:13 UTC (rev 2054)
@@ -60,7 +60,6 @@
implements RemoteJenaSession {
/** Logger. */
- @SuppressWarnings("unused")
private final static Logger logger = Logger.getLogger(RemoteJenaSessionImpl.class.getName());
/**
@@ -82,11 +81,18 @@
}
public void close() throws QueryException, RemoteException {
+ boolean success = false;
try {
super.close();
+ success = true;
+ } finally {
+ try {
+ // remove the instance from the factory
+ remoteSessionFactory.removeSession(this);
+ } catch (RemoteException e) {
+ if (success) throw e; // This is a new exception, need to re-throw it.
+ else logger.info("Suppressing remote exception cleaning up from failed close", e); // Log suppressed exception.
+ }
}
- finally {
- remoteSessionFactory.removeSession(this);
- }
}
}
Modified: trunk/src/jar/store-nodepool-xa/java/org/mulgara/store/nodepool/xa/XANodePoolImpl.java
===================================================================
--- trunk/src/jar/store-nodepool-xa/java/org/mulgara/store/nodepool/xa/XANodePoolImpl.java 2011-09-28 13:40:13 UTC (rev 2053)
+++ trunk/src/jar/store-nodepool-xa/java/org/mulgara/store/nodepool/xa/XANodePoolImpl.java 2011-09-28 16:13:13 UTC (rev 2054)
@@ -709,6 +709,7 @@
*/
public synchronized void rollback() throws SimpleXAResourceException {
checkInitialized();
+ boolean success = false;
try {
if (prepared) {
// Restore phaseIndex and phaseNumber to their previous values.
@@ -723,6 +724,7 @@
block.write();
metarootFile.force();
}
+ success = true;
} catch (IOException ex) {
throw new SimpleXAResourceException(
"I/O error while performing rollback (invalidating metaroot)", ex
@@ -731,9 +733,9 @@
try {
currentPhase = freeList.new Phase(committedPhaseToken.getPhase());
} catch (IOException ex) {
- throw new SimpleXAResourceException(
- "I/O error while performing rollback (new committed phase)", ex
- );
+ String msg = "I/O error while performing rollback (new committed phase)";
+ if (success) throw new SimpleXAResourceException(msg, ex); // new exception, need to re-throw.
+ else logger.info(msg, ex); // already had a different exception, suppress this one and log it.
}
}
}
Modified: trunk/src/jar/util/java/org/mulgara/util/IntFile.java
===================================================================
--- trunk/src/jar/util/java/org/mulgara/util/IntFile.java 2011-09-28 13:40:13 UTC (rev 2053)
+++ trunk/src/jar/util/java/org/mulgara/util/IntFile.java 2011-09-28 16:13:13 UTC (rev 2054)
@@ -389,6 +389,7 @@
*/
private void close(boolean truncateFile) throws IOException {
// Truncate the file to the correct size.
+ boolean success = false;
try {
unmap();
@@ -401,11 +402,18 @@
fc.close();
}
}
+ success = true;
} finally {
fc = null;
if (raf != null) {
- raf.close();
- raf = null;
+ try {
+ raf.close();
+ } catch (IOException e) {
+ if (success) throw e; // Everything else worked, rethrow this.
+ else logger.info("Suppressing I/O exception closing failed IntFile", e); // Log and ignore, already got another exception.
+ } finally {
+ raf = null;
+ }
}
}
}
Modified: trunk/src/jar/util-xa/java/org/mulgara/store/xa/FreeList.java
===================================================================
--- trunk/src/jar/util-xa/java/org/mulgara/store/xa/FreeList.java 2011-09-28 13:40:13 UTC (rev 2053)
+++ trunk/src/jar/util-xa/java/org/mulgara/store/xa/FreeList.java 2011-09-28 16:13:13 UTC (rev 2054)
@@ -342,12 +342,21 @@
try {
unmap();
} finally {
+ IOException ex = null;
try {
if (itemToPhaseSeqMap != null) itemToPhaseSeqMap.delete();
+ } catch (IOException e) {
+ ex = e;
} finally {
itemToPhaseSeqMap = null;
+ }
+ try {
blockFile.close();
+ } catch (IOException e) {
+ if (ex == null) ex = e;
+ else logger.info("Suppressing exception deleting file for failed FreeList", e);
}
+ if (ex != null) throw ex;
}
}
@@ -360,12 +369,21 @@
try {
unmap();
} finally {
+ IOException ex = null;
try {
if (itemToPhaseSeqMap != null) itemToPhaseSeqMap.delete();
+ } catch (IOException e) {
+ ex = e;
} finally {
itemToPhaseSeqMap = null;
+ }
+ try {
blockFile.delete();
+ } catch (IOException e) {
+ if (ex == null) ex = e;
+ else logger.info("Suppressing exception deleting file for failed FreeList", e);
}
+ if (ex != null) throw ex;
}
}
Modified: trunk/src/jar/util-xa/java/org/mulgara/store/xa/ManagedBlockFile.java
===================================================================
--- trunk/src/jar/util-xa/java/org/mulgara/store/xa/ManagedBlockFile.java 2011-09-28 13:40:13 UTC (rev 2053)
+++ trunk/src/jar/util-xa/java/org/mulgara/store/xa/ManagedBlockFile.java 2011-09-28 16:13:13 UTC (rev 2054)
@@ -181,6 +181,7 @@
* @throws IOException if an I/O error occurs.
*/
private void close(boolean deleteFiles) throws IOException {
+ boolean success = false;
try {
if (blockFile != null) {
try {
@@ -206,13 +207,19 @@
}
}
}
+ success = true;
} finally {
- if (freeList != null) {
- if (deleteFiles) {
- freeList.delete();
- } else {
- freeList.close();
+ try {
+ if (freeList != null) {
+ if (deleteFiles) {
+ freeList.delete();
+ } else {
+ freeList.close();
+ }
}
+ } catch (IOException e) {
+ if (success) throw e; // Worked up to now; re-throw this exception.
+ else logger.info("Suppressing I/O exception while closing failed resource", e); // Something else already failed.
}
}
}
More information about the Mulgara-svn
mailing list