Интеграционные тесты с maven2 fail-safe и embedded-glassfish

Я создал новый проект, который будет запускать только интеграционный тест с

  • плагин для ушей maven
  • maven-failsafe-plugin
  • плагин maven-embedded-glassfish

Когда я устанавливаю упаковку для ушей, создается ушной файл, запускается glassfish, но тесты игнорируются, и я получаю следующее сообщение

[отказоустойчивый: интеграционный-тест] Нет тестов для запуска.

и стеклянная рыба не раскрывается

[embedded-glassfish: undeploy]
17.08.2012 10:08:17 AM PluginUtil doUndeploy
ИНФОРМАЦИЯ: Deployer = com.sun.enterprise.admin.cli.embeddable.DeployerImpl@105f0f87
17.08.2012 10:08:17 AM com.sun.enterprise.loader.ASURLClassLoader $ SentinelInputStream
отчет
ВНИМАНИЕ: входной поток был завершен или принудительно закрыт без явного
закрытия ; создание экземпляра потока сообщается в следующей трассировке стека
java.lang.Throwable
в com.sun.enterprise.loader.ASURLClassLoader $ SentinelInputStream.
(ASURLClassLoader.java:1230)

Когда я ставлю упаковку в банку, я получаю

Выполняется packageName.MyServiceTest
17.08.2012 10:09:34 com.sun.enterprise.v3.server.CommonClassLoaderServiceImpl
findDerbyClient
ИНФОРМАЦИЯ: Не удается найти файл jar клиента javadb, derby jdbc драйвер не будет доступен
по умолчанию.
org.omg.CORBA.COMM_FAILURE: FINE: IOP00410001: Ошибка подключения: socketType:
IIOP_CLEAR_TEXT; имя хоста: localhost; порт: 3700 vmcid: дополнительный код OMG: 1
завершено: Нет
в sun.reflect.GeneratedConstructorAccessor27.newInstance (неизвестный источник)

и стеклянная рыбка не запускается

Я знаю, что он должен что-то делать с жизненным циклом Maven, что не позволяет мне создавать файл Ear, запускать встроенный сервер Glassfish и запускать интеграционные тесты в том же проекте.

Может кто-нибудь предложить мне решение? Я пытаюсь создать файл уха только с проектом объектов EJB и Business и развернуть его на встроенном сервере Glassfish для запуска теста интеграции с maven-failsafe-plugin вместо развертывания файла уха, созданного родительским pom.xml, который добавляет UI и другие проекты в файл уха.

Вот мой файл pom.xml

http://maven.apache.org/xsd/maven-4.0.0.xsd "> 4.0.0

<parent>
    <groupId>company.MyProject</groupId>
    <artifactId>MyProject</artifactId>
    <version>3.8.1-SNAPSHOT</version>
</parent>

<artifactId>MyProject-integration-test</artifactId>
<packaging>jar</packaging>

<name>MyProject Integration Tests</name>

<properties>
    <ear-final-name>MyProject-integration-test-${project.version}</ear-final-name>
</properties>

<dependencies>
    <dependency>
        <groupId>org.glassfish.extras</groupId>
        <artifactId>glassfish-embedded-all</artifactId>
        <version>3.1.1</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.concordion</groupId>
        <artifactId>concordion</artifactId>
        <version>1.4.2</version>
        <scope>test</scope>
        <type>jar</type>
    </dependency>
    <dependency>
        <groupId>org.concordion</groupId>
        <artifactId>concordion-extensions</artifactId>
        <version>1.0.2</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>MyProject-ejb</artifactId>
        <version>${project.version}</version>
        <type>ejb</type>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>com.aspose</groupId>
        <artifactId>aspose-words-jdk15</artifactId>
        <version>${aspose.libraryVersion}</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>javax.persistence</groupId>
        <artifactId>persistence-api</artifactId>
        <version>1.0.2</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>hibernate-entitymanager</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>3.4.0.GA</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>3.3.2.GA</version>
    </dependency>
    <dependency>
        <groupId>hibernate-annotations</groupId>
        <artifactId>hibernate-annotations</artifactId>
        <version>3.4.0.GA</version>
    </dependency>
    <dependency>
        <groupId>hibernate-commons-annotations</groupId>
        <artifactId>hibernate-commons-annotations</artifactId>
        <version>3.4.0.GA</version>
    </dependency>
    <dependency>
        <groupId>com.oracle</groupId>
        <artifactId>ojdbc14</artifactId>
        <version>10.1.0.5.0</version>
    </dependency>
    <dependency>
        <groupId>ehcache</groupId>
        <artifactId>ehcache</artifactId>
        <version>1.2.3</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.6.6</version>
    </dependency>
    <dependency>
        <groupId>org-apache-commons-logging</groupId>
        <artifactId>org-apache-commons-logging</artifactId>
        <version>1.1.0</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-ear-plugin</artifactId>
            <version>2.5</version>
            <configuration>
                <version>5</version>
                <displayName>MyProject</displayName>
                <defaultLibBundleDir>lib</defaultLibBundleDir>
                <finalName>${ear-final-name}</finalName>
                <name>MyProject-integration-test</name>
                <modules>
                    <ejbModule>
                        <groupId>company.MyProject</groupId>
                        <artifactId>MyProject-ejb</artifactId>
                        <bundleFileName>MyProject-ejb.jar</bundleFileName>
                    </ejbModule>
                    <jarModule>
                        <groupId>company.MyProject</groupId>
                        <artifactId>MyProject-business-entities</artifactId>
                        <bundleFileName>MyProject-business-entities-3.8.1-SNAPSHOT.jar</bundleFileName>
                    </jarModule>
                    <jarModule>
                        <groupId>company.MyProject</groupId>
                        <artifactId>MyProject-util</artifactId>
                        <bundleFileName>MyProject-util-3.8.1-SNAPSHOT.jar</bundleFileName>
                    </jarModule>
                </modules>
            </configuration>
        </plugin>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-failsafe-plugin</artifactId>
            <version>2.12</version>
            <executions>
                <execution>
                    <id>failsafe-integration-tests</id>
                    <phase>integration-test</phase>
                    <goals>
                        <goal>integration-test</goal>
                    </goals>
                </execution>
                <execution>
                    <id>failsafe-verify</id>
                    <phase>verify</phase>
                    <goals>
                        <goal>verify</goal>
                    </goals>
                </execution>
            </executions>
            <dependencies>
                <dependency>
                    <groupId>junit</groupId>
                    <artifactId>junit</artifactId>
                    <version>4.8.2</version>
                </dependency>
            </dependencies>
        </plugin>

        <plugin>
            <groupId>org.glassfish</groupId>
            <artifactId>maven-embedded-glassfish-plugin</artifactId>
            <version>3.1.1</version>
            <configuration>
                <goalPrefix>embedded-glassfish</goalPrefix>
                <autoDelete>true</autoDelete>
                <app>${basedir}/target/MyProject-integration-test-${project.version}.ear</app> 
                <port>8080</port>
                <configFile>src/test/resources/glassfish/config/domain.xml</configFile>
            </configuration>
            <executions> 
                <execution>
                    <id>start-glassfish</id>
                    <phase>pre-integration-test</phase>
                    <goals>
                        <goal>start</goal>
                    </goals>
                </execution>
                <execution>
                    <id>glassfish-deploy</id>
                    <phase>pre-integration-test</phase>
                    <goals>
                        <goal>deploy</goal>
                    </goals>
                </execution>
                <execution>
                    <id>glassfish-undeploy</id>
                    <phase>post-integration-test</phase>
                    <goals>
                        <goal>undeploy</goal>
                    </goals>
                </execution>

                <execution>
                    <id>stop-glassfish</id>
                    <phase>post-integration-test</phase>
                    <goals>
                        <goal>stop</goal>
                    </goals>
                </execution>
            </executions> 
        </plugin> 
    </plugins>

</build>


person Dev2    schedule 17.08.2012    source источник
comment
Вы тестировали сборку Ear в командной строке и сначала развернули ее в Glassfish?   -  person khmarbaise    schedule 20.08.2012


Ответы (3)


Да, теперь он работает. Оказывается, проблема была в моем файле domain.xml. По умолчанию domain.xml содержит номера портов с префиксом 2, который следует удалить, а встроенный Glassfish 3.1 ‹порт> 8080‹ / порт> не работает, если установлен ‹configFile> (см. Этот документ) http://embedded-glassfish.java.net/nonav/plugindocs/3.1/stop-mojo.html.

Мне просто нужно было установить порт IIOP в domain.xml на 3700 и в моем тесте

 Properties props = new Properties();  
 props.put("org.omg.CORBA.ORBInitialPort", "3700");
 Context ctx = new InitialContext(props);   

Спасибо, парни

person Dev2    schedule 22.08.2012

Вы можете сделать упаковку и запустить стеклянную рыбку за один вызов.

ты пытался:

mvn verify 

to do so?

person khmarbaise    schedule 17.08.2012
comment
Ага, я пробовал это. Выполнение mvn verify дало вышеуказанные результаты. Теперь попробуем Аркиллиан. Надеюсь, будет проще развернуть файл ear с arquillian на Glassfish и выполнить интеграционные тесты. - person Dev2; 19.08.2012
comment
Подскажите, пожалуйста, как можно запустить экземпляр Glassfish с помощью maven в моем тестовом примере? - person Dev2; 22.08.2012
comment
Да, теперь он работает. Оказывается, проблема была в моем файле domain.xml. По умолчанию domain.xml поставляется с номерами портов с префиксом 2, который следует удалить, и встроенным Glassfish 3.1 ‹port› 8080 ‹/port› не работает, если установлен ‹configFile› (см. Этот документ) embedded-glassfish.java.net/nonav/plugindocs/3.1/stop-mojo.html < / а>. Мне просто нужно было установить порт IIOP в domain.xml на 3700 и в моем тесте Properties props = new Properties (); props.put (org.omg.CORBA.ORBInitialPort, 3700); Контекст ctx = новый начальный контекст (реквизиты); Спасибо, парни - person Dev2; 22.08.2012

Возможно другое решение для указания портов IIOP Glassfish (сначала необходимо подтвердить IP-адрес сервера и порты прослушивателя IIOP):

System.setProperty("org.omg.CORBA.ORBInitialHost", "127.0.0.1");
System.setProperty("org.omg.CORBA.ORBInitialPort", "8037");
Context ctx = new InitialContext();
person Mario Cartagena    schedule 23.11.2017