2

J'essaie de faire un test avec Arquillian dans un projet Maven mais dans chaque exécution du test qui me donne l'exception suivante:Arquillian: Impossible de configurer GlassFish embarqué Runtime

Grave: Exception in command execution : java.lang.NoClassDefFoundError: javax/validation/ParameterNameProvider 
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.855 sec <<< FAILURE! 
Tests in error: 
es.costa.service.test.magali.PersonaFactorTest: Could not setup GlassFish Embedded Runtime 
Caused by: org.glassfish.embeddable.GlassFishException: PlainTextActionReporterFAILUREjava.lang.NoClassDefFoundError: javax/validation/ParameterNameProviderjava.lang.NoClassDefFoundError: javax/validation/ParameterNameProvider 
java.lang.RuntimeException: Could not setup GlassFish Embedded Runtime 

C'est la pom .xml:

<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>org.jboss.arquillian</groupId> 
      <artifactId>arquillian-bom</artifactId> 
      <version>1.0.3.Final</version> 
      <scope>import</scope> 
      <type>pom</type> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 
<dependencies> 
    <dependency> 
     <groupId>org.jboss.ejb3</groupId> 
     <artifactId>jboss-ejb3-ext-api</artifactId> 
     <version>2.1.0</version> 
    </dependency> 
    <dependency> 
     <groupId>es.costa</groupId> 
     <artifactId>costa-interfaces</artifactId> 
     <version>${project.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <scope>test</scope> 
    </dependency> 

    <dependency> 
     <groupId>org.jboss.arquillian.junit</groupId> 
     <artifactId>arquillian-junit-container</artifactId> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-validator</artifactId> 
     <version>5.1.3.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-validator-annotation-processor</artifactId> 
     <version>5.0.3.Final</version> 
    </dependency> 
</dependencies> 
<build> 
    <sourceDirectory>ejbModule/src/main/java</sourceDirectory> 
    <testSourceDirectory>ejbModule/src/test/java</testSourceDirectory> 
    <resources> 
     <resource> 
      <directory>ejbModule/src/main/resources</directory> 
      <excludes> 
       <exclude>**/*.java</exclude> 
      </excludes> 
     </resource> 
    </resources> 
    <testResources> 
     <testResource> 
      <directory>ejbModule/src/test/resources</directory> 
     </testResource> 
    </testResources> 
    <plugins> 
     <plugin> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>${maven-compiler-plugin.version}</version> 
      <configuration> 
       <source>1.7</source> 
       <target>1.7</target> 
       <encoding>Cp1252</encoding> 
      </configuration> 
     </plugin> 
     <plugin> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <version>2.12</version> 
     </plugin> 
     <plugin> 
      <artifactId>maven-ejb-plugin</artifactId> 
      <version>${maven-ejb-plugin.version}</version> 
      <configuration> 
       <ejbVersion>${ejb.version}</ejbVersion> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-shade-plugin</artifactId> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
         <goal>shade</goal> 
        </goals> 
       </execution> 
      </executions> 
      <configuration> 
       <artifactSet> 
        <includes> 
         <include>es.costa</include> 
        </includes> 
       </artifactSet> 
       <finalName>${artifactId}-${project.version}</finalName> 
      </configuration> 
     </plugin> 


     <plugin> 
      <groupId>org.jboss.as.plugins</groupId> 
      <artifactId>jboss-as-maven-plugin</artifactId> 
      <configuration> 
       <filename>${artifactId}-${project.version}.jar</filename> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 
<profiles> 
    <profile> 
     <id>dev</id> 
     <activation> 
      <activeByDefault>true</activeByDefault> 
     </activation> 
     <dependencies> 
      <dependency> 
       <groupId>org.hibernate</groupId> 
       <artifactId>hibernate-entitymanager</artifactId> 
       <scope>test</scope> 
      </dependency> 
      <dependency> 
       <groupId>javax.persistence</groupId> 
       <artifactId>persistence-api</artifactId> 
       <version>${javax-persistance.version}</version> 
       <scope>test</scope> 
      </dependency> 
     </dependencies> 
    </profile> 
    <profile> 
     <id>jenkins</id> 
     <dependencies> 
      <dependency> 
       <groupId>org.hibernate</groupId> 
       <artifactId>hibernate-entitymanager</artifactId> 
       <scope>test</scope> 
      </dependency> 
      <dependency> 
       <groupId>javax.persistence</groupId> 
       <artifactId>persistence-api</artifactId> 
       <version>${javax-persistance.version}</version> 
       <scope>test</scope> 
      </dependency> 
     </dependencies> 
    </profile> 
    <profile> 
     <id>arquillian-glassfish-embedded</id> 
     <activation> 
      <activeByDefault>true</activeByDefault> 
     </activation> 
     <dependencies> 
      <dependency> 
       <groupId>org.jboss.arquillian.container</groupId> 
       <artifactId>arquillian-glassfish-embedded-3.1</artifactId> 
       <version>1.0.0.CR3</version> 
       <scope>test</scope> 
      </dependency> 
      <dependency> 
       <groupId>org.glassfish.main.extras</groupId> 
       <artifactId>glassfish-embedded-all</artifactId> 
       <version>3.1.2</version> 
       <scope>provided</scope> 
      </dependency> 
      <dependency> 
       <groupId>com.h2database</groupId> 
       <artifactId>h2</artifactId> 
       <version>1.3.166</version> 
       <scope>test</scope> 
      </dependency> 
     </dependencies> 
     <build> 
      <testResources> 
       <testResource> 
        <directory>ejbModule/src/test/resources</directory> 
       </testResource> 
       <testResource> 
        <directory>ejbModule/src/test/resources-glassfish-embedded</directory> 
       </testResource> 
      </testResources> 
      <plugins> 
       <plugin> 
        <artifactId>maven-surefire-plugin</artifactId> 
        <version>2.12</version> 
        <configuration> 
         <systemPropertyVariables> 
          <arquillian.launch>glassfish-embedded</arquillian.launch> 
          <java.util.logging.config.file> 
           ${project.build.testOutputDirectory}/logging.properties 
          </java.util.logging.config.file> 
          <derby.stream.error.file> 
           ${project.build.directory}/derby.log 
          </derby.stream.error.file> 
         </systemPropertyVariables> 
        </configuration> 
       </plugin> 
      </plugins> 
     </build> 
    </profile> 
</profiles> 

c'est le arquillian.xml

<?xml version="1.0" encoding="UTF-8"?> 
<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="glassfish-embedded" default="true"> 
    <configuration> 
     <property name="resourcesXml"> 
      ejbModule/src/test/resources-glassfish-embedded/glassfish-resources.xml 
     </property> 
    </configuration> 
</container>  

C'est GlassFish-resources.xml

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE resources PUBLIC 
"-//GlassFish.org//DTD GlassFish Application Server 3.1 Resource Definitions//EN" 
"http://glassfish.org/dtds/glassfish-resources_1_5.dtd"> 
<resources> 
<jdbc-resource pool-name="ArquillianEmbeddedH2Pool" 
    jndi-name="jdbc/arquillian"/> 
<jdbc-connection-pool name="ArquillianEmbeddedH2Pool" 
    res-type="javax.sql.DataSource" 
    datasource-classname="org.h2.jdbcx.JdbcDataSource"> 
    <property name="user" value="sa"/> 
    <property name="password" value=""/> 
    <property name="url" value="jdbc:h2:file:target/databases/h2/db"/> 
</jdbc-connection-pool>  

Répondre

0

Il y a beaucoup de problèmes avec vos fichiers que je peux voir, sans même essayer votre code. La plupart des étapes et des configurations nécessaires sont manquantes dans vos fichiers.

  1. Vous n'avez pas la référence au conteneur Arquillian de votre pom.xml

    <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-surefire-plugin</artifactId>      
        <configuration> 
         <systemPropertyVariables>        
          <arquillian.launch>glassfish-embedded</arquillian.launch> 
         </systemPropertyVariables> 
        </configuration> 
    </plugin> 
    
  2. Vous devez vous assurer que les propriétés du conteneur GlassFish sont correctement spécifiés dans le arquillian.xml. Exemple:

    <property name="resourcesXml">src/test/resources/domain.xml</property> 
    <property name="glassFishHome">${glassfish.managed.home}</property> 
    

    Vous pouvez obtenir la liste complète des propriétés à https://docs.jboss.org/author/display/ARQ/GlassFish+3.1+-+Embedded

  3. Portez une attention particulière si vous spécifiez glassfish-resources.xml ou domain.xml dans le resourcesXml attrbiute. Généralement, vous pouvez avoir le glassfish-resources.xml inclus dans la guerre d'application.

Je vous suggère de se référer à:

  1. https://github.com/arquillian/arquillian-examples
  2. http://arquillian.org/guides/getting_started/
+0

d'abord vous remercier d'avoir à répondre à mon message: 1) Je ne qu'entendez-vous par là? 2) Les propriétés du conteneur glassfish sont correctement spécifiées dans l'arquillian.xml – TinyOS

+0

Explication du point 1: In pom.xml, le conteneur arquillian doit savoir quel conteneur utiliser, c'est-à-dire glassfish, jboss, etc. Il doit aller à arquillian.xml et lire les propriétés du conteneur. Cette étape a activé ce lien. – KDK

+0

J'ai ajouté les modifications comme vous l'avez dit mais cela me donne la même erreur et je change de lieu de fichiers: 'glassfish-resources.xml' et' test-persistence.xml' et 'logging.properties' dans ejbModule/src/dossier source test/resources-glassfish-embedded – TinyOS

0

i enlevé le bloc de code:

<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-validator</artifactId> 
    <version>5.1.3.Final</version> 
</dependency> 
<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-validator-annotation-processor</artifactId> 
    <version>5.0.3.Final</version> 
</dependency> 

Et je pense qu'il a résolu le problème m, mais maintenant j'ai un autre message d'erreur:

ArquillianServletRunner not found. Could not determine ContextRoot from ProtocolMetadata, please contact DeployableContainer developer. 
+1

Je l'ai fait: '.... pot JavaArchive = ShrinkWrap.create (JavaArchive.class, "es-costa- ") Servi .addPackage (PersonFactory.class.getPackage()) .addPackage (IPersonFactoryLocal.class .getPackage()) .addAsManifestResource ("test-persistence.xml", "META-INF/persistence.xml") .addAsManifestResource ("jbossas-ds.xml") .addAsManifestResource (EmptyAsset.INSTANCE, "beans. xml "); ... ' – TinyOS

+0

et maintenant j'ai le test passé avec succès mais quand j'essaie d'injecter mon ejb en utilisant dans la méthode de test un systeme.out.println (IjectedEJB.getMessage); ça me donne ça: 'shouldFindAllGamesUsingJpqlQuery (es.costa.service.all.test.opa.IjectedEJBTest)' – TinyOS