2012-01-24 40 views
18

Tôi vừa mới nâng cấp lên NetBeans 7.1 từ 7.0. Khi mở một bean được quản lý JSF, nó "helpfully" nói với tôi rằng nó không thể tìm thấy tệp bean.xml của tôi vì vậy tôi muốn nó tạo ra cho tôi. Tôi biết tôi đã có một tập tin beans.xml theo WEB-INF nhưng tôi nói có anyway để xem những gì đã xảy ra. Một bean.xml mới đã được tạo ra dưới META-INF cho tôi.Nên đặt beans.xml ở đâu?

Nghĩ rằng tôi đã phạm sai lầm, tôi đã xóa tệp trong WEB-INF chỉ để ứng dụng của tôi không khởi động được. Đưa beans.xml trở lại vào WEB-INF cố định vấn đề đó. Trang này dường như cho rằng cả hai vị trí đều hợp lệ: http://seamframework.org/Documentation/WhatIsBeansxmlAndWhyDoINeedIt

Vì vậy, câu hỏi là bean.xml phải nằm trong WEB-INF hoặc META-INF?

Tôi đang chạy GlassFish 3.1.1 và Java 7

Trả lời

35

Có beans.xml đặt vào thư mục WEB-INF là tốt trong trường hợp của bạn, bởi vì rất có thể đậu dưới lớp WEB-INF.

Địa điểm chính xác cho beans.xml phụ thuộc vào loại lưu trữ và vị trí của các lớp bean.

Trong đặc tả này được giải thích như sau:

Bean lớp đậu kích hoạt phải được triển khai trong kho lưu trữ đậu.

  • Thùng thư viện, EJB jar, kho ứng dụng khách hoặc lưu trữ rar là tệp có tên beans.xml trong thư mục META-INF.
  • Thư mục WEB-INF/classes của cuộc chiến là một kho lưu trữ bean nếu có tệp có tên beans.xml trong thư mục WEB-INF của chiến tranh.
  • Một thư mục trong đường dẫn lớp JVM là một kho lưu trữ bean nếu nó có tệp có tên beans.xml trong thư mục META-INF.
+0

Cảm ơn tuyệt vời, đã dạy cho tôi điều gì đó mới mẻ. Tôi nghi ngờ NetBeans là sai trong tình huống này. – wobblycogs

+0

Câu trả lời đã giúp tôi hiểu ngoại lệ 'javax.enterprise.inject.UnsatisfiedResolutionException: Api type ...' exception Tôi đã sử dụng @Inject trong một servlet. Tôi đã có beans.xml được đặt trong META-INF thay vì WEB-INF. – p1brunne

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