2014-01-03 5 views
10

До сих пор у меня были тесты интеграции с Arquillian и встроенным Glassfish 4.x. Поскольку я страдаю от ошибки ARQ-1458, я попытался перейти на Wildfly 8.0.0.Beta1.Arquillian: Wildfly встроен?

Мои Deps в Maven являются:

<dependency> 
    <groupId>org.jboss.arquillian</groupId> 
    <artifactId>arquillian-bom</artifactId> 
    <version>1.1.2.Final</version> 
    <scope>import</scope> 
    <type>pom</type> 
</dependency> 
<dependency> 
    <groupId>org.jboss.arquillian.junit</groupId> 
    <artifactId>arquillian-junit-container</artifactId> 
    <scope>test</scope> 
</dependency> 
<dependency> 
    <groupId>org.wildfly</groupId> 
    <artifactId>wildfly-arquillian-container-embedded</artifactId> 
    <version>8.0.0.Beta1</version> 
    <scope>test</scope> 
</dependency> 
<dependency> 
    <groupId>org.wildfly</groupId> 
    <artifactId>wildfly-embedded</artifactId> 
    <version>8.0.0.Beta1</version> 
    <scope>test</scope> 
</dependency> 

При запуске мой тест, я получаю ошибку, что jbossHome является нулевым. У меня нет arquillian.xml. При проверке источников Github для встроенных в wildfly-arquillian-контейнеров (POM) мне интересно, ПОЧЕМУ, для встроенного контейнера требуется JBOSS_HOME? Я понимаю, что это для управляемых и удаленных вариантов, но зачем мне это нужно для встроенного? На страницах Arquillian также есть примеры для JBoss AS как управляемых серверов, поэтому я удивляюсь, что это возможно вообще (но почему там есть wildfly-arquillian-container-embedded?)?

Или я должен придерживаться управляемого контейнера с использованием плагина maven-dependency для загрузки контейнера (см. http://arquillian.org/guides/getting_started/#add_more_containers - внизу)?

Спасибо и с наилучшими пожеланиями!

Точная ошибка:


org.jboss.arquillian.container.spi.ConfigurationException: jbossHome 'null' must exist 
    at org.jboss.arquillian.container.spi.client.deployment.Validate.configurationDirectoryExists(Validate.java:139) 
    at org.jboss.as.arquillian.container.embedded.EmbeddedContainerConfiguration.validate(EmbeddedContainerConfiguration.java:102) 
    at org.jboss.arquillian.container.impl.ContainerImpl.createDeployableConfiguration(ContainerImpl.java:115) 
    at org.jboss.arquillian.container.impl.ContainerImpl.setup(ContainerImpl.java:181) 
    at org.jboss.arquillian.container.impl.client.container.ContainerLifecycleController$7.perform(ContainerLifecycleController.java:149) 
    at org.jboss.arquillian.container.impl.client.container.ContainerLifecycleController$7.perform(ContainerLifecycleController.java:145) 
    at org.jboss.arquillian.container.impl.client.container.ContainerLifecycleController.forContainer(ContainerLifecycleController.java:255) 
    at org.jboss.arquillian.container.impl.client.container.ContainerLifecycleController.setupContainer(ContainerLifecycleController.java:144) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94) 
    at org.jboss.arquillian.core.impl.EventContextImpl.invokeObservers(EventContextImpl.java:99) 
    at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:81) 
    at org.jboss.arquillian.container.impl.client.ContainerDeploymentContextHandler.createContainerContext(ContainerDeploymentContextHandler.java:57) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94) 
    at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:88) 
    at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:135) 
    at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:115) 
    at org.jboss.arquillian.core.impl.EventImpl.fire(EventImpl.java:67) 
    at org.jboss.arquillian.container.impl.client.container.ContainerLifecycleController$1.perform(ContainerLifecycleController.java:62) 
    at org.jboss.arquillian.container.impl.client.container.ContainerLifecycleController$1.perform(ContainerLifecycleController.java:55) 
    at org.jboss.arquillian.container.impl.client.container.ContainerLifecycleController.forEachContainer(ContainerLifecycleController.java:209) 
    at org.jboss.arquillian.container.impl.client.container.ContainerLifecycleController.setupContainers(ContainerLifecycleController.java:54) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94) 
    at org.jboss.arquillian.core.impl.EventContextImpl.invokeObservers(EventContextImpl.java:99) 
    at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:81) 
    at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:135) 
    at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:115) 
+4

У меня есть ощущение, что wildfly встраиваемая не является на самом деле встроенным контейнером или еще не закончен.Потому что я сделал рытье и посмотрел на java-класс «EmbeddedContainerConfiguration». Там они проверяют эксплицитность для jbossHome, moduleHome и bundleHome. Поэтому вам нужно загрузить «настоящую» wildfly, которая, на мой взгляд, не является встроенным контейнером;) В настоящее время я использую управляемый/удаленный адаптер, и все работает нормально. Для встроенных тестов я буду использовать встроенную стеклянную панель :) – zip

+1

Yepp, увидел тот же код :(Так что я боюсь, что мне нужно пойти на тот же вариант и дождаться лисицы ARQ-1458. Я не сдаюсь, cos используя встроенный Wildfly по моему первому варианту, чтобы можно было проверить проект и сделать Maven Build без необходимости устанавливать по-другому или использовать другую помощь плагинов или задач ANT. –

+1

Я знаю, что эта тема довольно старая, но я бы если кто-нибудь может сообщить мне, что вы, наконец, пришли к выводу об этой ошибке? – Siddharth

ответ

0

Ну, я думаю, что он работает по-другому ж/Wildfly, чем с Glassfish:

https://community.jboss.org/thread/236562

:(

Edit: Docker добавляет еще в этом вопросе я мог бы легко управлять внешним контейнером, используя Docker и Maven, все еще используя Arquillian. это еще, но если кто-то наткнется на это ...

+0

Это правда, но лично я бы предпочел удаленный (или управляемый) адаптер, так как он дает нам более точные результаты тестов (и меньше проблем также). –

8

Необходимо установить переменную среды JBOSS_HOME в путь к установке jBoss. В противном случае тег свойство должен быть добавлен в arquillian.xml внутри тега контейнера.

<arquillian xmlns="http://jboss.org/schema/arquillian" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://jboss.org/schema/arquillian 
    http://jboss.org/schema/arquillian/arquillian_1_0.xsd"> 


<container qualifier="jboss" default="true"> 
    <configuration> 
     <property name="jbossHome">/path/to/jboss/as</property> 
    </configuration> 
</container> 

из примеров применения JBoss-javaee6-веб-приложение

2

Посмотрите на this nice article написаны Дэном Аллена.

Короче говоря, обычно не используйте встроенный контейнер (например, в стеклянную рыбку с EclipseLink). Автономный сервер дает нам более точные результаты тестирования.

Также я предпочитаю удаленные адаптеры из-за скорость разработки (нет запуска сервера при каждом запуске теста, просто запустите его вручную один раз). Если вы хотите, чтобы контейнер запускался автоматически, как со встроенным, затем переключитесь на управляемый контейнер.

Надеюсь, это поможет.

+2

Hello Grzesiek, Большое спасибо за эту информативную и важную ссылку. Я думаю, что я перейду на удаленный контейнер, тем более что ткачество - это важная вещь для меня. Первоначальная (и до сих пор действительная, до некоторой степени) идея заключалась в том, что кто-то может просто загрузить проект Maven и просто запустить тесты unit/integration без установки контейнера. Еще раз большое спасибо! –

+1

@TimoBoewing Добро пожаловать:] Я вас хорошо понимаю, потому что однажды я тоже оказался в ловушке этой заманчивой идеи. –

4

использование systemPropertyVariables

<profile> 
<id>INTEGRATION_TESTS</id> 
<dependencies> 
    <dependency> 
     <groupId>org.wildfly</groupId> 
     <artifactId>wildfly-arquillian-container-embedded</artifactId> 
     <version>8.2.0.Final</version> 
    </dependency> 
    <!-- this is the wildfly emb.container - BUT eventually it is not a fully blown emb.container--> 
    <dependency> 
     <groupId>org.wildfly</groupId> 
     <artifactId>wildfly-embedded</artifactId> 
     <version>8.2.0.Final</version> 
    </dependency> 

    <dependency> 
     <groupId>com.oracle</groupId> 
     <artifactId>ojdbc6</artifactId> 
     <version>11.2.0.3</version> 
    </dependency> 
</dependencies> 
<build> 
    <plugins> 
     <plugin> 
      <artifactId>maven-dependency-plugin</artifactId> 
      <executions> 
       <execution> 
        <id>unpack</id> 
        <phase>process-test-classes</phase> 
        <goals> 
         <goal>unpack</goal> 
        </goals> 
        <configuration> 
         <artifactItems> 
          <artifactItem> 
           <groupId>org.wildfly</groupId> 
           <artifactId>wildfly-dist</artifactId> 
           <version>8.2.0.Final</version> 
           <type>zip</type> 
           <overWrite>false</overWrite> 
           <outputDirectory>target</outputDirectory> 
          </artifactItem> 
         </artifactItems> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

     <plugin> 
      <groupId>org.wildfly.plugins</groupId> 
      <artifactId>wildfly-maven-plugin</artifactId> 
      <version>1.0.2.Final</version> 
      <executions> 
       <execution> 
        <phase>prepare-package</phase> 
        <goals> 
         <goal>start</goal> 
        </goals> 
       </execution> 
       <execution> 
        <id>jdbc</id> 
        <phase>package</phase> 
        <goals> 
         <goal>deploy-artifact</goal> 
        </goals> 
        <configuration> 
         <groupId>com.oracle</groupId> 
         <artifactId>ojdbc6</artifactId> 
         <name>ojdbc6.jar</name> 
        </configuration> 
       </execution> 
       <execution> 
        <id>datasource</id> 
        <phase>package</phase> 
        <goals> 
         <goal>add-resource</goal> 
        </goals> 
        <configuration> 
         <address>subsystem=datasources,data-source=tests</address> 
         <resources> 
          <resource> 
           <properties> 
            <connection-url>jdbc:oracle:thin:@***:1521:xe</connection-url> 
            <jndi-name>java:jboss/datasources/tests</jndi-name> 
            <enabled>true</enabled> 
            <enable>true</enable> 
            <user-name>***</user-name> 
            <password>***</password> 
            <driver-name>ojdbc6.jar</driver-name> 
            <use-ccm>false</use-ccm> 
           </properties> 
          </resource> 
         </resources> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-failsafe-plugin</artifactId> 
      <version>2.17</version> 
      <configuration> 
       <systemPropertyVariables> 
        <java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager> 
        <jboss.home>${project.basedir}/target/wildfly-8.2.0.Final</jboss.home> 
        <module.path>${project.basedir}/target/wildfly-8.2.0.Final/modules</module.path> 
       </systemPropertyVariables> 
      </configuration> 
      <executions> 
       <execution> 
        <id>integration-test</id> 
        <goals> 
         <goal>integration-test</goal> 
        </goals> 
       </execution> 
       <execution> 
        <id>verify</id> 
        <goals> 
         <goal>verify</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 


    </plugins> 

</build> 

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