You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by "Rick Curtis (JIRA)" <ji...@apache.org> on 2010/04/13 21:38:51 UTC

[jira] Updated: (OPENJPA-1630) NPE in MetaDataRepository when preloading is enabled under heavy stress.

     [ https://issues.apache.org/jira/browse/OPENJPA-1630?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Rick Curtis updated OPENJPA-1630:
---------------------------------

    Attachment: OPENJPA-1630.patch

There are a couple of ways to fix this problem. The easiest is to always lock on the _registered list when mutating, regardless of whether or not _locking is set.

The not so easy, but probably more correct solution is to only add classes to the _registered list that each MDR cares about. I'm leaning toward the first solution for the 2.0.x branch due to stability concerns and I'll investigate fixing it differently in trunk.

> NPE in MetaDataRepository when preloading is enabled under heavy stress.
> ------------------------------------------------------------------------
>
>                 Key: OPENJPA-1630
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-1630
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: kernel
>    Affects Versions: 1.2.2, 2.0.0-beta3, 2.0.0, 2.0.1, 2.1.0
>            Reporter: Rick Curtis
>            Assignee: Rick Curtis
>         Attachments: OPENJPA-1630.patch
>
>
> A timing window exists in the MetaDataRepository where the following[1] NPE can be encountered. It is incorrect to assume that calling processRegisteredClasses at the end of preload would process all registered classes. As it turns out, that call does process all registered classes that this instance of the MDR cares about. The problem comes in when after the MDR is preloaded, Entities that belong to a different PU are registered with the PCRegistry and they are added to the _registered list. 
> [1] Caused by: java.lang.NullPointerException
>         at org.apache.openjpa.meta.MetaDataRepository.processRegisteredClasses(MetaDataRepository.java:1622)
>         at org.apache.openjpa.meta.ClassMetaData.getPCSubclasses(ClassMetaData.java:364)
>         at org.apache.openjpa.meta.ClassMetaData.getPCSubclassMetaDatas(ClassMetaData.java:381)
>         at org.apache.openjpa.meta.ClassMetaData.getMappedPCSubclassMetaDatas(ClassMetaData.java:403)
>         at org.apache.openjpa.jdbc.meta.ClassMapping.getMappedPCSubclassMappings(ClassMapping.java:628)
>         at org.apache.openjpa.jdbc.meta.ClassMapping.getIndependentAssignableMappings(ClassMapping.java:667)
>         at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.initializeState(JDBCStoreManager.java:380)
>         at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.initialize(JDBCStoreManager.java:342)
>         at com.ibm.ws.persistence.jdbc.kernel.WsJpaJDBCStoreManager.initialize(WsJpaJDBCStoreManager.java:147)
>         at org.apache.openjpa.kernel.DelegatingStoreManager.initialize(DelegatingStoreManager.java:112)
>         at org.apache.openjpa.kernel.ROPStoreManager.initialize(ROPStoreManager.java:57)
>         at org.apache.openjpa.kernel.BrokerImpl.initialize(BrokerImpl.java:1005)
>         at org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:963)
>         ... 46 more

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira