Re: JPA in practice
Tom Anderson wrote:
Is there a convenient way to write code that gets an injected
EntityManager in a managed environment, but arranges its own provision
in an unmanaged one? Is that a meaningful thing to ask for?
I have a way, but I won't know if it works until I succeed at getting an
injected one. Then I can compare the two scenarios.
For the factory:
public class Persistuff
{
public static final String PUNIT = "projectPU";
@PersistenceUnit( unitName=PUNIT )
private static EntityManagerFactory emf;
private static final EntityManagerFactory EMFCANON =
Persistence.createEntityManagerFactory( PUNIT );
public static EntityManagerFactory getEmf()
{
return (emf == null? EMFCANON : emf);
}
}
For the manager:
<http://java.sun.com/javaee/5/docs/tutorial/doc/bnbrm.html#bnbrp>
public class Bizzniss
{
@PersistenceContext
private EntityManager em;
public void run()
{
EntityManager mgr = (em != null? em
: Persistuff.getEmf().getEntityManager());
// use 'mgr' here
}
}
Unknown: resource consumption and packratting caused by injected values, if any.
Learning how to do this, I was running Glassfish 3 with a Postgres back end,
but my 4 GB RAM server box's power supply just gave up the ghost. Turns out
the combination of GF and PG with NetBeans was too much for my poor
single-core 64-bit workstation with only 1 GB RAM. Then I tried the
non-injective approach with Tomcat, Postgres and NetBeans. Turns out that
runs just great on the workstation.
That triggered a major "Hmmm." I may be on to a way to develop, deliver and
deploy full-blown custom apps very quickly with very low administrative and
hardware overhead.
Looks like JSF, JSP, JPA and servlets on Tomcat are a winning combination.
Once you factor in a few quirks.
(Bonus - Tomcat plays well with other environments like Apache Web Server and
many Java EE application servers.)
--
Lew