2011-11-10 27 views
6

Chúng ta phải đổi tên persistence.xml để đánh lừa WebSphere 7 không sử dụng OpenJPA tích hợp của nó.cấu hình Hibernate để sử dụng một persistence.xml được đổi tên

Nó là khá dễ dàng để làm khi bạn sử dụng Spring, bạn chỉ cần hướng dẫn nhà máy quản lý tổ chức của mình để sử dụng vị trí khác cho persistence.xml:

<property name="persistenceXmlLocation" value="META-INF/persistence-xxx.xml"/> 

Nhưng bây giờ chúng tôi muốn sử dụng đồng bằng Hibernate/JPA không mùa xuân và không thể tìm thấy bất kỳ cách nào để chỉ định vị trí persistence.xml thay thế.

Thông số JPA2 không nói bất cứ điều gì về nó ...

Bất kỳ manh mối nào? Có thể hướng dẫn Hibernate sử dụng persistence.xml được đổi tên không?

======

Dường như đó là không thể thực hiện Hibernate đọc một đổi tên persistence.xml tập tin. Và không cần thiết trong trường hợp của tôi.

Trả lời

3

Theo như tôi biết, không thể thay đổi vị trí của tệp persistence.xml. Ngoài ra hãy xem tài liệu này: Alternate JPA Providers in WebSphere Application Server, có vẻ như bạn sẽ có thể sử dụng Hibernate như nhà cung cấp JPA bằng cách chỉ định nó trong tệp persistence.xml và nhúng các lọ cần thiết trong ứng dụng của bạn.

Hãy chắc chắn rằng persistence.xml của bạn được xác định là nhà cung cấp Hibernate JPA:

<persistence> 
    <persistence-unit name="myapp"> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 

Bạn cũng sẽ có thể đạt được điều này bằng cách tạo ra một thư viện chia sẻ và sử dụng nó để cấu hình WebSphere sử dụng một nhà cung cấp kiên trì thay thế. Ở đây bạn có thể tìm thấy làm thế nào để làm điều đó: Configuring the Java Persistence API (JPA) default persistence provider

EDIT Với các thông tin trong các ý kiến ​​trong câu trả lời này, có vẻ như vấn đề có thể được giải quyết bằng cách thêm các thuộc tính trong persistence.xml, như đã nêu trong bài viết này Websphere EntityManagerFactory creation problem:

<property name="hibernate.transaction.manager_lookup_class" 
value="org.hibernate.transaction.WebSphereExtendedJTATransactionLookup" /> 

<property name="hibernate.transaction.factory_class" 
value="org.hibernate.transaction.CMTTransactionFactory" /> 

Thông tin này cũng được cung cấp trong các nhà cung cấp thay thế JPA trong tài liệu Máy chủ ứng dụng WebSphere.

+0

Cảm ơn! Điều đó sẽ liên quan đến các thủ tục cài đặt bổ sung mỗi lần chúng tôi cài đặt ứng dụng, viết hướng dẫn vv Nhưng nếu chúng tôi không tìm thấy một số cách khác và đây là tùy chọn duy nhất - chúng tôi sẽ phải làm điều đó ... –

+0

Ngoài ra, hãy xem tài liệu này: [Nhà cung cấp JPA thay thế trong Máy chủ ứng dụng WebSphere] (http: ///www.ibm.com/developerworks/mydeveloperworks/wikis/form/anonymous/api/library/53181ccd-bcd4-431f-b968-0b5f6d46d652/ tài liệu/192a432b-28bb-4080-b037-345e5d83da76/tệp đính kèm/61e74f67-1d60-4120-ba25-ad7264c9f4f6/phương tiện/AlternateJPAProviders_TestReport.pdf). Có vẻ như bạn sẽ có thể sử dụng chế độ ngủ đông bằng cách chỉ rõ 'provider' trong persistence.xml và bằng cách nhúng các lọ cần thiết trong ứng dụng của bạn.Xem chỉnh sửa của tôi trên câu trả lời. –

+0

Xavi, chúng tôi đã chỉ định nhà cung cấp ... nhưng nó chỉ dẫn đến 'Máy chủ không thể tạo một nhà máy EntityManagerFactory cho đơn vị liên tục xxx từ nhà cung cấp org.hibernate.ejb.HibernatePersistence trong jar: tệp:/C:/IBM/WebSphere /wp_profile/installedApps/XXX/xxx-ear.ear/xxx-ejb.jar!/ module.' Nó có thể là một vấn đề riêng biệt của khóa học ... –

0

persistence.xml phải tồn tại trong thư mục META-INF, thường được đóng gói cùng với tệp jar chứa các lớp thực thể của bạn. Những gì tôi làm là tôi có các clases thực thể trong một dự án riêng biệt theo nhật thực, với một thư mục META-INF chứa tệp persistence.xml, đóng gói tệp jar này và bao gồm nó trong các phụ thuộc của dự án ứng dụng (ví dụ: WEB-INF/lib), hoặc, triển khai nó thẳng đến máy chủ ứng dụng.

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