2011-08-24 36 views
5

Tôi không muốn sử dụng plugin Websphere 7 jpa được xây dựng, thay vào đó sử dụng ứng dụng WEB-INF/lib/open-jpa 2 và nhà cung cấp duy trì quyền sở hữu độc quyền. Tôi không thể cài đặt gói tính năng OSGI và JPA 2 cho Websphere.websphere 7 và (ứng dụng dựa trên) open-jpa 2

Ban đầu, tôi đã nhận được lỗi phân tích cú pháp sax chỉ đơn giản là cố gắng tải persistence.xml (phiên bản = "2" không được hỗ trợ). Lỗi được đưa ra bởi một lớp trong jpa mở 1.2.3. Khi tôi chạy websphere/appserver/bin/wsjpaversion.bat, hũ 1.2.3 mở-jpa được hiển thị. Theo mặc định, nó ghi đè mở 2 jpa trong ứng dụng. Tôi đã tạo một thư viện chia sẻ có chứa mở-jpa 2 jar với tùy chọn cấu hình này được chọn: 'Sử dụng bộ nạp lớp riêng biệt cho thư viện được chia sẻ này'. Tôi đặt trình nạp lớp ứng dụng của tôi để tải phụ huynh cuối cùng và gán cho nó tài nguyên thư viện được chia sẻ mới. Lỗi 'phiên bản 2' đã biến mất, nhưng có một vấn đề khác. Khi tôi cố gắng để khởi tạo một EntityManager tôi nhận được một lỗi:

Caused by: javax.persistence.PersistenceException: Failed to load provider from META-INF/services 
    at javax.persistence.spi.PersistenceProviderResolverHolder$DefaultPersistenceProviderResolver.getPersistenceProviders(PersistenceProviderResolverHolder.java:121) 
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:91) 
    at java.lang.J9VMInternals.initializeImpl(Native Method) 
    at java.lang.J9VMInternals.initialize(J9VMInternals.java:200) 
    ... 2 more 
Caused by: java.lang.ClassCastException: com.ibm.websphere.persistence.PersistenceProviderImpl incompatible with javax.persistence.spi.PersistenceProvider 
    at javax.persistence.spi.PersistenceProviderResolverHolder$DefaultPersistenceProviderResolver.getPersistenceProviders(PersistenceProviderResolverHolder.java:110) 
    ... 11 more 

Một chi tiết hơn: bên trong persistence.xml, yếu tố cung cấp dịch vụ được thiết lập để các PersistenceProviderImpl độc quyền không phải là mặc định cung cấp bền vững Websphere. Vậy thì mặc định websphere này đến từ đâu và làm cách nào để ngăn chặn nó? (Một lưu ý quan trọng: khi tôi loại bỏ hoàn toàn persistence.xml, tôi nhận được lỗi tương tự)

Cảm ơn bạn

+1

không chắc chắn điều đó có hữu ích hay không, nhưng bạn có thể thay đổi chính sách của trình nạp lớp thành PARENT_LAST (không được khuyến nghị làm mặc định, nhưng nếu bạn buộc phải làm điều này) –

+0

Tôi gặp vấn đề tương tự. Bất kỳ giải pháp? –

Trả lời

4

Không cần cài đặt các gói tính năng, bạn đang chiến đấu một trận thua. Mặc dù có thể cắm riêng JPA thực hiện của bạn, nó không thể làm điều đó với JPA API — nên WS 7 mối quan hệ bạn lên phiên bản 1.0 của JPA (xem, ví dụ, here cách này được thực hiện — không có chính sách nạp lớp nào sẽ thay đổi điều đó, mặc dù nó có vẻ hấp dẫn lúc đầu).

+0

Bạn nói đúng là nó không đáng để gặp rắc rối. Websphere 7 có jpa 1 quá đan xen. Tôi nghĩ rằng nó là có thể nếu bạn thực hiện giải quyết nhà cung cấp kiên trì của riêng bạn và loại trừ các nhà cung cấp mặc định websphere kiên trì được nạp từ classpath, nhưng đối với tôi nó không có giá trị rắc rối. –

+2

@MorganDowell Đây là lý do chính tại sao công ty chúng tôi dính vào JPA 1.0, ngay cả trong các ứng dụng mới - vì máy chủ của chúng tôi lưu trữ nhiều ứng dụng, cũ và mới cùng một lúc, chúng tôi phải thiết lập các nhóm máy chủ hoàn toàn khác nhau các ứng dụng sử dụng JPA 2, không khả thi vì lý do tài chính. – MaDa

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