2009-06-09 15 views
7

Tôi đã phát hiện ra rằng "Hibernate không thể kết hợp với việc triển khai tham chiếu của JAX-RS". trên liên kết http://lists.jboss.org/pipermail/hibernate-issues/2009-May/015628.htmlSự cố tương thích của ASM 3.1 và HIbernate và JAX-RS

Vì vậy, tôi không thể kết hợp JAX-RS (áo) với hibernate, không ai biết một công việc xung quanh cho điều này?

+0

Bạn đã bao giờ tìm thấy một giải pháp cho điều này? Tôi đang chạy vào điều này ngay bây giờ. Tôi đang sử dụng Hibernate 3,2 Core, chú thích và thực thể quản lý. Hibernate chết khi tôi cố gắng thêm các thư viện JAX-RS. Cảm ơn. – kmehta

Trả lời

3

Nâng cấp lên Hibernate 3.3.2 trở lên.

Nếu bạn theo liên kết đến bug report thông báo được tạo, nó cho biết phiên bản Hibernate mới nhất (kể từ 3.3.2) sử dụng gói thao tác bytecode khác (Javassist), giúp loại bỏ xung đột đối với ASM vấn đề.

+1

HIbernate 3.3.2 không trợ giúp, tôi nghĩ chúng ta vẫn cần hướng dẫn hibernate để sử dụng javassist trong tệp hibernate.properties, trong đó dự án của tôi sử dụng tệp hibernate.cfg.xml và chúng tôi không thể thực thi javassist trong tệp xml. –

13

Gốc của tà ác là cglib. Thay thế cglib-2.1.3.jar thành cglib-nodep-2.1_3.jar và xóa các tệp asm * .jar của hibernate.

+0

Câu trả lời này phải được đánh dấu là câu trả lời đúng –

+0

không hoạt động đối với tôi ... nhận 'java.lang.NoClassDefFoundError: org/objectweb/asm/ClassVisitor' – aps109

+0

Vẫn hoạt động .. Với asm-3.3.1 – Jaden

4

Sử dụng Jersey (các Java REST của khung) kết hợp với Hibernate đòi hỏi một số tinh chỉnh của pom.xml tập tin của Maven. Vấn đề là Hibernate sử dụng ASM 1.5.3 không tương thích với ASM 3.1 được sử dụng bởi Jersey.

Những gì bạn cần làm là loại trừ một số phụ thuộc bắc cầu từ Hibernate:

<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate</artifactId> 
    <version>3.2.6.ga</version> 
    <exclusions> 
     <exclusion> 
      <groupId>asm</groupId> 
      <artifactId>asm</artifactId> 
     </exclusion> 
     <exclusion> 
      <groupId>asm</groupId> 
      <artifactId>asm-attrs</artifactId> 
     </exclusion> 
     <exclusion> 
      <groupId>cglib</groupId> 
      <artifactId>cglib</artifactId> 
     </exclusion> 
    </exclusions> 
</dependency> 

Sau đó, bạn cần phải bao gồm các phiên bản đúng của ASM:

<dependency> 
    <groupId>asm</groupId> 
    <artifactId>asm</artifactId> 
    <version>3.1</version> 
</dependency> 

Cuối cùng, bạn cần phải bao gồm một phiên bản nodep của CGLib đóng gói lại các lớp từ ASM phiên bản 1.5.3:

<dependency> 
    <groupId>cglib</groupId> 
    <artifactId>cglib-nodep</artifactId> 
    <version>2.1_3</version> 
</dependency> 

nguồn: http://blog.idm.fr/2009/04/jersey-hibernate-conflict.html

1

GIẢI PHÁP: Vấn đề tương thích của ASM 3.1 và Hibernate và JAX-RS

  • Tháo lọ sau
    1 asm-attrs.jar
    2 asm. jar
    3 cglib-2.1.3.jar

  • Thêm jar dưới

1 asm-3.1.jar
2 cglib-nodep-2.1_3.jar