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 <[email protected]> Authored: Tue Oct 25 12:50:33 2016 +0100 Committer: Andy Seaborne <[email protected]> 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();
