You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2013/11/28 18:46:05 UTC
svn commit: r1546406 -
/jena/trunk/jena-arq/src/main/java/org/apache/jena/riot/system/IRIResolver.java
Author: andy
Date: Thu Nov 28 17:46:04 2013
New Revision: 1546406
URL: http://svn.apache.org/r1546406
Log:
JENA-597 Sync wrapper for the global resolver.
Modified:
jena/trunk/jena-arq/src/main/java/org/apache/jena/riot/system/IRIResolver.java
Modified: jena/trunk/jena-arq/src/main/java/org/apache/jena/riot/system/IRIResolver.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/org/apache/jena/riot/system/IRIResolver.java?rev=1546406&r1=1546405&r2=1546406&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/org/apache/jena/riot/system/IRIResolver.java (original)
+++ jena/trunk/jena-arq/src/main/java/org/apache/jena/riot/system/IRIResolver.java Thu Nov 28 17:46:04 2013
@@ -91,13 +91,9 @@ public abstract class IRIResolver
static private String globalBase = IRILib.filenameToIRI("./") ;
// The global resolver may be accessed by multiple threads
- // but also some actions need consistency across more than one access
- // so just sync'd access to globalResolver is not enough, and we need
- // a lock object.
- static private Object globalResolverLock = new Object() ;
+ // Other resolvers are not thread safe.
+
private static IRIResolver globalResolver ;
- // Don't pass out - use the statics here.
- // public static IRIResolver get() { return globalResolver ; }
/**
* The current global resolver based on the working directory
@@ -111,7 +107,7 @@ public abstract class IRIResolver
cwd = iriFactory.create("file:///") ;
e.printStackTrace(System.err) ;
}
- globalResolver = IRIResolver.create(cwd) ;
+ globalResolver = new IRIResolverSync(IRIResolver.create(cwd)) ;
}
/**
@@ -122,14 +118,12 @@ public abstract class IRIResolver
* @return String The filename as an absolute URL
*/
static public String resolveFileURL(String filename) throws IRIException {
- synchronized (globalResolverLock) {
- IRI r = globalResolver.resolve(filename) ;
- if (!r.getScheme().equalsIgnoreCase("file")) {
- // Pragmatic hack that copes with "c:"
- return resolveFileURL("./" + filename) ;
- }
- return r.toString() ;
+ IRI r = globalResolver.resolve(filename) ;
+ if (!r.getScheme().equalsIgnoreCase("file")) {
+ // Pragmatic hack that copes with "c:"
+ return resolveFileURL("./" + filename) ;
}
+ return r.toString() ;
}
/**
@@ -188,18 +182,16 @@ public abstract class IRIResolver
* No exception thrown by this method.
*/
static private IRI resolveIRI(String relStr, String baseStr) {
- synchronized (globalResolverLock) {
- IRI i = iriFactory.create(relStr) ;
- if (i.isAbsolute())
- // removes excess . segments
- return globalResolver.getBaseIRI().create(i) ;
-
- IRI base = iriFactory.create(baseStr) ;
-
- if ("file".equalsIgnoreCase(base.getScheme()))
- return globalResolver.getBaseIRI().create(i) ;
- return base.create(i) ;
- }
+ IRI i = iriFactory.create(relStr) ;
+ if (i.isAbsolute())
+ // removes excess . segments
+ return globalResolver.getBaseIRI().create(i) ;
+
+ IRI base = iriFactory.create(baseStr) ;
+
+ if ("file".equalsIgnoreCase(base.getScheme()))
+ return globalResolver.getBaseIRI().create(i) ;
+ return base.create(i) ;
}
public static IRIResolver create() {
@@ -233,9 +225,7 @@ public abstract class IRIResolver
*/
static public IRI chooseBaseURI() {
- synchronized (globalResolverLock) {
- return globalResolver.getBaseIRI() ;
- }
+ return globalResolver.getBaseIRI() ;
}
public String getBaseIRIasString() {
@@ -379,9 +369,7 @@ public abstract class IRIResolver
if (baseS == null)
base = chooseBaseURI() ;
else
- synchronized (globalResolverLock) {
- base = globalResolver.resolveSilent(baseS) ;
- }
+ base = globalResolver.resolveSilent(baseS) ;
}
public IRIResolverNormal(IRI baseIRI)
@@ -431,4 +419,28 @@ public abstract class IRIResolver
return iri ;
}
}
+
+ static class IRIResolverSync extends IRIResolver
+ {
+ private final IRIResolver other ;
+
+ IRIResolverSync(IRIResolver other) { this.other = other ; }
+ @Override
+ synchronized
+ protected IRI getBaseIRI() {
+ return other.getBaseIRI() ;
+ }
+
+ @Override
+ synchronized
+ public IRI resolve(String uriStr) {
+ return other.resolve(uriStr) ;
+ }
+
+ @Override
+ synchronized
+ public IRI resolveSilent(String uriStr) {
+ return other.resolveSilent(uriStr) ;
+ }
+ }
}