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 AW: EMF JNDI lookup is starting openJPA every time - was: Howto integrate JPA within EJB2.1 session beans?
Date Wed, 28 Feb 2007 06:29:56 GMT
please see below. The method PersistenceService.getEntityManager() is
invoked directly in SLSB's methods if access to the EM is needed, so there
could be multiple invocations within a single transaction spanning multiple
SLSB methods.

hth,
Hans

public class PersistenceService {
	private static final Logger logger =
Logger.getLogger(PersistenceService.class.getName());
	
	public static final String EMF_JNDI_LOCATION =
"your/EMF/JNDI/location";

	public static EntityManager getEntityManager() {
		
		logger.log(Level.FINEST, "creating a fresh, clean
EntityManager from JNDI EMF.");
		
		EntityManagerFactory emf = OpenJPAPersistence
	
.createEntityManagerFactory(EMF_JNDI_LOCATION, (Context) null);

		final BrokerFactory bf =
OpenJPAPersistence.toBrokerFactory(emf);

		final Broker b = bf.newBroker(bf.getConfiguration()
				.getConnectionUserName(),
bf.getConfiguration()
				.getConnectionPassword(), true,
bf.getConfiguration().getConnectionRetainModeConstant(), true); 
		// do some JPA configuration setup. Logic stolen from 
		// EntityManagerFactoryImpl.
		b.setAutoDetach(AutoDetach.DETACH_CLOSE, true);
		b.setAutoDetach(AutoDetach.DETACH_ROLLBACK, true);
		b.setDetachedNew(false);

		return OpenJPAPersistence.toEntityManager(b);

			}
}



> -----Ursprüngliche Nachricht-----
> Von: Patrick Linskey [mailto:plinskey@bea.com]
> Gesendet: Mittwoch, 28. Februar 2007 06:56
> An: open-jpa-dev@incubator.apache.org
> Betreff: RE: EMF JNDI lookup is starting openJPA every time - was: Howto
> integrate JPA within EJB2.1 session beans?
> 
> If you could send the source for PersistenceService, and details about how
> you invoke it if the method takes any arguments, that would be very
> useful.
> 
> -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 J. Prueller [mailto:hans.prueller@gmx.net]
> > Sent: Tuesday, February 27, 2007 9:44 PM
> > To: open-jpa-dev@incubator.apache.org
> > Subject: AW: EMF JNDI lookup is starting openJPA every time -
> > was: Howto integrate JPA within EJB2.1 session beans?
> >
> > >> -The name used for the lookup is defined to return an
> > instance of the
> > >> object that might be shared. The name java:comp/ORB is such a name.
> >
> > does this mean that the name/key with which the EMF is bound into JNDI
> > affects the sharing/non-sharing of the bound instance?
> >
> > currently the JNDI-string our test-implementation definitely does not
> > comply to any conventions (it's not like "java:comp/.." it's
> > rather some
> > tests string like "here/comes/thejndi/name") - could that be
> > the problem in
> > our case?
> >
> > I'm not sure if I followed the whole discussion completely
> > ... It seems
> > that you might have found another reason for the behaviour?
> > Is this clear
> > already or is it still required to send more detailed stuff
> > from our side?
> >
> > regards,
> > hans
> >
> > > -----Ursprüngliche Nachricht-----
> > > Von: Pinaki Poddar [mailto:ppoddar@bea.com]
> > > Gesendet: Dienstag, 27. Februar 2007 18:48
> > > An: open-jpa-dev@incubator.apache.org
> > > Betreff: RE: EMF JNDI lookup is starting openJPA every time
> > - was: Howto
> > > integrate JPA within EJB2.1 session beans?
> > >
> > >  > But maybe something funky is happening with JNDI serializing the
> > > factory and then deserializing it or something.
> > >
> > > >From  J2EE 1.4 spec, page 59 (J2EE.5.2 Java Naming and Directory
> > > Interface:
> > >
> > > In general, lookups of objects in the JNDI java: namespace
> > are required to
> > > return a new instance of the requested object every time.
> > Exceptions are
> > > allowed for the following:
> > > - The container knows the object is immutable (for example,
> > objects of
> > > type java.lang.String), or knows that the application can't
> > change the
> > > state of
> > > the object.
> > > -The object is defined to be a singleton, such that only
> > one instance of
> > > the object may exist in the JVM.
> > > -The name used for the lookup is defined to return an
> > instance of the
> > > object that might be shared. The name java:comp/ORB is such a name.
> > >
> > > In these cases, a shared instance of the object may be
> > returned. In all
> > > other cases, a new instance of the requested object must be
> > returned on
> > > each
> > > lookup.
> > >
> > >
> > > Pinaki Poddar
> > > BEA Systems
> > > 415.402.7317
> > >
> > >
> > > -----Original Message-----
> > > From: Patrick Linskey [mailto:plinskey@bea.com]
> > > Sent: Monday, February 26, 2007 11:11 PM
> > > To: open-jpa-dev@incubator.apache.org
> > > Subject: RE: EMF JNDI lookup is starting openJPA every time
> > - was: Howto
> > > integrate JPA within EJB2.1 session beans?
> > >
> > > It should be going through the following code:
> > >
> > >     public static OpenJPAEntityManagerFactory
> > createEntityManagerFactory
> > >         (String jndiLocation, Context context) {
> > >         if (jndiLocation == null)
> > >             throw new NullPointerException("jndiLocation == null");
> > >
> > >         try {
> > >             if (context == null)
> > >                 context = new InitialContext();
> > >
> > >             Object o = context.lookup(jndiLocation);
> > >             return (OpenJPAEntityManagerFactory)
> > > PortableRemoteObject.narrow(o,
> > >                 OpenJPAEntityManagerFactory.class);
> > >         } catch (NamingException ne) {
> > >             throw new ArgumentException(_loc.get("naming-exception",
> > >                 jndiLocation), new Throwable[]{ ne }, null, true);
> > >         }
> > >     }
> > >
> > > I don't see anything in there that would be causing a
> > creation to happen.
> > > But maybe something funky is happening with JNDI
> > serializing the factory
> > > and then deserializing it or something.
> > >
> > > Do you have any means of getting a stack from where the creation is
> > > happening? It'd be great to get a bit more context about
> > what's going on.
> > >
> > > -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 J. Prueller [mailto:hans.prueller@gmx.net]
> > > > Sent: Saturday, February 24, 2007 10:36 PM
> > > > To: open-jpa-dev@incubator.apache.org
> > > > Subject: EMF JNDI lookup is starting openJPA every time -
> > > > was: Howto integrate JPA within EJB2.1 session beans?
> > > >
> > > > Hi together, Patrick,
> > > >
> > > > the code you suggested for doing a helper method that
> > deals with the
> > > > EMF JNDI lookup and the EM creating within our J2EE1.4
> > app basically
> > > > works fine, but as you perhaps may remember I asked why
> > the method is
> > > > called "create":
> > > >
> > > > EntityManagerFactory myemf =
> > > > OpenJPAPersistence.createEntityManagerFactory(strJNDILocation,
> > > > (Context)null);
> > > >
> > > > It seems that the method above really creates a NEW EMF on every
> > > > invocation!
> > > > I checked the logs of my application and I see the
> > following messages
> > > > on every invocation of my PersistenceService.getEntityManger()
> > > > method (which
> > > > does the above lookup and some more ..)
> > > >
> > > > 2007-02-25 07:27:05,687 : PersistenceService.getEntityManager
> > > > : creating a
> > > > fresh
> > > > , clean EntityManager from JNDI EMF.
> > > > 15  lbsims  INFO   [RMI TCP Connection(35)-192.168.0.5]
> > > > openjpa.Runtime -
> > > > Starti
> > > > ng OpenJPA 0.9.7-incubating-SNAPSHOT
> > > > 15  lbsims  INFO   [RMI TCP Connection(35)-192.168.0.5]
> > > > openjpa.jdbc.JDBC -
> > > > Open
> > > > JPA will now connect to the database to attempt to
> > determine what type
> > > > of databa se dictionary to use.  To prevent this connection in the
> > > > future, set your openjp a.jdbc.DBDictionary configuration
> > property to
> > > > the appropriate value for your dat abase (see the
> > documentation for
> > > > available values).
> > > > 15  lbsims  INFO   [RMI TCP Connection(35)-192.168.0.5]
> > > > openjpa.jdbc.JDBC -
> > > > Usin
> > > > g dictionary class
> > > > "org.apache.openjpa.jdbc.sql.MySQLDictionary" (MySQL 5.0.27-c
> > > > ommunity-nt ,MySQL-AB JDBC Driver
> > mysql-connector-java-5.0.4 ( $Date:
> > > > 2006-10-19
> > > >  17:47:48 +0200 (Thu, 19 Oct 2006) $, $Revision: 5908 $ )).
> > > > 15  lbsims  INFO   [RMI TCP Connection(35)-192.168.0.5]
> > > > openjpa.MetaData -
> > > > Found
> > > >  1 classes with metadata in 0 milliseconds.
> > > >
> > > >
> > > > It seems that OpenJPA is now bootstrapping everytime I
> > access it. I am
> > > > binding the EMF somewhen at bootstrapping time with
> > > >
> > > > final EntityManagerFactory emFactory = Persistence
> > > >
.createEntityManagerFactory("lbsims");
> > > >
> > > > Context ictx = new InitialContext();
> > > > ictx.bind(PersistenceService.EMF_JNDI_LOCATION, emFactory);
> > > >
> > > > The lookup uses the same constants, so the EMF in JNDI should be
> > > > found?
> > > >
> > > > EntityManagerFactory emf = OpenJPAPersistence
> > > >
> > > > .createEntityManagerFactory(EMF_JNDI_LOCATION, (Context) null);
> > > >
> > > > Any Idea what could be wrong here?
> > > >
> > > > regards,
> > > > HANS
> > > >
> > > >
> > > > > -----Ursprüngliche Nachricht-----
> > > > > Von: Patrick Linskey [mailto:plinskey@bea.com]
> > > > > Gesendet: Freitag, 23. Februar 2007 18:46
> > > > > An: open-jpa-dev@incubator.apache.org
> > > > > Betreff: RE: TYPO? Howto integrate JPA within EJB2.1
> > session beans?
> > > > > [architecture]
> > > > >
> > > > > Typo indeed. It should be
> > > > OpenJPAPersistence.toBrokerFactory(emf). Sorry
> > > > > about that.
> > > > >
> > > > > -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 J. Prueller [mailto:hans.prueller@gmx.net]
> > > > > > Sent: Friday, February 23, 2007 9:43 AM
> > > > > > To: open-jpa-dev@incubator.apache.org
> > > > > > Subject: RE: TYPO? Howto integrate JPA within EJB2.1 session
> > > > > > beans? [architecture]
> > > > > >
> > > > > > 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