openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Hans Prueller" <hans.pruel...@gmx.net>
Subject Re: RE: RE: Howto integrate JPA within EJB2.1 session beans? [architecture]
Date Fri, 23 Feb 2007 08:35:12 GMT
>> 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 

fine. 

I think from now on I can start to migrate my 60 CMP EB's ... I'll keep you updated ;-)

Hans

-------- Original-Nachricht --------
Datum: Thu, 22 Feb 2007 14:22:25 -0800
Von: "Patrick Linskey" <plinskey@bea.com>
An: open-jpa-dev@incubator.apache.org
CC: 
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
> > > 
> > 

-- 
"Feel free" - 10 GB Mailbox, 100 FreeSMS/Monat ...
Jetzt GMX TopMail testen: www.gmx.net/de/go/mailfooter/topmail-out

Mime
View raw message