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() ;