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 2016/10/26 21:43:32 UTC

[5/8] jena git commit: JENA-1249 - Don't touch prefixes unless non-empty to be merged.

JENA-1249 - Don't touch prefixes unless non-empty to be merged.

Cope with initialization ordering effects.

Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/d865a839
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/d865a839
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/d865a839

Branch: refs/heads/master
Commit: d865a839c9268b5f2e23c223c193f409b887a28c
Parents: 4573a43
Author: Andy Seaborne <an...@apache.org>
Authored: Tue Oct 25 12:50:33 2016 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Tue Oct 25 12:50:33 2016 +0100

----------------------------------------------------------------------
 .../org/apache/jena/rdf/model/ModelFactory.java |  4 ++
 .../apache/jena/rdf/model/impl/ModelCom.java    | 42 +++++++++++++++++---
 .../jena/rdf/model/test/TestModelFactory.java   |  4 +-
 .../rdf/model/test/TestModelPrefixMapping.java  |  3 ++
 4 files changed, 46 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/d865a839/jena-core/src/main/java/org/apache/jena/rdf/model/ModelFactory.java
----------------------------------------------------------------------
diff --git a/jena-core/src/main/java/org/apache/jena/rdf/model/ModelFactory.java b/jena-core/src/main/java/org/apache/jena/rdf/model/ModelFactory.java
index b1243dc..6c0bac5 100644
--- a/jena-core/src/main/java/org/apache/jena/rdf/model/ModelFactory.java
+++ b/jena-core/src/main/java/org/apache/jena/rdf/model/ModelFactory.java
@@ -66,13 +66,17 @@ public class ModelFactory extends ModelFactoryBase
 
          @param pm the default prefixes to use
          @return the previous default prefix mapping
+         @deprecated This feature wil be removed from ModelFactory
     */
+    @Deprecated
     public static PrefixMapping setDefaultModelPrefixes( PrefixMapping pm )
         { return ModelCom.setDefaultModelPrefixes( pm ); }
 
     /**
         Answer the current default model prefixes PrefixMapping object.
+        @deprecated This feature wil be removed from ModelFactory
     */
+    @Deprecated
     public static PrefixMapping getDefaultModelPrefixes()
         { return ModelCom.getDefaultModelPrefixes(); }
 

http://git-wip-us.apache.org/repos/asf/jena/blob/d865a839/jena-core/src/main/java/org/apache/jena/rdf/model/impl/ModelCom.java
----------------------------------------------------------------------
diff --git a/jena-core/src/main/java/org/apache/jena/rdf/model/impl/ModelCom.java b/jena-core/src/main/java/org/apache/jena/rdf/model/impl/ModelCom.java
index 0efb3b0..331934c 100644
--- a/jena-core/src/main/java/org/apache/jena/rdf/model/impl/ModelCom.java
+++ b/jena-core/src/main/java/org/apache/jena/rdf/model/impl/ModelCom.java
@@ -52,10 +52,12 @@ import org.apache.jena.vocabulary.RDF ;
 public class ModelCom extends EnhGraph
 implements Model, PrefixMapping, Lock
 {
-    private static final RDFReaderF readerFactory = new RDFReaderFImpl();
-    private static final RDFWriterF writerFactory = new RDFWriterFImpl();
+    private static RDFReaderF readerFactory = new RDFReaderFImpl();
+    private static RDFWriterF writerFactory = new RDFWriterFImpl();
     private Lock modelLock = null ;
-    private static PrefixMapping defaultPrefixMapping = PrefixMapping.Factory.create();
+    /** @deprecated Remove when setDefaultModelPrefixes etc removed. */
+    @Deprecated
+    private static PrefixMapping defaultPrefixMapping = null; // Should be the default value in Java.
 
     static {
         // This forces RIOT (in ARQ) to initialize but after Jena readers/writers
@@ -64,19 +66,39 @@ implements Model, PrefixMapping, Lock
         JenaSystem.init() ;
     }
     
+    /* Internal.
+     * During intialization, all sorts of class loading orders can happen.
+     * Many places create Models, calling into a ModelCom constructor.
+     * so this helps the runtime ensure that ModelCom is
+     * initialized before a ModelCom is created.   
+     */
+    
+    static {
+        if ( defaultPrefixMapping == null )
+            defaultPrefixMapping = PrefixMapping.Factory.create();
+    }
+    
     /**
     	make a model based on the specified graph
      */
     public ModelCom( Graph base ) 
     { this( base, BuiltinPersonalities.model ); }
 
-    public ModelCom( Graph base, Personality<RDFNode> personality )
-    { super( base, personality ); 
-    withDefaultMappings( defaultPrefixMapping ); }
+    public ModelCom( Graph base, Personality<RDFNode> personality ) { 
+        super( base, personality );
+        // JENA-1249. Touching the prefix mappings can incur initialization costs.
+        // Also, must protect against defaultPrefixMapping being null due to initialization effects.
+        if ( defaultPrefixMapping != null && ! defaultPrefixMapping.hasNoMappings() )
+            withDefaultMappings( defaultPrefixMapping );
+    }  
 
+    /** @deprecated This feature will be removed */
+    @Deprecated
     public static PrefixMapping getDefaultModelPrefixes()
     { return defaultPrefixMapping; }
 
+    /** @deprecated This feature will be removed */
+    @Deprecated
     public static PrefixMapping setDefaultModelPrefixes(PrefixMapping pm)
     {
         PrefixMapping result = defaultPrefixMapping ;
@@ -1052,7 +1074,15 @@ implements Model, PrefixMapping, Lock
     @Override
     public String shortForm( String uri )
     { return getPrefixMapping().shortForm( uri ); }
+    
+    @Override
+    public boolean hasNoMappings()
+    { return getPrefixMapping().hasNoMappings(); }
 
+    @Override
+    public int numPrefixes()
+    { return getPrefixMapping().numPrefixes() ; }
+    
     /**
         Service method to update the namespaces of  a Model given the
         mappings from prefix names to sets of URIs.

http://git-wip-us.apache.org/repos/asf/jena/blob/d865a839/jena-core/src/test/java/org/apache/jena/rdf/model/test/TestModelFactory.java
----------------------------------------------------------------------
diff --git a/jena-core/src/test/java/org/apache/jena/rdf/model/test/TestModelFactory.java b/jena-core/src/test/java/org/apache/jena/rdf/model/test/TestModelFactory.java
index d1b6f6f..d5ea1a9 100644
--- a/jena-core/src/test/java/org/apache/jena/rdf/model/test/TestModelFactory.java
+++ b/jena-core/src/test/java/org/apache/jena/rdf/model/test/TestModelFactory.java
@@ -98,12 +98,14 @@ public class TestModelFactory extends TestCase
 		// TODO Set ModelFactory.findAssemblerRoots( Model model )
 	}
 
-	public void testGetDefaultPrefixMapping()
+	@SuppressWarnings("deprecation")
+    public void testGetDefaultPrefixMapping()
 	{
 		Assert.assertSame(ModelCom.getDefaultModelPrefixes(),
 				ModelFactory.getDefaultModelPrefixes());
 	}
 
+    @SuppressWarnings("deprecation")
 	public void testSetDefaultPrefixMapping()
 	{
 		final PrefixMapping original = ModelCom.getDefaultModelPrefixes();

http://git-wip-us.apache.org/repos/asf/jena/blob/d865a839/jena-core/src/test/java/org/apache/jena/rdf/model/test/TestModelPrefixMapping.java
----------------------------------------------------------------------
diff --git a/jena-core/src/test/java/org/apache/jena/rdf/model/test/TestModelPrefixMapping.java b/jena-core/src/test/java/org/apache/jena/rdf/model/test/TestModelPrefixMapping.java
index 706c381..2e4e456 100644
--- a/jena-core/src/test/java/org/apache/jena/rdf/model/test/TestModelPrefixMapping.java
+++ b/jena-core/src/test/java/org/apache/jena/rdf/model/test/TestModelPrefixMapping.java
@@ -78,11 +78,13 @@ public class TestModelPrefixMapping extends AbstractTestPrefixMapping
 		return modelFactory.getPrefixMapping();
 	}
 
+	@SuppressWarnings("deprecation")
 	public void restorePrefixes()
 	{
 		ModelCom.setDefaultModelPrefixes(prevMap);
 	}
 
+	@SuppressWarnings("deprecation")
 	public void setPrefixes()
 	{
 		prevMap = ModelCom.setDefaultModelPrefixes(baseMap);
@@ -100,6 +102,7 @@ public class TestModelPrefixMapping extends AbstractTestPrefixMapping
 		restorePrefixes();
 	}
 
+	@SuppressWarnings("deprecation")
 	public void testGetDefault()
 	{
 		setPrefixes();