I’m using Spring in Glassfish and I have the need to configure it so it also works outside of the container, mainly for development purposes.
What I’m uncertain of, and couldn’t find the answer to, was whether I can use the LocalContainerEntityManagerFactoryBean class without a container.
From its name, LocalContainer, it seems I can but in the docs it says:
FactoryBean that creates a JPA
EntityManagerFactory according to
JPA’s standard container bootstrap
contract
so I’m uncertain about this issue.
Thanks,
Ittai
I just wanted to note that Spring supports running the JPA stuff outside of a container, and doesn’t require anything in the way of a transaction manager. The question to ask is whether you are using Spring’s declarative transaction management (e.g., “@Transactional”).
If you are, then you need to provide an implementation of “PlatformTransactionManager.” Here still, you do NOT need to use full on JTA support (as provided by Atomikos in the above example. YOu can simply use a JpaTransactionManager instance (which expects a reference to the entity manager factory) provided you are not doing anything with “XA” etc. If you are doing XA, then Atomikos, or Bitronix or any of a number of other options are just fine. You might look at this example http://blog.springsource.com/2011/08/15/configuring-spring-and-jta-without-full-java-ee/ which demonstrates how to use JTA (with JPA and JMS, for example).
So, reiterating, if you’re just doing simple JPA (connecting to one database) then you don’t need JTA, and you definitely don’t need GlassFish. If you need XA, then you can still use a third party JTA provider as the responder above suggested, and you still don’t need Glassfish.
Finally, if you truly wish to maintain both GlassFish + JTA, and a separate JPA that works only locally for rapid development on a faster container, you might consider the imminent Spring 3.1, which features “profiles” to allow you to conditionally define beans per environment (e.g., “production,” or “dev,” or “cloud,” or whatever you’d like.)