2015-10-19 16 views
8

Tôi đang sử dụng Wildfly 8.1 cùng với một dự án EJB (EJB 3.2) chứa các thực thể. Khi cố gắng để tiêm Entity Manager vào một trong Đậu của tôi nhận được như sau:Tại sao đơn vị lưu giữ có tên là null khi persistence.xml tồn tại

JBAS011440: Can't find a persistence unit named null in deployment \"EntitiesProject.jar\""}, 
"JBAS014771: Services with missing/unavailable dependencies" => [ 
    "jboss.deployment.unit.\"EntitiesProject.jar\".weld.weldClassIntrospector is missing [jboss.deployment.unit.\"EntitiesProject.jar\".beanmanager]", 
    "jboss.naming.context.java.comp.EntitiesProject.EntitiesProject.MitarbeiterDAO.HandleDelegate is missing [jboss.naming.context.java.comp.EntitiesProject.EntitiesProject.MitarbeiterDAO]", 
    "jboss.naming.context.java.comp.EntitiesProject.EntitiesProject.MitarbeiterDAO.InstanceName is missing [jboss.naming.context.java.comp.EntitiesProject.EntitiesProject.MitarbeiterDAO]", 
    "jboss.naming.context.java.comp.EntitiesProject.EntitiesProject.MitarbeiterDAO.InAppClientContainer is missing [jboss.naming.context.java.comp.EntitiesProject.EntitiesProject.MitarbeiterDAO]", 
    "jboss.naming.context.java.comp.EntitiesProject.EntitiesProject.MitarbeiterDAO.Validator is missing [jboss.naming.context.java.comp.EntitiesProject.EntitiesProject.MitarbeiterDAO]", 
    "jboss.naming.context.java.comp.EntitiesProject.EntitiesProject.MitarbeiterDAO.ORB is missing [jboss.naming.context.java.comp.EntitiesProject.EntitiesProject.MitarbeiterDAO]", 
    "jboss.naming.context.java.comp.EntitiesProject.EntitiesProject.MitarbeiterDAO.ValidatorFactory is missing [jboss.naming.context.java.comp.EntitiesProject.EntitiesProject.MitarbeiterDAO]" 
] 

Đây là SessionBean của tôi, nơi tôi cố gắng để tiêm EntityManager:

@Stateless 
public class MitarbeiterDAO implements MitarbeiterDAORemote { 

    @PersistenceContext 
    private EntityManager em; 

    public int writeMitarbeiterToDB(Mitarbeiter m) 
    { 
     em.persist(m); 
     return m.getId(); 
    } 
} 

tôi đã xác định các persistence.xml tập tin sau đây mà tôi đặt vào "project-name"/ejbModule/META-INF.

<persistence-unit name="mitarbeiter"> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
     <jta-data-source>java:jboss/datasources/MySqlDS</jta-data-source> 
    <properties> 
     <property-name="hibernate.hbm2ddl.auto" value="create-drop"/> 
    </properties> 
</persistence-unit> 

và câu hỏi tương tự giải pháp của họ

Cập nhật (xem ý kiến):
- Tôi đã cố gắng sử dụng @EntityManager(unitName="mitarbeiter") thay chỉ @EntityManager - Session Bean trình bày ở trên là nơi duy nhất tôi cố gắng tiêm EntityManager

Cập nhật 2 (xem ý kiến ​​của các câu trả lời):

  • persistence.xml là trong thư mục Project/ejbModule/META-INF/
  • Thư mục này được bao gồm trong con đường xây dựng
  • Bằng cách nào đó nó không nhận được triển khai trong khi các file khác trong cùng thư mục là (đến jar/META-INF/). Nếu tôi sao chép & dán theo cách thủ công, nó hoạt động. Tại sao vậy?

Bất kỳ trợ giúp và gợi ý nào được đánh giá cao.

+0

Các bạn đã thử xác định 'bất động sản bắt buộc unitName' trên '@ PersistenceContext' chú thích của mình? –

+0

vâng tôi đã thử sử dụng '@PersistenceContext (unitName =" mitarbeiter ")' thay vì chỉ '@ PersistenceContext'. – Jbartmann

+0

OK, chỉ cần kiểm tra. Nó không phải là cần thiết trừ khi có nhiều hơn một đơn vị kiên trì. –

Trả lời

6

Một vài các vấn đề thể:

  • không đúng vị trí của file persistence.xml. Vui lòng đặt nó trong thư mục META-INF/ ở gốc thư mục lưu trữ. Nếu bạn sử dụng maven nó sẽ là src/main/resources/META-INF/persistence.xml.
  • không hợp lệ persistence.xml file: bạn có persistence-unit thẻ đóng cửa vào dòng <persistence-unit name="mitarbeiter"/> (xin lưu ý / ở cuối)
  • <property-name="hibernate.hbm2ddl.auto" value="create-drop"/> không hợp lệ. Tôi cho rằng bạn muốn: <property name="hibernate.hbm2ddl.auto" value="create-drop" />
  • nhà cung cấp mà bạn đang sử dụng không còn được dùng nữa.

Nhìn chung, persistence.xml nội dung chính xác cho JPA 2.1 trong trường hợp của bạn sẽ giống như thế:

<?xml version="1.0" encoding="UTF-8"?> 
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd" 
    version="2.1"> 

    <persistence-unit name="mitarbeiter"> 
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> 
    <jta-data-source>java:jboss/datasources/MySqlDS</jta-data-source> 

    <properties> 
     <property name="hibernate.hbm2ddl.auto" value="create-drop" /> 
    </properties> 
    </persistence-unit> 
</persistence> 
+0

Cảm ơn bạn điều này đã giúp tôi rất nhiều! Tôi chỉ không nhìn thấy những thứ như thế này nữa sau khi tìm kiếm một giải pháp cho hàng giờ! Nó đã cho tôi gần gũi hơn với một giải pháp: 'persistence.xml' là trong thư mục bên phải như xa như tôi biết:' Projektname/ejbModule/META-INF' nhưng nó không nhận được geployed trong khi bất cứ điều gì khác trong thư mục này là. Nếu tôi sao chép và dán nó theo cách thủ công thì nó sẽ hoạt động. Điều đó có thể là gì? – Jbartmann

+0

@Jbartmann có lẽ thư mục không được thêm làm vị trí nguồn trong đường dẫn lớp xây dựng của bạn – Atul

+0

Điều tôi đang làm là: Dự án Rightclick -> Đường dẫn xây dựng -> Cấu hình đường dẫn xây dựng -> Đường dẫn xây dựng Java -> Nguồn. Có một mục 'Project/ejbModule' với' Bao gồm: Tất cả'. Tôi đã thay đổi nó thành 'Included: {select all Folders, bao gồm META-INF}'. Vẫn không triển khai persistence.xml của tôi. Đó là những gì bạn đang nói đến? Tôi vẫn có thể làm cho nó chạy chỉ bằng cách sao chép và dán thủ công. Ngay sau khi tôi làm rightclick trên máy chủ -> làm sạch nó sẽ bị xóa. – Jbartmann

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