2012-01-24 5 views
18

Я только что обновил NetBeans 7.1 от 7.0. При открытии управляемого JSF компонента он «помог» сказал мне, что он не может найти мой файл beans.xml, поэтому мне понравилось бы оно создано для меня. Я знал, что у меня есть файл beans.xml под WEB-INF, но я все равно сказал «да», чтобы узнать, что произошло. Новый beans.xml был создан в META-INF для меня.Где должен быть размещен beans.xml?

Думаю, что я ошибся. Я удалил файл под WEB-INF только для того, чтобы сбой приложения при запуске. Помещение beans.xml обратно в WEB-INF исправило эту проблему. Кажется, что эта страница думает, что оба местоположения действительны: http://seamframework.org/Documentation/WhatIsBeansxmlAndWhyDoINeedIt

Итак, вопрос в какой папке должен beans.xml жить в WEB-INF или META-INF?

Я бегу GlassFish 3.1.1 и Java 7

ответ

35

Имея beans.xml помещен в каталог WEB-INF хорошо в вашем случае, потому что, скорее всего, бобы находятся классы WEB-INF.

Правильное место для beans.xml зависит от типа архива и местоположения классов bean.

В спецификации это объясняется следующим образом:

Bean классы включенных бобов должны быть развернуты в боб архивах.

  • Библиотека jar, баннер EJB, баннер клиентского приложения или rar-архив - это bean-архив, если он имеет файл с именем beans.xml в каталоге META-INF.
  • Каталог WEB-INF/classes войны является файлом бобов, если в каталоге WEB-INF войны есть файл с именем beans.xml.
  • Каталог в пути JVM classpath является файловым архивом, если он имеет файл с именем beans.xml в каталоге META-INF.
+0

Отличный ответ спасибо, научил меня чему-то новому. Я подозреваю, что NetBeans ошибается в этой ситуации. – wobblycogs

+0

Ответ помог мне понять исключение 'javax.enterprise.inject.UnsatisfiedResolutionException: Api type ...' exception Я получил использование @Inject в сервлете. У меня был beans.xml, помещенный в META-INF вместо WEB-INF. – p1brunne

Смежные вопросы