Интеграционные тесты с maven2 отказоустойчивой и встроенной стеклянной рыбой
Я создал новый проект, который будет запускать интеграционный тест только с
- Maven-уха плагин
- Maven-безотказный-плагин
- Maven встраиваемый-GlassFish-плагин
Когда я устанавливаю упаковку на ear, файл ear создается, Glassfish запускается, но тесты игнорируются, и я получаю следующее сообщение
[failsafe: интеграция-тест] Нет тестов для запуска.
а стеклянная рыба не работает
[Погруженного GlassFish: Undeploy]
17.08.2012 10:08:17 PluginUtil doUndeploy
ИНФОРМАЦИЯ: Deployer = com.sun.enterprise.admin.cli.embeddable.DeployerImpl@105f0f87
17.08.2012 10:08:17 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
выполнено: нет
at sun.reflect.GeneratedConstructorAccessor27.newInstance(неизвестный источник)
а стеклянная рыбка не заводится
Я знаю, что это связано с жизненным циклом Maven, так как он не позволяет мне создавать файл ear, запускать встроенный сервер glassfish и запускать интеграционные тесты в том же проекте.
Может кто-нибудь предложить мне решение? Я пытаюсь создать файл ear только с помощью проекта EJB и бизнес-сущностей и развернуть его на встроенном сервере glassfish для запуска интеграционного теста с помощью maven-failsafe-plugin вместо развертывания файла ear, созданного родительским pom.xml, который добавляет Пользовательский интерфейс и другие проекты в файл ear.
Вот мой файл 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>
3 ответа
Да, это работает сейчас. Оказывается, проблема была с моим файлом domain.xml. Домен по умолчанию domain.xml поставляется с номерами портов с префиксом 2, которые должны быть удалены, а во встроенном Glassfish 3.1 <порт> 8080 port> не работает, если установлен
Мне просто нужно было установить порт IIOP в domain.xml на 3700 и в моем тесте
Properties props = new Properties();
props.put("org.omg.CORBA.ORBInitialPort", "3700");
Context ctx = new InitialContext(props);
Спасибо, парни
Возможно другое решение для указания портов 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();
Вы можете сделать упаковку и запуск стеклянной рыбы в один вызов.
ты пытался:
mvn verify
сделать это?