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
Đâ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ì.
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 ở đó.
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.
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:
Đây là những gì là cội rễ của thư mục dự án webapp:
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
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 !!
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
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
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