You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@jena.apache.org by "Simon Helsen (JIRA)" <ji...@apache.org> on 2013/06/05 21:00:20 UTC

[jira] [Created] (JENA-467) IRIResolverNormal should use synchronized CacheLRU

Simon Helsen created JENA-467:
---------------------------------

             Summary: IRIResolverNormal should use synchronized CacheLRU
                 Key: JENA-467
                 URL: https://issues.apache.org/jira/browse/JENA-467
             Project: Apache Jena
          Issue Type: Bug
          Components: ARQ
    Affects Versions: Jena 2.10.1
         Environment: Any IBM JRE 6 or higher
            Reporter: Simon Helsen
            Priority: Critical
         Attachments: patch.txt

The following exception may occur on an IBM JRE 6 or higher when more than one thread requires access to the org.apache.jena.atlas.lib.cache.CacheLRU embedded in IRIResolverNormal:

Caused by: java.lang.NullPointerException
	at java.util.LinkedHashMap.get(LinkedHashMap.java:337)
	at org.apache.jena.atlas.lib.cache.CacheLRU.get(CacheLRU.java:53)
	at org.apache.jena.riot.system.IRIResolver$IRIResolverNormal.resolveSilent(IRIResolver.java:403)
	at org.apache.jena.riot.system.IRIResolver$IRIResolverNormal.<init>(IRIResolver.java:359)
	at org.apache.jena.riot.system.IRIResolver.create(IRIResolver.java:212)
	at org.apache.jena.riot.system.RiotLib.profile(RiotLib.java:141)
	at org.apache.jena.riot.system.RiotLib.profile(RiotLib.java:130)
	at org.apache.jena.riot.system.RiotLib.profile(RiotLib.java:117)
	at org.apache.jena.riot.RiotReader.createParserTurtle(RiotReader.java:310)
	at org.apache.jena.riot.RiotReader.createParser(RiotReader.java:142)
	at org.apache.jena.riot.RiotReader.createParser(RiotReader.java:133)
	at org.apache.jena.riot.RDFParserRegistry$ReaderRIOTFactoryImpl$1.read(RDFParserRegistry.java:141)
	at org.apache.jena.riot.RDFDataMgr.process(RDFDataMgr.java:760)
	at org.apache.jena.riot.RDFDataMgr.read(RDFDataMgr.java:258)
	at org.apache.jena.riot.RDFDataMgr.read(RDFDataMgr.java:244)
	... 20 more

The problem seems to only occurs on IBM JRE 6 or higher as its implementation of LinkedHashMap is not thread safe. Note that the JDK specification does not required LinkedHashMap to be thread safe. 

The solution is to make use of CacheFactory.createSync when creating the Cache in the IRIResolverNormal. Patch attached

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira