2012-04-12 17 views
11

Tôi đang sử dụng JBoss AS 7.1.1 và có thể cấu hình một nguồn dữ liệu JTA mới và dây nó để EJB của tôi sử dụngKhông thể tiêm chứa RESOURCE_LOCAL quản lý EntityManager sử dụng @PersistenceContext

@PersistenceContext(unitName="TestPU") 
private EntityManager entityManager; 

Khi tôi cố gắng sử dụng RESOURCE_LOCAL PersistenceUnit tôi nhận được lỗi nói rằng tôi không thể tiêm RESOURCE_LOCAL PU bằng cách sử dụng @PersistenceContext.

Tôi đã cấu hình persistence.xml của tôi như sau:

<persistence-unit name="TestPU" transaction-type="RESOURCE_LOCAL"> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 
     <properties> 
    <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/> 
     <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/xy"/> 
     <property name="javax.persistence.jdbc.user" value="root"/> 
     <property name="javax.persistence.jdbc.password" value="blah"/>   
     <property name="hibernate.hbm2ddl.auto" value="update" />  
     </properties> 
</persistence-unit> 

Và trong DAO tôi,

@Stateless 
public class UserDAO { 
    @PersistenceContext(unitName="TestPU") 
    private EntityManager entityManager; 


} 

Khi tôi triển khai ứng dụng của tôi trên AS 7.1.1 Tôi nhận được lỗi sau.

JBAS011428: Cannot inject RESOURCE_LOCAL container managed EntityManagers using @PersistenceContext 
    at org.jboss.as.ee.component.deployers.ModuleJndiBindingProcessor$1.handle(ModuleJndiBindingProcessor.java:169) 
    at org.jboss.as.ee.component.ClassDescriptionTraversal.run(ClassDescriptionTraversal.java:54) 
    at org.jboss.as.ee.component.deployers.ModuleJndiBindingProcessor.processClassConfigurations(ModuleJndiBindingProcessor.java:162) 
    at org.jboss.as.ee.component.deployers.ModuleJndiBindingProcessor.deploy(ModuleJndiBindingProcessor.java:155) 
    at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:113) [jboss-as-server-7.1.1.Final.jar:7.1.1.Final] 
    ... 5 more 

Bất kỳ giải pháp nào để sử dụng RESOURCE_LOCAL PU với @PersistenceContext?

Trả lời

19

JTA: Trong môi trường Java EE, giao dịch được quản lý bởi vùng chứa & theo mặc định giao dịch JTA của nó. Bạn có thể nhận được quản lý thực thể bằng tra cứu hoặc tiêm.

RESOURCE_LOCAL: Trong Java SE, ứng dụng phải quản lý giao dịch rõ ràng & các giao dịch tài nguyên cục bộ là giao dịch gốc. Bạn phải tạo EntityManagerFactory & sau đó có thể tạo trình quản lý đối tượng từ đó.

Khi bạn đang triển khai nó trong máy chủ ứng dụng, hãy thay đổi transaction-type thành JTA trong persistence.xml.

+0

Cảm ơn bạn đã giải thích. Vì vậy, không có cách nào để cấu hình nguồn dữ liệu JTA như một phần của WAR/EAR? Chúng tôi có thể làm điều đó với chú thích nhưng tôi đang tìm kiếm cấu hình dựa trên xml. –

+0

@ sivaprasadreddy.k Bạn được chào đón. Nếu bạn đã cấu hình nguồn dữ liệu, thì bạn có thể đề cập đến nó trong persistence.xml với ''. –

+0

@NayanWadekar bạn có thể chia sẻ cho chúng tôi một ví dụ với RESOURCE_LOCAL (persistence.xml) và EntityManagerFactory (mã java) không. – Sabarish

Các vấn đề liên quan