On Mar 13, 2009, at 2:52 AM, Kaayan wrote:


Thanks for your reply! Your suggestion works!

I found another solution to this problem - define another RESOURCE_LOCAL unit in persistence.xml. But the drawback is that I need to re- define all @PersistenceContext in my current beans as there are multiple persistence
unit, and I have to call getTransaction().begin() in my @Singleton's.

You shouldn't need to switch to RESOURCE_LOCAL everywhere. You really only need it for the PostConstruct method of the singleton, after that you would be better of with TRANSACTION scoped. For the singletons that need to manipulate data in the PostConstruct, you could have both a @PersistenceContext reference and a @PersistenceUnit reference.

-David






David Blevins wrote:


On Mar 11, 2009, at 7:10 PM, Kaayan wrote:


Hi all, I'm using openejb 3.1 + Tomcat 6.0.18.

My question is can I use @PersistenceContext to inject EntityManager
and
into Singleton beans?

I have configured the persistence-unit with type="TRANSACTION" and
@PersistenceContext worked fine on Stateful and Stateless beans.

But when I use the same way to inject EntityManager into a
Singleton(also
annotated @Startup) and tried to persist() something, openejb logged
TransactionRequiredException and failed to deploy the app.

Am I mistakenly understanding the documents? I've searched over the
openejb
official site but couldn't find any examples about this. Many thanks!

Currently, the @PostConstruct methods are not invoked in a container
transaction -- identically to stateful and stateless.  This is one
change to the Singleton API that was made after we shipped our OpenEJB
3.1 release.  I suspect that is where you're running into issues as
you mention the use of @Startup. All business methods will be invoked
in a transaction by default and there should be no issues using a
TRANSACTION PersistenceContext from a Singleton.

A temporary workaround could be to have a, possibly new, singleton
call another bean (stateless, stateful, or singleton) in its
@PostConstruct method and let that other bean setup the state you need
in it's business method.

-David




--
View this message in context: 
http://www.nabble.com/Cannot-persist%28%29-in-%40Singletons--tp22468590p22493227.html
Sent from the OpenEJB User mailing list archive at Nabble.com.



Reply via email to