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:[EMAIL PROTECTED] > 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 >