2011-09-01 40 views
5

Tôi đang gặp khó khăn khi cố gắng phát hành bên trong EAR phiên bản Hibernate của riêng tôi (và không phải là phiên bản JBoss mang theo mặc định).Nâng cấp phiên bản Hibernate trong JBOSS

Sau đó, tôi đã thực hiện triển khai của tôi "scoped" bằng cách bao gồm trong EAR một tập tin jboss-app.xml chứa sau:

<jboss-app> 
    <loader-repository> 
    com.example:archive=unique-archive-name 
    <loader-repository-config> 
    java2ParentDelegation=false 
    </loader-repository-config> 
    </loader-repository> 
</jboss-app> 

Và, như thường lệ, tôi tuyên bố cung cấp dịch vụ kiên trì của tôi trong đơn vị bền vững được Hibernate, như sau:

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

Nhưng sau đó, điều tồi tệ nhất sẽ xảy ra. Khi triển khai, máy chủ sẽ ném ra một ClassCastException khi nó cố gắng truyền từ org.hibernate.ejb.HibernatePersistence đến giao diện JPA javax.persistence.spi.PersistenceProvider (được IS ám chỉ bởi HibernatePersistence).

Đây là loại WEIRD, vì tôi đang vận chuyển API JPA cũng trong EAR của tôi, vì vậy, cho rằng các lớp của EAR có ưu tiên đối với JBoss, nó sẽ không có vấn đề khi truyền từ HibernatePersistence sang PersistenceProvider, vì chúng "nên" trên cùng một trình nạp lớp.

Nếu tôi không gửi API JPA của riêng mình, thì triển khai không thành công với một ClassNotFoundException khi JBoss cố gắng tìm một số lớp JPA.

Bất kỳ ý tưởng nào về lý do khiến quá trình truyền này không thành công?

Tôi đang sử dụng JBoss 5.1.0 và cố gắng sử dụng Hibernate 3.5.6.Final. Phiên bản API JPA là phiên bản được nhập khẩu quá cảnh bởi phiên bản Hibernate được ghép nối.

Trả lời

1

Bạn đã bao gồm hibernate-entitymanager.jar chưa?

Nếu không, bạn có thể thử thay thế chốt lõi ngủ đông trong phổ biến/lib bằng phiên bản 3.5.6.

+0

Cảm ơn. Có, cả hai hibernate-core và hibernate-entitymanager được vận chuyển. Để đặt hibernate jar trong common/lib không phải là một tùy chọn, Hibernate nên được vận chuyển (và nó sẽ là có thể ...). – edutesoy

2

Bạn có thể thử bật phạm vi lớp học thông qua người triển khai tai. Đối với JBoss 5.x chỉnh sửa:

JBoss/máy chủ/[cấu hình] /deployers/ear-deployer-jboss-beans.xml

và thay đổi:

<bean name="EARClassLoaderDeployer" class="org.jboss.deployment.EarClassLoaderDeployer"> 
     <property name="isolated">false</property> 
    </bean> 

đặt cài cô lập là true.

1

Để giải quyết các sự cố tải lớp với hibernate trong máy chủ jboss, bạn cần phải thêm jboss-classloading.xml bên trong thư mục WEB-INF của ứng dụng web của bạn. Đọc thêm về các cài đặt cấu hình này here.

<classloading xmlns="urn:jboss:classloading:1.0" 
domain="pentaho.ear" 
export-all="NON_EMPTY" 
import-all="true" 
parent-first="false"> 
</classloading> 
Các vấn đề liên quan