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.
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.
