openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Hans J. Prueller" <hans.pruel...@gmx.net>
Subject RE: TYPO? Howto integrate JPA within EJB2.1 session beans? [architecture]
Date Fri, 23 Feb 2007 17:43:24 GMT
Patrick,

I'm currently trying your tip with a PersistenceService util class doing
the lookup of a synchronized entity manager. The problem is that your sample
code does not work!

in fact the statement 

final BrokerFactory bf = OpenJPAPersistence.cast(emf);

is the problem. the above "cast" does not return a BrokerFactory instance!

I am using a 2 days old nightly snapshot 0.9.7 build 

Where is the problem? 

Hans

> -----Urspr√ľngliche Nachricht-----
> Von: Patrick Linskey [mailto:plinskey@bea.com]
> Gesendet: Donnerstag, 22. Februar 2007 23:22
> An: open-jpa-dev@incubator.apache.org
> Betreff: RE: RE: Howto integrate JPA within EJB2.1 session beans?
> [architecture]
> 
> > Unfortunately, that means that we're using a synchronized
> > block during the lookup. If it looks like EM lookup is a
> > scalability issue for your app, do let us know -- it would
> > be pretty straightforward to replace the synchronized block
> > with a concurrent map.
> 
> OK, I got fed up with that synchronized block. OPENJPA-161 tracks the
> issue; I've got a patch that I'll submit once some more eyes look at it.
> 
> -Patrick
> 
> --
> Patrick Linskey
> BEA Systems, Inc.
> 
> _______________________________________________________________________
> Notice:  This email message, together with any attachments, may contain
> information  of  BEA Systems,  Inc.,  its subsidiaries  and  affiliated
> entities,  that may be confidential,  proprietary,  copyrighted  and/or
> legally privileged, and is intended solely for the use of the individual
> or entity named in this message. If you are not the intended recipient,
> and have received this message in error, please immediately return this
> by email and then delete it.
> 
> > -----Original Message-----
> > From: Patrick Linskey [mailto:plinskey@bea.com]
> > Sent: Thursday, February 22, 2007 8:38 AM
> > To: open-jpa-dev@incubator.apache.org
> > Subject: RE: RE: Howto integrate JPA within EJB2.1 session
> > beans? [architecture]
> >
> > > If I understand it correct, I "just" have to bind the EMF
> > > onserver startup like.
> > >
> > > context.bind("my/jndi/name/for/emf",myEMFVariable);
> >
> > Yep.
> >
> > >         //does the statement below again create a NEW EMF
> > or ist this
> > >         //just a lookup in the jndi-tree? but why is it
> > > called "Create"
> > >         //and not get?
> > >         EntityManagerFactory emf = OpenJPAPersistence
> > >             .createEntityManagerFactory(
> > >                 "your/EMF/JNDI/location", (Context) null);
> >
> > It's just a lookup. I'm not sure why it's called 'create'. Anyone?
> >
> > >         //why do I have to create a new
> > broker/entitymanager this way?
> > >         //is this because I have to "synchronize" the SLSBs
> > > transaction
> > >         //context with the newly created entitymanager?
> >
> > Yes -- our current OpenJPAPersistence EM lookup methods all create new
> > EMs. The broker code will look up one associated with the current
> > transaction, which is what you're looking for.
> >
> > Unfortunately, that means that we're using a synchronized block during
> > the lookup. If it looks like EM lookup is a scalability issue for your
> > app, do let us know -- it would be pretty straightforward to
> > replace the
> > synchronized block with a concurrent map.
> >
> > > So if understand that right I just would have to call
> > >
> > > PersistenceService.getEntitymanager();
> > >
> > > in every SLSB method (NOT in ejbCreate) when needed? fine.
> >
> > Yep.
> >
> > > I really appreciate your help - it's quite complex to integrate
> > > JPA into an existing Java2EE 1.4 AppServer environment.. *puh*
> >
> > Yes -- sorry about that. We should at least be creating
> > better-designed
> > helper methods in OpenJPA to help out with this.
> >
> > One alternative, of course, is to use Spring 2, which does a
> > pretty good
> > job of JPA bootstrapping.
> >
> > -Patrick
> >
> > --
> > Patrick Linskey
> > BEA Systems, Inc.
> >
> > ______________________________________________________________
> > _________
> > Notice:  This email message, together with any attachments,
> > may contain
> > information  of  BEA Systems,  Inc.,  its subsidiaries  and
> > affiliated
> > entities,  that may be confidential,  proprietary,
> > copyrighted  and/or
> > legally privileged, and is intended solely for the use of the
> > individual
> > or entity named in this message. If you are not the intended
> > recipient,
> > and have received this message in error, please immediately
> > return this
> > by email and then delete it.
> >
> > > -----Original Message-----
> > > From: Hans Prueller [mailto:hans.prueller@gmx.net]
> > > Sent: Thursday, February 22, 2007 4:36 AM
> > > To: open-jpa-dev@incubator.apache.org;
> > > open-jpa-dev@incubator.apache.org
> > > Subject: Re: RE: Howto integrate JPA within EJB2.1 session
> > > beans? [architecture]
> > >
> > > Patrick,
> > >
> > > thank you for that tip. To be true, I was not aware of
> > > lifecycle related problems between my SLSBs and JPA - thank
> > > you for that hint. As I want to avoid working with
> > > ThreadLocal (simply because I didn't work with ThreadLocals
> > > yet) I would prefer the JNDI-EMF based approach.
> > >
> > > If I understand it correct, I "just" have to bind the EMF
> > > onserver startup like.
> > >
> > > context.bind("my/jndi/name/for/emf",myEMFVariable);
> > >
> > > I would be interested what the code for the
> > > PersistenceService class does:
> > >
> > >
> > >         //does the statement below again create a NEW EMF
> > or ist this
> > >         //just a lookup in the jndi-tree? but why is it
> > > called "Create"
> > >         //and not get?
> > >         EntityManagerFactory emf = OpenJPAPersistence
> > >             .createEntityManagerFactory(
> > >                 "your/EMF/JNDI/location", (Context) null);
> > >
> > >         //why do i have to cast the EMF to a brokerfactory now? I
> > >         //would guess the "broker" is something like a more abstract
> > >         //concept of entitymanager(factory)?
> > >
> > >         //why do I have to create a new
> > broker/entitymanager this way?
> > >         //is this because I have to "synchronize" the SLSBs
> > > transaction
> > >         //context with the newly created entitymanager?
> > >
> > >         BrokerFactory bf = OpenJPAPersistence.cast(emf);
> > >         Broker b = bf.newBroker(
> > >         bf.getConfiguration().getConnectionUserName(),
> > >           bf.getConfiguration().getConnectionPassword(),
> > >           true, // the broker is part of a JTA managed tx
> > >           bf.getConfiguration().getConnectionRetainModeConstant(),
> > >           true); // look for an existing Broker on the tx
> > >
> > >         broker.setAutoDetach(AutoDetach.DETACH_CLOSE, true);
> > >         broker.setAutoDetach(AutoDetach.DETACH_ROLLBACK, true);
> > >         broker.setDetachedNew(false);
> > >
> > >         return OpenJPAPersistence.toEntityManager(b);
> > >     }
> > >
> > > So if understand that right I just would have to call
> > >
> > > PersistenceService.getEntitymanager();
> > >
> > > in every SLSB method (NOT in ejbCreate) when needed? fine. I
> > > really appreciate your help - it's quite complex to integrate
> > > JPA into an existing Java2EE 1.4 AppServer environment.. *puh*
> > >
> > > regards
> > > Hans
> > >
> > > -------- Original-Nachricht --------
> > > Datum: Wed, 21 Feb 2007 08:43:20 -0800
> > > Von: "Patrick Linskey" <plinskey@bea.com>
> > > An: open-jpa-dev@incubator.apache.org
> > > CC:
> > > Betreff: RE: Howto integrate JPA within EJB2.1 session beans?
> > > [architecture]
> > >
> > > > Another common technique is to get an EMF into JNDI, either
> > > by using a
> > > > startup hook or deploying OpenJPA as a JCA RAR.
> > > >
> > > > Are you looking to integrate OpenJPA with your current managed
> > > > transaction? If so, I'd be careful about creating an EM in
> > > ejbCreate(),
> > > > as its lifecycle is related to the life of the SLSB, not to the
> > > > transactional context (the SLSB might be pooled). So, I'd
> > > just try to
> > > > get the EMF into JNDI when the server starts (creating EMFs
> > > is slow).
> > > > Then, you could avoid having to use your own ThreadLocal
> > > work by using
> > > > the internal OpenJPA BrokerFactory APIs:
> > > >
> > > > public class PersistenceService {
> > > >     public static EntityManager getEntityManager() {
> > > >         EntityManagerFactory emf = OpenJPAPersistence
> > > >             .createEntityManagerFactory(
> > > >                 "your/EMF/JNDI/location", (Context) null);
> > > >         BrokerFactory bf = OpenJPAPersistence.cast(emf);
> > > >         Broker b = bf.newBroker(
> > > >             bf.getConfiguration().getConnectionUserName(),
> > > >             bf.getConfiguration().getConnectionPassword(),
> > > >             true, // the broker is part of a JTA managed tx
> > > >
> > bf.getConfiguration().getConnectionRetainModeConstant(),
> > > >             true); // look for an existing Broker on the tx
> > > >
> > > >         // do some JPA configuration setup. Logic stolen from
> > > >         // EntityManagerFactoryImpl.
> > > >         broker.setAutoDetach(AutoDetach.DETACH_CLOSE, true);
> > > >         broker.setAutoDetach(AutoDetach.DETACH_ROLLBACK, true);
> > > >         broker.setDetachedNew(false);
> > > >
> > > >         return OpenJPAPersistence.toEntityManager(b);
> > > >     }
> > > > }
> > > >
> > > > Meanwhile, we really should add a couple new OpenJPAPersistence /
> > > > OpenJPAEntityManagerFactory methods to help out with this type of
> > > > bootstrapping.
> > > >
> > > > -Patrick
> > > >
> > > > --
> > > > Patrick Linskey
> > > > BEA Systems, Inc.
> > > >
> > > >
> > > ______________________________________________________________
> > > _________
> > > > Notice:  This email message, together with any attachments,
> > > may contain
> > > > information  of  BEA Systems,  Inc.,  its subsidiaries  and
> > >  affiliated
> > > > entities,  that may be confidential,  proprietary,
> > > copyrighted  and/or
> > > > legally privileged, and is intended solely for the use of
> > > the individual
> > > > or entity named in this message. If you are not the
> > > intended recipient,
> > > > and have received this message in error, please immediately
> > > return this
> > > > by email and then delete it.
> > > >
> > > > > -----Original Message-----
> > > > > From: Hans Prueller [mailto:hans.prueller@gmx.net]
> > > > > Sent: Wednesday, February 21, 2007 1:02 AM
> > > > > To: open-jpa-dev@incubator.apache.org
> > > > > Subject: Howto integrate JPA within EJB2.1 session beans?
> > > > > [architecture]
> > > > >
> > > > > Hi together,
> > > > >
> > > > > I'm sorry for bothering you with numerous basic questions
> > > > > regarding OpenJPA and its usage but I have to migrate
> > > > > existing CMP EJBs to migrate within short time to OpenJPA as
> > > > > we're having stability issues with the current CMP engine.
> > > > >
> > > > > One last question I'd like to ask is regarding the
> > > > > recommended architecture of using OpenJPA within EJB2.1
> > > > > Stateless sessino beans:
> > > > >
> > > > > I need to work with persistence i.e. the EntityManager
> > > > > throughout all the session beans methods so my idea is to:
> > > > >
> > > > > - create a EntityManagerFactory in the ejbCreate() method
> > > of the SLSB
> > > > > - and also create the EntityManager itself in the
> > > > > ejbCreeate() method and store it as a member variable
> > of the SLSB
> > > > > - this would allow easy access within the SB's methods by
> > > > > just using the already initialized entity manager varialbe
> > > > > em.createNamedQuery() .. etc. etc.
> > > > > - clean up should be performed in the ejbRemove() method
> > > of the SLSB
> > > > >
> > > > > I think doing so will allow migratino to openJPA with less
> > > > > work than doing the whole lookup procedure in every method
> > > > > separately.
> > > > >
> > > > > what do you think? are there any pitfalls i've overlooked?
> > > > >
> > > > > thank you for your ideas!
> > > > >
> > > > > regards
> > > > > Hans
> > > > > --
> > > > > "Feel free" - 5 GB Mailbox, 50 FreeSMS/Monat ...
> > > > > Jetzt GMX ProMail testen:
> > www.gmx.net/de/go/mailfooter/promail-out
> > > > >
> > >
> > > --
> > > "Feel free" - 5 GB Mailbox, 50 FreeSMS/Monat ...
> > > Jetzt GMX ProMail testen: www.gmx.net/de/go/mailfooter/promail-out
> > >
> >


Mime
View raw message