Статьи

Версия ад с JSFUnit, Arquillian, и (встроенный) Glassfish и другие контейнеры

JSFUnit и JBoss Arquillian тест рамка для JavaEE выглядит очень перспективно, но , по моему опыту , есть веские причины , почему они только бета и альфа — версия. Может быть, вы можете заставить их работать, но вы должны выбрать правильную версию каждой зависимости — на этом этапе многое меняется между отдельными версиями — и повезло, что вы нашли один из «счастливых путей». В конце концов я почти получил JSFUnit 1.0.0.Beta1, работающий с Arquillian 10.0.0.Alpha4 и Glassfish-Embedded 3.0.1, но не удалось развернуть из-за странного исключения синтаксического анализа веб-фрагмента arquillian. Я фиксирую эту неудачу, чтобы помочь тем, кто борется с этим тоже.

Существуют следующие фатальные ограничения:

  • JSFUnit 2.0.0.Beta1 — последняя доступная версия ( Beta2 должна была быть выпущена в апреле, но ее не было, и у нее все еще открыт один выпуск — JSFUNIT-275 ]; 2.0.0. Финал должен быть 1 июля, но с учетом задержки Beta2 и без прогресса в финальной версии, это будет, конечно, намного позже)
  • JSFUnit 2.0.0.Beta1 требует Arquillian 1.0.0.Alpha4, поддержка Alpha5 поставляется с Beta2.
  • Выбор контейнера:

    • Tomcat 6 поддерживает только сервлет 2.5, в то время как JSFUnit требует 3.0, поскольку он использует веб-фрагменты; однако это, кажется, исправлено в JSFUNIT 1.0.0.Beta2, см. JSFUNIT-273
    • Я не смог получить JBoss Embedded (6.0.0.Final), он пытался загрузить квазиллионы зависимостей и в итоге потерпел неудачу из-за некоторых несовпадений версий
    • Embedded GlassFish (GF) — версия 3.1 имеет другой API, который поддерживается только начиная с Arq. Alpha5, и развертывание до 3.0.1 завершается неудачно из-за « SAXParseException: src-resol: невозможно преобразовать имя« xml: lang »в (n) компонент« объявления атрибутов ». «, Решено только в GF 3.1 ( GLASSFISH-13261 ). Удивительно, но я получил 3.0.1, работающую с другим проектом, но там он потерпел неудачу из-за несоответствия библиотек JSF (в противном случае это также может привести к этой проблеме).

Моя (не очень хорошо работающая) конфигурация Ivy была:

...
<dependency org="org.jboss.jsfunit" name="jsfunit-arquillian" rev="2.0.0.Beta1" conf="webtest" />
<dependency org="org.jboss.arquillian" name="arquillian-junit" rev="1.0.0.Alpha4" conf="webtest" />
<dependency org="org.jboss.arquillian.container" name="arquillian-glassfish-embedded-3" rev="1.0.0.Alpha4" conf="webtest" />
<dependency org="org.glassfish.extras" name="glassfish-embedded-all" rev="3.0.1" conf="webtest" />
...

Прилагаемый файл settings.xml с репозиториями:

<ivysettings>
<settings defaultResolver="all_repositories" />
<resolvers>
<chain name="all_repositories">
<ibiblio name="ibiblio" m2compatible="true" />
<ibiblio name="jboss" m2compatible="true" root="https://repository.jboss.org/nexus/content/repositories/releases" /> <!-- JSFUnit etc. -->
<ibiblio name="sunJars" m2compatible="true" root="http://download.java.net/maven/2" /> <!-- javax.* APIs etc. -->
<ibiblio name="glassfish-embedded" m2compatible="true" root="http://download.java.net/maven/glassfish/" />
</chain>
</resolvers>
</ivysettings>

На версиях JSF

Похоже, что вы можете тестировать только приложения JSF 2.0 (надеюсь, вы сможете протестировать их после выхода Beta2); если вы попытаетесь протестировать приложение JSF 1.2, вы столкнетесь с конфликтующими API, что приводит, например, к IllegalArgumentException: javax.faces.context.ExceptionHandlerFactory .

Совет: Увеличение регистрации во встроенном Glassfish

GF использует java logging => скопировать куда-нибудь glassfish / domains / domain1 / config / logging.properties, замените INFO на FINE и запустите тест со следующими настройками:

-Djava.util.logging.config.file=/Users/jholy/iterate/projects/viatravel/ViaOnline/target/glassfish/config/logging.properties

Если ваш тест не пройден из-за IllegalStateException: Ошибка запуска теста по адресу http: // localhost: 8181 / test / ArquillianServletRunner?…. Продолжал получать 404 с. тогда, вероятно, развертывание вашего приложения не удалось, и вы должны повысить уровень ведения журнала и проверить проблему.

Некоторые записи, представляющие интерес:

  • ClassName = com.sun.enterprise.deployment.node.web.WebCommonNode; MethodName = addDescriptor; | Добавление веб-компонента…
  • javax.enterprise.system.tools.deployment.org.glassfish.deployment.common — здесь могут отображаться некоторые важные исключения
  • javax.enterprise.system.container.web.com.sun.enterprise.web | …; ИмяКласс = com.sun.enterprise.web.WebModuleListener; MethodName = configureJsp; | sysClasspath для __default-web-модуля:
    … jsfunit-arquillian-2.0.0.Beta1.jar:…
  • Был NPE, который, возможно, на самом деле в порядке: ClassName = org.glassfish.deployment.common.InstalledLibrariesResolver; MethodName = getInstalledLibraries; | InstalledLibrariesResolver: произошло исключение: java.lang.NullPointerException | #]

связи

От http://theholyjava.wordpress.com/2011/06/07/version-hell-with-jsfunit-arquillian-and-embedded-glassfish-and-other-containers/