Статьи

Arquillian Chameleon ради простоты

При использовании Arquillian одна из вещей, которую вам нужно сделать, это определить, в каком контейнере вы хотите выполнить все свои тесты.

И это делается путем добавления зависимости в classpath для адаптера и в зависимости от используемого режима (встроенный, управляемый или удаленный), требующего загрузки хамелеон-сонный JPG-адаптируются-945-1 Сервер приложений вручную. Например, это происходит, когда Wildfly используется во встроенном или управляемом режиме.

Пример pom.xml с использованием Wildfly может быть:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<dependencies>
  <dependency>
    <groupId>org.wildfly</groupId>
      <artifactId>wildfly-arquillian-container-managed</artifactId>
      <version>${version.org.wildfly}</version>
      <scope>test</scope>
  </dependency>
</dependencies>
 
<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <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>${version.org.wildfly}</version>
                <type>zip</type>
                <overWrite>false</overWrite>
                <outputDirectory>${project.build.directory}</outputDirectory>
             </artifactItem>
            </artifactItems>
          </configuration>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

Обратите внимание, что в предыдущем сценарии вам нужно определить адаптер Arquillian , в данном случае управляемый, и использовать maven-dependency-plugin для загрузки файла распространения Wildfly, используемого Arquillian .

Этот подход хорош и работает, но у него есть три недостатка:

  1. Вам нужно повторить все эти строки в каждом сценарии сборки, который вы хотите использовать Arquillian и Wildfly.
  2. Если вам нужно использовать другой сервер приложений в другом проекте, вам нужно знать, какой артефакт адаптера необходим, и нужно ли загружать артефакты или нет. Например, в случае встроенного Jetty нет необходимости загружать какой-либо дистрибутив, вам нужно только установить встроенную зависимость.
  3. Если вы хотите проверить свой код на нескольких серверах приложений, у вас есть проблема № 2 плюс начните работать с профилями.
Но все эти проблемы можно исправить с помощью Arquillian Chameleon . Arquillian Chameleon — это универсальный контейнер, который читает из arquillian.xml, какой контейнер, какую версию и какой режим вы хотите использовать в своих тестах, и он позаботится о добавлении необходимого адаптера в classpath, загрузит любой необходимый дистрибутив и настроит протокол (это это то, что как пользователь, вы не должны трогать).
Как использовать Arquillian Chameleon довольно легко. Делайте то, что обычно делаете, например, добавьте Arquillian bom и добавьте Chameleon Container вместо любого специфичного для сервера приложений артефакта:
1
2
3
4
5
6
<dependency>
  <groupId>org.arquillian.container</groupId>
  <artifactId>arquillian-container-chameleon</artifactId>
  <version>1.0.0.Alpha7</version>
  <scope>test</scope>
</dependency>

Затем создайте в src / test / resources файл конфигурации Arquillian с именем arquillian.xml со следующей конфигурацией:

01
02
03
04
05
06
07
08
09
10
11
12
13
<?xml version="1.0"?>
            xmlns="http://jboss.org/schema/arquillian"
            xsi:schemaLocation="http://jboss.org/schema/arquillian
 
    <container qualifier="chameleon" default="true">
        <configuration>
            <property name="chameleonTarget">wildfly:9.0.0.Final:managed</property>
        </configuration>
    </container>
 
</arquillian>

Обратите внимание, что теперь вам нужно всего лишь использовать дружественное свойство chameleonTarget, чтобы определить, какой контейнер, версию и режим вы хотите использовать. В предыдущем примере Wildfly 9.0.0.Final с управляемым адаптером.

При запуске любого теста с этой конфигурацией Chameleon проверит, загружен ли дистрибутив Wildfly 9.0.0.Final, а если нет, то добавит в classpath управляемый адаптер для Wildfly 9.0.0 и, наконец, выполнит тест как любой другой Arquillian. тест.

Что происходит, если вы хотите использовать Payara вместо Wildfly? Вам нужно только изменить свойство chameleonTarget на payara: 4.1.1.163: managed, чтобы, например, запускать тесты для Payara 4.1.1 в управляемом режиме.

СОВЕТ: Вы можете установить это свойство, используя системное свойство Java (-Darq.container.chameleon.chameleonTarget = payara: 4.1.1.163: managed) В настоящее время следующие контейнеры поддерживаются Chameleon :

  • JBoss EAP 6.x, 7.x
  • WildFly 10.x, 9.x, 8.x
  • JBoss AS 7.x
  • GlassFish 3.1.2, 4.x
  • Payara 4.x

Мы продолжаем учиться,
Алекс.

Я вижу тебя, Твоя коричневая кожа сияет на солнце, Я вижу, как ты идешь очень медленно (Мальчики лета — Атарис)

Музыка: https://www.youtube.com/watch?v=Qt6Lkgs0kiU

Ссылка: Arquillian Chameleon ради простоты от нашего партнера JCG Алекса Сото в блоге One Jar To Rule All .