2012-04-19 28 views
5

Tôi có một ứng dụng sử dụng JPA/Hibernate và Google Guice. Guice được bootstrapped trong một ServletContextListener và nó thiết lập các EntityManagerFactory chính nó.JBoss AS7 Tự động tải JPA

Ứng dụng hoạt động tốt trên Tomcat 7, nhưng khi tôi triển khai để JBoss AS7 nó không thành công vì JBoss quyết định tự động thiết lập JPA trước khi gọi ServletContextListener của tôi.

Làm cách nào để JBoss không tự động khởi chạy JPA và thay vào đó hãy đợi ServletContextListener để làm điều đó?

Cập nhật

Theo liên kết mà James cung cấp dưới đây:

Trong triển khai ứng dụng, JPA sử dụng được phát hiện (ví dụ persistence.xml hoặc @ PersistenceContext/chú thích Unit) và tiêm nhiễm Hibernate phụ thuộc vào triển khai ứng dụng.

https://docs.jboss.org/author/display/AS71/JPA+Reference+Guide#JPAReferenceGuide-Introduction

tôi cần phải tìm ra cách để vô hiệu hóa tính năng này "tự động phát hiện".

Update # 2

quản lý container của JPA có thể bị vô hiệu hóa bằng cách thêm thuộc tính sau vào persistence.xml:

<property name="jboss.as.jpa.managed" value="false" /> 

Theo this topic, tính đến tháng 2 năm 2012 chức năng này chỉ là có sẵn trong bản dựng hàng đêm.

+0

này khá cũ, nhưng tôi gặp phải vấn đề tương tự. Vấn đề thêm của tôi là tôi không sử dụng persistence.xml mà đúng hơn là tuyên bố nhà máy quản lý thực thể với mã java và dường như việc thêm thuộc tính bị bỏ qua và không tạo ra sự khác biệt nào. Bất kỳ ý tưởng nếu nó có thể được giải quyết với cách tiếp cận này? – andreadi

+0

@andreadi Không có ý tưởng. Tôi đã chỉ thử nghiệm một ứng dụng trên AS7 nhưng không bao giờ tiến lên phía trước với việc sử dụng nó cho dự án đó. Bạn có thể đặt cược tốt nhất để hỏi một câu hỏi mới với chi tiết cụ thể của bạn. –

Trả lời

2

JBoss AS7 là một máy chủ Java EE đầy đủ. Điều đó có nghĩa là thực hiện JPA đi kèm với nó. Trong Tomcat, bạn phải cung cấp triển khai JPA của riêng mình và về cơ bản đang chạy JPA giống như bạn làm trong Java SE.

Tôi khuyên bạn nên đọc tài liệu JPA reference cho AS7.

Bạn cũng nhận được CDI để không có nhu cầu thực sự cho Guice. Bạn có thể có thể sử dụng Guice thay vì CDI, nhưng thật sự tôi không thể nói với bạn như thế nào :-)

+0

Trước đây tôi đã sử dụng Oracle WebLogic 11g và nó không tải JPA một cách mạnh mẽ cho bạn theo mặc định, do đó, nó có vẻ lạ mà JBoss sẽ. Tôi sẽ kiểm tra các liên kết mặc dù. –

+0

Nó có thể nhìn thấy persistence.xml của bạn và tải Hibernate và JPA API. Tôi khá chắc chắn rằng hầu hết các máy chủ EE làm điều này, nhưng tôi không thể đảm bảo điều đó.Tôi đã làm một chút tìm kiếm và không có gì thực sự xuất hiện với tôi về cách vô hiệu hóa nó. Bạn có thể vô hiệu hóa hệ thống con JPA và gói Hibernate với ứng dụng của bạn. –

+0

Tôi chưa tìm thấy cách nào để tắt tính năng này. Tôi đã upvoted câu trả lời của bạn và tôi sẽ chấp nhận nó vào đầu tuần tới khi tôi trở lại trong văn phòng nếu không có ai cung cấp thông tin về làm thế nào để vô hiệu hóa tự động phát hiện của JPA. Tôi đánh giá cao sự hỗ trợ của bạn về điều này, liên kết của bạn ít nhất là giải thích những gì đang xảy ra. –

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