2013-06-13 69 views
12

Tôi bị bối rối khi nói đến vị trí của tệp persistence.xml của tôi. Tôi đang sử dụng eclipselink 2.4 như triển khai JPA 2.0 của tôi và có persistence.xml của tôi nằm dưới src/main/resources/META-INF/persistence.xml như nhiều trạng thái bài viết.JPA persistence.xml META-INF không hoạt động chính xác

Vấn đề đầu tiên: Sau khi xuất bản lên máy chủ của tôi bên trong nhật thực, tôi nhận được thông báo lỗi không tìm thấy persistence.xml của tôi.

Exception: : java.lang.IllegalArgumentException: No persistence unit named 'X' 
is available in scope Webapp. Available persistence units: [] at 

enter image description here

Đây là mã cho persistence.xml tôi

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence 
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> 
<persistence-unit name="X" transaction-type="JTA"> 
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
<jta-data-source>localJTA</jta-data-source> 
<exclude-unlisted-classes>false</exclude-unlisted-classes> 
<properties> 
    <property name="eclipselink.target-server" value="WebLogic"/> 
    <property name="eclipselink.logging.level" value="FINEST"/>   
</properties> 
</persistence-unit> 
</persistence> 

Nếu tôi di chuyển META-INF để webapp/WEB-INF/classes/META-INF sau đó nó hoạt động ! Tôi không thể hiểu vấn đề là gì.

enter image description here

Tôi đã kiểm tra các dự án xây dựng đường dẫn và tất cả mọi thứ có vẻ tốt ở đó.

enter image description here

Vấn đề thứ hai Tôi gặp là lớp thực thể chú thích của tôi không được nhặt tự động bởi EclipseLink. Trong cấu hình JPA của tôi, tôi đã tự động chọn các lớp được chú thích.

enter image description here

Tôi cũng có những điều sau đây trong xml tôi

<exclude-unlisted-classes>false</exclude-unlisted-classes> 

Công nghệ sử dụng: máy chủ WebLogic 12c, EJB 3.1, JPA 2.0, M2E-WTP, và JSF 2.1

Cập nhật 1: Rời META-INF trên đường dẫn src/main/resources/META-INF/persistence.xml và thực hiện cài đặt maven để xây dựng tệp war, thư mục META-INF được đặt chính xác trong WEB-INF/classes/META- INF/kiên trì. xml như nó phải là (bên trong chiến tranh). Dường như nó chỉ là và vấn đề khi webapp được xây dựng và chạy cục bộ trong Eclipse. Bất cứ ai có thể giải thích điều này?

Cập nhật 2: Rời META-INF trong src/nguồn/main tức src/main/nguồn/META-INF/persistence.xml và sau đây trong persistence.xml của tôi chứ không phải là rõ ràng danh sách các lớp thực thể

<exclude-unlisted-classes>false</exclude-unlisted-classes> 

hoạt động NẾU tôi xây dựng chiến tranh và triển khai nó thông qua bảng điều khiển weblog thông qua trình khám phá internet. Tại sao nó không hoạt động bên trong nhật thực !?

Cập nhật 3:
bạn đã kiểm tra những gì được xây dựng -Vâng, bên trong Eclipse Tôi đã xây dựng các thiết lập để tự động. Tìm trong thư mục dự án tôi thấy java package com, thư mục META-INF chứa persistence.xml và thư mục tài nguyên nằm trong lớp Webapp/target/classes.
Nếu chiến tranh giống nhau -Bạn có đề cập đến Webapp hay không.thư mục chiến tranh được tìm thấy trong C: \ workspace.metadata.plugins \ org.eclipse.wst.server.core \ tmp0 \ Weblogic12cDomain_auto_generated_ear_ \ Webapp.war? Nếu vậy, điều duy nhất trong đó là WEB-INF \ lib \ jsf-impl-2.1.7.jar
thì bạn đã kiểm tra đường dẫn lớp được sử dụng để kiểm tra ứng dụng của bạn trong Eclipse - Mục này được tìm thấy trong đường dẫn lớp của tôi như mong đợi trong Webapp/.classpath
nếu persistence.xml trong thư mục tài nguyên nằm trên đường dẫn lớp đầu tiên, nó sẽ được chọn thay vì thư mục trong chiến dịch của bạn hoặc thư mục trong thư mục chính xác - Sự hiểu biết của tôi là Eclipse sẽ xây dựng dự án, sau đó sao chép nội dung vào máy chủ mà không tạo tệp chiến tranh.

Đây là những gì là cội rễ của maven tạo Webapp.war:

enter image description here

Đây là những gì là cội rễ của thư mục dự án webapp:

enter image description here

Dưới đây là những gì có trong thư mục gốc của Webapp.war FOLDER trong C: \ workspace.metadata.plugins \ org.eclipse.wst.server.core \ tmp0 \ Weblogic12cDomain_auto_generated_ear_ \ Webapp.war

enter image description here

nếu persistence.xml trong thư mục nguồn là trên classpath đầu tiên, nó sẽ được chọn thay vì một trong chiến tranh hoặc một trong các thư mục chính xác. - Không chắc chắn ý bạn là gì. Tệp persistence.xml trong tài nguyên của tôi/META-INF là tài nguyên tôi muốn chọn. Bạn không chắc chắn một tệp chiến tranh phải làm gì với nó? Dù bằng cách nào họ cũng nên persistence.xml cùng tôi nghĩ.

Bất kỳ trợ giúp nào đều được đánh giá cao !!

Trả lời

5

Mục 8.2.1 của trạng thái thông số JPA "Tệp persistence.xml nằm trong thư mục META-INF của thư mục gốc của đơn vị liên tục." và sau đó "Các lớp persistence được quản lý có thể được chứa trong thư mục gốc của persistence unit, hoặc có thể được xác định bằng tham chiếu - tức là, bằng cách đặt tên các lớp, lưu trữ lớp hoặc các tệp ánh xạ XML (trong các lớp tham chiếu lần lượt) có thể truy cập trên đường dẫn lớp ứng dụng "

Vì vậy, thư mục gốc của đơn vị bền vững là nơi thư mục thư mục META-INF. Bằng cách đặt các lớp trong một thư mục lớp, chúng không nằm trong thư mục gốc của đơn vị bền vững, và do đó phải được đặt tên rõ ràng để được đưa vào.

+0

Thx Chris! điều này có ý nghĩa, tuy nhiên nó không hoạt động bên trong nhật thực! =/Vui lòng xem nội dung cập nhật của tôi. – Padawan

+0

Chris bạn có thể vui lòng thay đổi câu trả lời của bạn thành một bình luận để những người khác không nghĩ rằng câu hỏi đã được trả lời? – Padawan

+0

Nếu nó không phải là một trong những bạn tìm kiếm và bạn muốn tiếp xúc nhiều hơn, đặt một tiền thưởng vào nó, hoặc làm những gì bạn đã làm - yêu cầu một lần nữa với thông tin nhiều hơn hoặc khác nhau. Bạn đề cập rằng điều này chỉ xảy ra "khi xây dựng trong Eclipse" - bạn đã kiểm tra những gì được xây dựng? Nếu chiến tranh là như nhau, thì bạn đã kiểm tra đường dẫn lớp được sử dụng để kiểm tra ứng dụng của bạn trong Eclipse chưa? nếu persistence.xml trong thư mục tài nguyên là trên classpath đầu tiên, nó sẽ được chọn thay vì một trong chiến tranh của bạn hoặc một trong thư mục chính xác. – Chris

2

Bạn không bao giờ đề cập đến maven vì vậy tôi không biết nếu đó là trên đĩa của bạn; nó đã không làm việc cho tôi với maven cho đến khi tôi thêm vào sự phụ thuộc vào thực thể. Pom.xml của tôi chỉ có lõi ngủ đông. Sau khi tôi thêm hibernate-entitymanager sau đó nó bắt đầu làm việc (cho thử nghiệm của tôi).

<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-core</artifactId> 
    <version>4.3.1.Final</version> 
</dependency> 

<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-entitymanager</artifactId> 
    <version>4.3.1.Final</version> 
</dependency> 
0

Kiểm tra xem persistence.xml có nằm trong cuộc chiến của bạn không. Hoặc nó không phải là hoặc nó là nhưng ở một vị trí sai. Bạn cũng có thể đặt tệp này bên trong thư mục java/main/resources để nó sẽ được đặt trong đường dẫn lớp của bạn

4

Tôi tin rằng bạn có ít nhất 2 vấn đề ở đây.

1) Maven xây dựng

dự án của bạn có maven cấu trúc không Eclipse cấu trúc dự án web, vì vậy nó phải được xây dựng sử dụng các lệnh maven, không Eclipse xây dựng theo mặc định. (Tôi không phải chuyên gia maven, vì vậy hãy maven chuyên gia nhảy vào và bình luận, nếu không đúng). Vì vậy, khi bạn đang xây dựng tự động trong Eclipse, nó không biết rằng nên sao chép src/main/resources/META-INF/persistence.xml của bạn vào WEB-INF/classes/META-INF/persistence.xml và chỉ biên dịch java các lớp học.

2) Triển khai

Nếu bạn làm theo các cấu trúc dự án Eclipse, sau đó Eclipse biết làm thế nào để đóng gói và thêm dự án của bạn đến máy chủ, khi bạn chọn 'Add to máy chủ'. Nếu bạn đang sử dụng maven, sau đó chiến tranh được xây dựng của bạn thường nằm trong thư mục đích. Vì vậy, một lần nữa bạn sẽ cần phải xuất khẩu chiến tranh này và cài đặt nó bằng cách sử dụng các công cụ WebLogic, hoặc cài đặt nó thông qua nhiệm vụ maven.

Kiểm tra WebLogic Server with Maven and Eclipse cách Oracle đề xuất sử dụng Eclipse với WebLogic và Maven

+0

Tôi có Tomcat7 (OpenJPA2.x) và IBM là 8.5.5 (OpenJPA 2.x), webapp là dự án jpa (resource_local) jta. Tomcat đã ổn nhưng WS thất bại với cùng một gói chiến tranh. Việc đặt xml vào "mywebapp/WEB-INF/classes/META-INF/persistence.xml" đã thực hiện thủ thuật, bây giờ cả hai đều hoạt động tốt. – Whome