[
https://issues.apache.org/jira/browse/OPENJPA-739?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Michael Dick closed OPENJPA-739.
--------------------------------
Resolution: Cannot Reproduce
Couldn't reproduce with subclassing disabled, reopen if you see different
results.
> Multi thread calls to EntityManagerFactory.getEntityManager() results in
> org.apache.openjpa.persistence.ArgumentException
> -------------------------------------------------------------------------------------------------------------------------
>
> Key: OPENJPA-739
> URL: https://issues.apache.org/jira/browse/OPENJPA-739
> Project: OpenJPA
> Issue Type: Bug
> Affects Versions: 1.1.0
> Environment: OS->Windows XP SP2
> App Server-> IBM Websphere App Server v6.1.0.13
> JDK-> IBM JDK v1.5
> JPA-> release 1.1.0
> Reporter: Sachin Deshpande
> Priority: Critical
> Original Estimate: 24h
> Remaining Estimate: 24h
>
> Multi thread calls to EntityManagerFactory.getEntityManager() results in
> <openjpa-1.1.0-r422266:657916 fatal user error>
> org.apache.openjpa.persistence.ArgumentException: Field
> "*.*.*.entity.Rtlr.consCollection" declares "*.*.*.entity.Cons.rtlrCd" as its
> mapped-by field, but this field is not a direct relation.
> at
> org.apache.openjpa.jdbc.meta.strats.RelationToManyInverseKeyFieldStrategy.map(RelationToManyInverseKeyFieldStrategy.java:126)
> at
> org.apache.openjpa.jdbc.meta.strats.RelationCollectionInverseKeyFieldStrategy.map(RelationCollectionInverseKeyFieldStrategy.java:95)
> at
> org.apache.openjpa.jdbc.meta.FieldMapping.setStrategy(FieldMapping.java:120)
> at
> org.apache.openjpa.jdbc.meta.RuntimeStrategyInstaller.installStrategy(RuntimeStrategyInstaller.java:80)
> at
> org.apache.openjpa.jdbc.meta.FieldMapping.resolveMapping(FieldMapping.java:438)
> at
> org.apache.openjpa.jdbc.meta.FieldMapping.resolve(FieldMapping.java:403)
> at
> org.apache.openjpa.jdbc.meta.ClassMapping.resolveMapping(ClassMapping.java:812)
> at
> org.apache.openjpa.meta.ClassMetaData.resolve(ClassMetaData.java:1625)
> at
> org.apache.openjpa.meta.MetaDataRepository.processBuffer(MetaDataRepository.java:717)
> at
> org.apache.openjpa.meta.MetaDataRepository.resolveMapping(MetaDataRepository.java:677)
> at
> org.apache.openjpa.meta.MetaDataRepository.resolve(MetaDataRepository.java:555)
> at
> org.apache.openjpa.meta.MetaDataRepository.getMetaData(MetaDataRepository.java:308)
> at org.apache.openjpa.enhance.PCEnhancer.<init>(PCEnhancer.java:248)
> at org.apache.openjpa.enhance.PCEnhancer.<init>(PCEnhancer.java:219)
> at org.apache.openjpa.enhance.PCEnhancer.<init>(PCEnhancer.java:187)
> at
> org.apache.openjpa.enhance.ManagedClassSubclasser.prepareUnenhancedClasses(ManagedClassSubclasser.java:121)
> at
> org.apache.openjpa.kernel.AbstractBrokerFactory.loadPersistentTypes(AbstractBrokerFactory.java:310)
> at
> org.apache.openjpa.kernel.AbstractBrokerFactory.initializeBroker(AbstractBrokerFactory.java:228)
> at
> org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:190)
> at
> org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:142)
> at
> org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:192)
> at
> org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:145)
> at
> org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:56)
> at *.*.*.utility.DBUtilities.getEntityManager(DBUtilities.java:20)
> ...
> ...
> ...
> To access all EntityManagers we have the following custom class:
> public class DBUtilities {
> private static EntityManagerFactory emf = null;
>
> static {
> CommonResources resource = CommonResources.getInstance();
> String env = resource.getValue("jndi.persistanceUnit.use");
> emf = Persistence.createEntityManagerFactory(env);
> }
>
> /**
> * Return Entity Manager
> * @return
> */
> public static EntityManager getEntityManager() {
> return emf.createEntityManager();
> }
> }
> The code is supposed to run in a multi-threaded environment where
> parallel threads invoke DBUtilities.getEntityManager() method. In such a
> scenario, we get the above exception.
> However, if we 'synchronize' the DBUtilities's getEntityManager()
> method, the exception does not occur and the code executes successfully.
> This is contrary to our understanding that EntityManagerFactory is
> thread safe and EntityManagerFactory's .createEntityManager() method creates
> a new instance of EntityManager everytime though being invoked by multiple
> threads.
> Please advice.
--
This message is automatically generated by JIRA.
-
For more information on JIRA, see: http://www.atlassian.com/software/jira