[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [eclipselink-users] PersistenceProvider.createEntityManagerFactory() not work correctly when emSetupImpl.isUndeployed() returns true

Thanks for reply.

I'm sorry for the late reply.
I want to register now the bug.

I'm grateful for your work.
Thanks.
--
TH
tech-ml@xxxxxxxxxx


> Please log a bug.
> Thanks a lot for finding the bug and suggesting the right solution,
> Andrei
> 
> On 12/13/2012 8:39 PM, tech-ml@xxxxxxxxxx wrote:
> >
> > Hello Tom,
> >
> > I received following Exception:
> > Exception Description: Unable to predeploy PersistenceUnit [fooPU] in invalid state [Undeployed]
> >          at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.predeploy(EntityManagerSetupImpl.java:1101)
> >          at org.eclipse.persistence.jpa.PersistenceProvider.createEntityManagerFactory(PersistenceProvider.java:131)
> >          at javax.persistence.Persistence.createEntityManagerFactory(Unknown Source)
> >          at javax.persistence.Persistence.createEntityManagerFactory(Unknown Source)
> >          at my.source.MyMethod()
> >
> > I think that the original intention is made so that a UNDEPLOYED state may be followed by the Line.133 .
> > But emSetupImpl.predeploy() is throw Exception when emSetupImpl.isUndeployed()==true, and createEMF() is has passed while checking on Line.126 .
> > When I call EntityManager.close() from another thread between PersistenceProvider.createEntityManagerFactory():Line.95 and Line.125, this problem reappears.
> >
> > Thread A      EMF      Thread B
> >     |                       |
> > createEMF----->-           |
> >     |           |           |
> >     |           |<------createEMF()Line.95-111
> > EMF.close()--->-           |
> >                 x<------createEMF()Line.125-131
> >
> >
> > I know that it should call EntityManager.close() at the end of the application, I could not but do like this this time.
> >
> > Thanks.
> >
> >
> >> What is the PersistenceException you see?
> >>
> >> On 13/12/2012 1:52 AM, TH wrote:
> >>> Hello all,
> >>>
> >>> I am using EclipseLink 2.3.2.
> >>> When I call PersistenceProvider.createEntityManagerFactory(), A
> >>> PersistenceException occurs rarely.
> >>>
> >>> I think that there is a problem in the following parts.
> >>> in PersistenceProvider.createEntityManagerFactory():
> >>> [Line.123 of eclipselink-src-2.3.2.v20111125-r10461]
> >>> [Line.123 of eclipselink-src-2.3.3.v20120629-r11760]
> >>> [Line.123 of eclipselink-src-2.4.0.v20120608-r11652]
> >>>
> >>> // synchronized to prevent undeploying by other threads.
> >>> boolean undeployed = false;
> >>> synchronized(emSetupImpl) {
> >>>       if(emSetupImpl.isUndeployed()) {
> >>>           undeployed = true;
> >>>       }
> >>>       // emSetupImpl has been already predeployed, predeploy will just
> >>> increment factoryCount.
> >>>       emSetupImpl.predeploy(emSetupImpl.getPersistenceUnitInfo(),
> >>> nonNullProperties);
> >>> }
> >>> if(undeployed) {
> >>>       // after the emSetupImpl has been obtained from emSetupImpls
> >>>       // it has been undeployed by factory.close() in another thread - start
> >>> all over again.
> >>>       return createEntityManagerFactory(emName, properties);
> >>> }
> >>>
> >>>
> >>> I think if emSetupImpl.isUndeployed() is true, do not call
> >>> emSetupImpl.predeploy().
> >>> Considering processing UNDEPLOYED in the part under it,
> >>> I think that it should become the following code:
> >>>
> >>> synchronized(emSetupImpl) {
> >>>       if(emSetupImpl.isUndeployed()) {
> >>>           undeployed = true;
> >>>       } else {
> >>>           // emSetupImpl has been already predeployed, predeploy will just
> >>> increment factoryCount.
> >>>           emSetupImpl.predeploy(emSetupImpl.getPersistenceUnitInfo(),
> >>> nonNullProperties);
> >>>       }
> >>> }
> >>>
> >>>
> >>> What do you think?
> >>> Thanks.
> >>>
> >>> P.S: Sorry for my bad English.
> >>>
> >> _______________________________________________
> >> eclipselink-users mailing list
> >> eclipselink-users@xxxxxxxxxxx
> >> https://dev.eclipse.org/mailman/listinfo/eclipselink-users
> >>
> > _______________________________________________
> > eclipselink-users mailing list
> > eclipselink-users@xxxxxxxxxxx
> > https://dev.eclipse.org/mailman/listinfo/eclipselink-users
> _______________________________________________
> eclipselink-users mailing list
> eclipselink-users@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/eclipselink-users
>