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 2015/09/24 10:36:51 UTC
jena git commit: Put setting of initialization controls in better
order
Repository: jena
Updated Branches:
refs/heads/master 0dce23615 -> 802053f13
Put setting of initialization controls in better order
Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/802053f1
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/802053f1
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/802053f1
Branch: refs/heads/master
Commit: 802053f1374808c96727416740a1487593103a0d
Parents: 0dce236
Author: Andy Seaborne <an...@apache.org>
Authored: Thu Sep 24 09:36:37 2015 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Thu Sep 24 09:36:37 2015 +0100
----------------------------------------------------------------------
.../main/java/org/apache/jena/query/ARQ.java | 16 ++++++--
.../main/java/org/apache/jena/riot/RIOT.java | 8 ++--
.../org/apache/jena/system/InitJenaCore.java | 5 +--
.../src/main/java/org/apache/jena/sdb/SDB.java | 7 ++--
.../src/main/java/org/apache/jena/tdb/TDB.java | 42 +++++++++++++-------
5 files changed, 50 insertions(+), 28 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jena/blob/802053f1/jena-arq/src/main/java/org/apache/jena/query/ARQ.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/query/ARQ.java b/jena-arq/src/main/java/org/apache/jena/query/ARQ.java
index c9d2f84..8053d57 100644
--- a/jena-arq/src/main/java/org/apache/jena/query/ARQ.java
+++ b/jena-arq/src/main/java/org/apache/jena/query/ARQ.java
@@ -38,18 +38,26 @@ import org.slf4j.LoggerFactory ;
public class ARQ
{
+ // Initialization statics must be first in the class to avoid
+ // problems with recursive initialization. Specifcally,
+ // initLock being null because elsewhere started the initialization
+ // and is calling into the TDB class.
+ // The best order is:
+ // Initialization controls
+ // All calculated constants
+ // static { JenaSystem.init() ; }
+ // Otherwise, using constants after JenaSystem.init can lead to null being seen.
+
private static volatile boolean initialized = false ;
- // Must be initialized early for reentrant initialization.
private static final Object initLock = new Object() ;
// Initialization notes:
- // No use of ARQConstants before the initialization block. (Can be afterwards.)
+ // 1/ No use of ARQConstants before the initialization block. (Can be afterwards.)
// Risk is
// ARQConstants -> OWL -> ModelFactory -> jena initialization
// -> ARQ.init while initializing -> StageBuilder.init -> NodeConst -> rdf.type -> OWL
// recursing initialization, hits NPE via OWL.
-
- // And stageGenerator must be set before call ARQ.init.
+ // 2/ stageGenerator constant must be set before the call to ARQ.init.
/** Name of the execution logger */
public static final String logExecName = "com.hp.hpl.jena.arq.exec" ;
http://git-wip-us.apache.org/repos/asf/jena/blob/802053f1/jena-arq/src/main/java/org/apache/jena/riot/RIOT.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/RIOT.java b/jena-arq/src/main/java/org/apache/jena/riot/RIOT.java
index 8c45c68..e6dac18 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/RIOT.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/RIOT.java
@@ -24,6 +24,11 @@ import org.apache.jena.sparql.mgt.SystemInfo ;
import org.apache.jena.system.JenaSystem ;
public class RIOT {
+ // Initialization statics must be first in the class to avoid
+ // problems with recursive initialization.
+ private static volatile boolean initialized = false ;
+ private static Object initLock = new Object() ;
+
/** IRI for RIOT */
public static final String riotIRI = "http://jena.apache.org/#riot" ;
@@ -46,9 +51,6 @@ public class RIOT {
SysRIOT.StrictXSDLexicialForms = state ;
}
- private static volatile boolean initialized = false ;
- private static Object initLock = new Object() ;
-
public static void init() {
if ( initialized )
return ;
http://git-wip-us.apache.org/repos/asf/jena/blob/802053f1/jena-core/src/main/java/org/apache/jena/system/InitJenaCore.java
----------------------------------------------------------------------
diff --git a/jena-core/src/main/java/org/apache/jena/system/InitJenaCore.java b/jena-core/src/main/java/org/apache/jena/system/InitJenaCore.java
index 182fd74..aed4eed 100644
--- a/jena-core/src/main/java/org/apache/jena/system/InitJenaCore.java
+++ b/jena-core/src/main/java/org/apache/jena/system/InitJenaCore.java
@@ -24,6 +24,8 @@ import org.apache.jena.vocabulary.RDF ;
import org.apache.jena.vocabulary.RDFS ;
public class InitJenaCore implements JenaSubsystemLifecycle {
+ private static volatile boolean initialized = false ;
+ private static Object initLock = new Object() ;
@Override
public void start() {
@@ -38,9 +40,6 @@ public class InitJenaCore implements JenaSubsystemLifecycle {
return 10 ;
}
- private static volatile boolean initialized = false ;
- private static Object initLock = new Object() ;
-
public static void init() {
if ( initialized )
return ;
http://git-wip-us.apache.org/repos/asf/jena/blob/802053f1/jena-sdb/src/main/java/org/apache/jena/sdb/SDB.java
----------------------------------------------------------------------
diff --git a/jena-sdb/src/main/java/org/apache/jena/sdb/SDB.java b/jena-sdb/src/main/java/org/apache/jena/sdb/SDB.java
index 39e7634..4367c7c 100644
--- a/jena-sdb/src/main/java/org/apache/jena/sdb/SDB.java
+++ b/jena-sdb/src/main/java/org/apache/jena/sdb/SDB.java
@@ -41,6 +41,10 @@ import org.apache.jena.vocabulary.RDFS ;
public class SDB
{
+ // Must be first, especially the initLock setup.
+ private static volatile boolean initialized = false ;
+ private static Object initLock = new Object() ;
+
/** IRI for SDB */
public static final String sdbIRI = "http://jena.hpl.hp.com/#sdb" ;
@@ -80,9 +84,6 @@ public class SDB
// AssemblerVocab.register(g) ; // SDB
// }
- private static volatile boolean initialized = false ;
- private static Object initLock = new Object() ;
-
public static void init() {
if ( initialized )
return ;
http://git-wip-us.apache.org/repos/asf/jena/blob/802053f1/jena-tdb/src/main/java/org/apache/jena/tdb/TDB.java
----------------------------------------------------------------------
diff --git a/jena-tdb/src/main/java/org/apache/jena/tdb/TDB.java b/jena-tdb/src/main/java/org/apache/jena/tdb/TDB.java
index 2bd6227..6ad461f 100644
--- a/jena-tdb/src/main/java/org/apache/jena/tdb/TDB.java
+++ b/jena-tdb/src/main/java/org/apache/jena/tdb/TDB.java
@@ -55,6 +55,17 @@ import org.slf4j.Logger ;
import org.slf4j.LoggerFactory ;
public class TDB {
+ // Initialization statics must be first in the class to avoid
+ // problems with recursive initialization. Specifcally,
+ // initLock being null because elsewhere started the initialization
+ // and is calling into the TDB class.
+ // The best order is:
+ // Initialization controls
+ // All calculated constants
+ // static { JenaSystem.init() ; }
+ private static final Object initLock = new Object() ;
+ private static volatile boolean initialized = false ;
+
/** IRI for TDB */
public static final String tdbIRI = "http://jena.hpl.hp.com/#tdb" ;
@@ -199,8 +210,21 @@ public class TDB {
((Sync)object).sync() ;
}
- private static final Object initLock = new Object() ;
- private static volatile boolean initialized = false ;
+ // ---- Static constants read by modVersion
+ // ---- Must be after initialization.
+
+ static private String metadataLocation = "org/apache/jena/tdb/tdb-properties.xml" ;
+ static private Metadata metadata = new Metadata(metadataLocation) ;
+ /** The root package name for TDB */
+ public static final String PATH = "org.apache.jena.tdb" ;
+ // The names known to ModVersion : "NAME", "VERSION", "BUILD_DATE"
+
+ public static final String NAME = "TDB" ;
+ /** The full name of the current TDB version */
+ public static final String VERSION = metadata.get(PATH + ".version", "DEV") ;
+ /** The date and time at which this release was built */
+ public static final String BUILD_DATE = metadata.get(PATH + ".build.datetime", "unset") ;
+
static { JenaSystem.init(); }
/**
@@ -254,22 +278,10 @@ public class TDB {
// ---- Static constants read by modVersion
// ---- Must be after initialization.
- static private String metadataLocation = "org/apache/jena/tdb/tdb-properties.xml" ;
- static private Metadata metadata = new Metadata(metadataLocation) ;
-
- /** The root package name for TDB */
- public static final String PATH = "org.apache.jena.tdb" ;
+
// The names known to ModVersion : "NAME", "VERSION", "BUILD_DATE"
- public static final String NAME = "TDB" ;
-
- /** The full name of the current TDB version */
- public static final String VERSION = metadata.get(PATH + ".version", "DEV") ;
-
- /** The date and time at which this release was built */
- public static final String BUILD_DATE = metadata.get(PATH + ".build.datetime", "unset") ;
-
// Final initialization (in case any statics in this file are important).
static {
initialization2() ;