openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Rick Curtis (JIRA)" <>
Subject [jira] [Commented] (OPENJPA-2422) ClassMapping and it's strategy will never get initialized due to some synchronizatin/wrong initializaion order problems
Date Thu, 29 Aug 2013 18:08:53 GMT


Rick Curtis commented on OPENJPA-2422:

Also, can you post the contents of your persistence.xml file?
> ClassMapping and it's strategy will never get initialized due to some synchronizatin/wrong
initializaion order problems
> -----------------------------------------------------------------------------------------------------------------------
>                 Key: OPENJPA-2422
>                 URL:
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: jpa, kernel
>    Affects Versions: 2.2.0, 2.2.1, 2.2.2
>         Environment: Apache ServiceMix 4.5.2
>            Reporter: Piotr Klimczak
>            Priority: Blocker
>              Labels: ClassCastException, ManyToOne, OneToMany, synchronization
>         Attachments: OPENJPA-2422.ResolveClassMetaData.trace, OPENJPA-2422.ResolveMetaDataRepository.trace
> After I have switched my software to ServiceMix 4.5.2 I have faced very strange blocking
> I have bidirection relation: OneToMany and ManyToOne that was working fine before switching
to ServiceMix 4.5.2. 
> After switching to ServiceMix 4.5.2 i am getting this Exception:
> {code}
> Caused by: java.lang.ClassCastException: org.apache.openjpa.util.LongId cannot be cast
>         at org.apache.openjpa.kernel.StateManagerImpl.replaceField(
>         at org.apache.openjpa.kernel.StateManagerImpl.storeObjectField(
>         at org.apache.openjpa.kernel.StateManagerImpl.storeObject(
>         at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.setMappedBy(
>         at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.initializeState(
>         at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.initialize(
>         at org.apache.openjpa.kernel.DelegatingStoreManager.initialize(
>         at org.apache.openjpa.kernel.ROPStoreManager.initialize(
>         at org.apache.openjpa.kernel.BrokerImpl.initialize(
>         at org.apache.openjpa.kernel.BrokerImpl.find(
>         ... 133 more
> {code}
> As I have done some debugging, it looks like as some synchronization problems in OpenJPA.
> I'm getting this exception, because ClassMappings are constructed and putted into MODE_META
state, before MetaDataRepository that owns them reaches MODE_MAPPING_INIT. So then when MetaDataRepository
reaches MODE_MAPPING_INIT state, all ClassMappings are already in MODE_META state and will
never be putted into MODE_MAPPING_INIT state as implemented in resolve method in MetaDataRepository:
> {code}
>     /**
>      * Resolve the given metadata if needed. There are three goals:
>      * <ol>
>      * <li>Make sure no unresolved metadata gets back to the client.</li>
>      * <li>Avoid infinite reentrant calls for mutually-dependent metadatas by allowing
>      * metadata to be returned to other metadatas.</li>
>      * <li>Always make sure the superclass metadata is resolved before the subclass
metadata so that
>      * the subclass can access the super's list of fields.</li>
>      * </ol>
>      * Note that the code calling this method is synchronized, so this method doesn't
have to be.
>      */
>     private void resolve(ClassMetaData meta) {
>         // return anything that has its metadata resolved, because that means
>         // it is either fully resolved or must at least be in the process of
>         // resolving mapping, etc since we do that right after meta resolve
>         if (meta == null || _resMode == MODE_NONE || (meta.getResolve() & MODE_META)
!= 0)
>             return;
> {code}
> So it makes ClassMapping's strategy impossible to initialize, once it reaches MODE_META
> Due to above problem for example the RelationFieldStrategy will never get initialized,
so then the FieldMetadata has _intermediate filed set to false which causes OpenJPA to set
a LongId value to the field of type PARENT.
> In my case, this is a blocker.
> Unfortunately i am not able to write a testcase for this bug due to both: do not have
a time for this and scenerio is way too complex- multithreaded app.
> In my case problem occurs in aprox 95% app starts.
> Tested on versions 2.2.2, 2.2.0, so same problems probably occurs on 2.2.1.
> All test has been made with ServiceMix 4.5.2.

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:

View raw message