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.

Reply via email to