2 Replies Latest reply on Jul 24, 2014 5:43 PM by savvas.andreas

    @Inject does not work

    savvas.andreas

      Hi There,

       

      I am trying to give arquillian a try by applying some very simple scenario but I just can't get it to work!

       

      I have created a project in JBDS using forge (which is brilliant by the way) and have ended up with a simple maven project whose structure is the following:

       

      Under src/main/resources/ I have:

      -- META-INF

          |-- beans.xml

          |-- persistence.xml

          `-- validation.xml

       

      with beans.xml:

       

      <beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

          xsi:schemaLocation="

            http://java.sun.com/xml/ns/javaee

            http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">

      </beans>

       

      persistence.xml:

       

      <?xml version="1.0" encoding="UTF-8" standalone="no"?>

      <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">

        <persistence-unit name="forge-default" transaction-type="JTA">

          <description>Forge Persistence Unit</description>

          <provider>org.hibernate.ejb.HibernatePersistence</provider>

          <jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source>

          <exclude-unlisted-classes>false</exclude-unlisted-classes>

          <properties>

            <property name="hibernate.hbm2ddl.auto" value="update"/>

            <property name="hibernate.show_sql" value="true"/>

            <property name="hibernate.format_sql" value="true"/>

            <property name="hibernate.transaction.flush_before_completion" value="true"/>

          </properties>

        </persistence-unit>

      </persistence>

       

      And validation.xml being:

       

      <?xml version="1.0" encoding="UTF-8" standalone="no"?>

      <validation-config xmlns="http://jboss.org/xml/ns/javax/validation/configuration"

                          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

        <default-provider>org.hibernate.validator.HibernateValidator</default-provider>

      </validation-config>

       

      Now, I define a simple class SomeService which has the following content:

       

      package uk.co.cos.sandbox.ci.service;

       

      import javax.ejb.Stateless;

       

      @Stateless

      public class SomeService {

       

          public void someMethod() {

          }

      }

       

      And now I try to write an arquillian test like:

       

      package uk.co.cos.sandbox.ci.service;

       

      import javax.inject.Inject;

       

      import org.jboss.arquillian.container.test.api.Deployment;

      import org.jboss.arquillian.junit.Arquillian;

      import org.jboss.arquillian.transaction.api.annotation.TransactionMode;

      import org.jboss.arquillian.transaction.api.annotation.Transactional;

      import org.jboss.shrinkwrap.api.ShrinkWrap;

      import org.jboss.shrinkwrap.api.asset.EmptyAsset;

      import org.jboss.shrinkwrap.api.spec.WebArchive;

      import org.junit.Assert;

      import org.junit.Test;

      import org.junit.runner.RunWith;

       

      @Transactional(TransactionMode.COMMIT)

      @RunWith(Arquillian.class)

      public class SomeServiceTest {

       

          @Inject

          private SomeService someService;

       

          @Deployment

          public static WebArchive deploy() {

              WebArchive war = ShrinkWrap.create(WebArchive.class)

                      .addClass(SomeService.class).addClass(SomeServiceTest.class)

                      .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");

              return war;

          }

       

          @Test

          public void someServiceNotNull() {

              Assert.assertNotNull(someService);

          }

      }

       

      But someService is always null.. (so the test method fails).

       

      In addition, my arquillian.xml under src/test/resources has the following content:

       

      <?xml version="1.0" encoding="UTF-8" standalone="no"?>

      <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="jbossas-remote-7"/>

      </arquillian>

       

      My pom.xml has the following content:

       

      <?xml version="1.0" encoding="UTF-8" standalone="no"?>

      <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

        <modelVersion>4.0.0</modelVersion>

        <groupId>uk.co.cos.sandbox.ci</groupId>

        <artifactId>myApp</artifactId>

        <version>1.0.0-SNAPSHOT</version>

        <packaging>war</packaging>

        <properties>

          <version.junit>4.11</version.junit>

          <version.arquillian_core>1.1.1.Final</version.arquillian_core>

        </properties>

        <dependencyManagement>

          <dependencies>

            <dependency>

              <groupId>org.jboss.spec</groupId>

              <artifactId>jboss-javaee-6.0</artifactId>

              <version>3.0.2.Final</version>

              <type>pom</type>

              <scope>import</scope>

            </dependency>

            <dependency>

              <groupId>org.hibernate</groupId>

              <artifactId>hibernate-validator</artifactId>

              <version>5.1.1.Final</version>

              <scope>provided</scope>

            </dependency>

            <dependency>

              <groupId>org.jboss.arquillian</groupId>

              <artifactId>arquillian-bom</artifactId>

              <version>${version.arquillian_core}</version>

              <type>pom</type>

              <scope>import</scope>

            </dependency>

            <dependency>

              <groupId>org.jboss.arquillian.extension</groupId>

              <artifactId>arquillian-persistence-impl</artifactId>

              <version>1.0.0.Alpha6</version>

            </dependency>

          </dependencies>   

        </dependencyManagement>

        <dependencies>

          <dependency>

            <groupId>org.hibernate.javax.persistence</groupId>

            <artifactId>hibernate-jpa-2.0-api</artifactId>

            <scope>provided</scope>

          </dependency>

          <dependency>

            <groupId>javax.validation</groupId>

            <artifactId>validation-api</artifactId>

            <scope>provided</scope>

          </dependency>

          <dependency>

            <groupId>org.hibernate</groupId>

            <artifactId>hibernate-validator</artifactId>

            <scope>provided</scope>

          </dependency>

          <dependency>

            <groupId>org.jboss.spec.javax.ejb</groupId>

            <artifactId>jboss-ejb-api_3.1_spec</artifactId>

            <scope>provided</scope>

          </dependency>

          <dependency>

            <groupId>javax.enterprise</groupId>

            <artifactId>cdi-api</artifactId>

            <scope>provided</scope>

          </dependency>

          <dependency>

            <groupId>org.jboss.spec.javax.annotation</groupId>

            <artifactId>jboss-annotations-api_1.1_spec</artifactId>

            <scope>provided</scope>

          </dependency>

          <dependency>

            <groupId>org.jboss.spec.javax.servlet</groupId>

            <artifactId>jboss-servlet-api_3.0_spec</artifactId>

            <scope>provided</scope>

          </dependency>

          <dependency>

            <groupId>org.jboss.spec.javax.faces</groupId>

            <artifactId>jboss-jsf-api_2.1_spec</artifactId>

            <scope>provided</scope>

          </dependency>

          <dependency>

            <groupId>junit</groupId>

            <artifactId>junit</artifactId>

            <version>${version.junit}</version>

            <scope>test</scope>

          </dependency>

          <dependency>

            <groupId>org.jboss.arquillian.junit</groupId>

            <artifactId>arquillian-junit-container</artifactId>

            <scope>test</scope>

          </dependency>

          <dependency>

              <groupId>org.jboss.arquillian.extension</groupId>

              <artifactId>arquillian-persistence-impl</artifactId>

              <scope>test</scope>

            </dependency>

            <dependency>

              <groupId>org.jboss.forge.descriptors</groupId>

              <artifactId>javaee-descriptors-api</artifactId>

              <version>0.0.1.Final</version>

          </dependency>

        </dependencies>

        <repositories>

          <repository>

            <id>JBOSS_NEXUS</id>

            <url>http://repository.jboss.org/nexus/content/groups/public</url>

          </repository>

        </repositories>

        <build>

          <finalName>myApp</finalName>

          <plugins>

            <plugin>

              <artifactId>maven-compiler-plugin</artifactId>

              <version>3.1</version>

              <configuration>

                <source>1.7</source>

                <target>1.7</target>

                <encoding>UTF-8</encoding>

              </configuration>

            </plugin>

            <plugin>

              <artifactId>maven-war-plugin</artifactId>

              <version>2.4</version>

              <configuration>

                <failOnMissingWebXml>false</failOnMissingWebXml>

              </configuration>

            </plugin>

          </plugins>

        </build>

        <profiles>

          <profile>

            <id>arquillian-jbossas-remote-7</id>

            <build>

              <plugins>

                <plugin>

                  <artifactId>maven-surefire-plugin</artifactId>

                  <version>2.14.1</version>

                  <configuration>

                    <systemPropertyVariables>

                      <arquillian.launch>jbossas-remote-7</arquillian.launch>

                    </systemPropertyVariables>

                  </configuration>

                </plugin>

              </plugins>

            </build>

            <dependencies>

              <dependency>

                <groupId>org.jboss.as</groupId>

                <artifactId>jboss-as-arquillian-container-remote</artifactId>

                <version>7.1.1.Final</version>

              </dependency>

            </dependencies>

          </profile>

        <profile>

      <!-- When built in OpenShift the openshift profile will be used when invoking mvn. -->

      <!-- Use this profile for any OpenShift specific customization your app will need. -->

      <!-- By default that is to put the resulting archive into the deployments folder. -->

      <!-- http://maven.apache.org/guides/mini/guide-building-for-different-environments.html -->

      <id>openshift</id>

      <build>

         <finalName>myApp</finalName>

         <plugins>

           <plugin>

             <artifactId>maven-war-plugin</artifactId>

             <version>2.2</version>

             <configuration>

               <outputDirectory>deployments</outputDirectory>

               <warName>ROOT</warName>

             </configuration>

           </plugin>

         </plugins>

      </build>

      </profile>

          </profiles>

      </project>

       

       

      And I have installed JBoss AS7 locally (inside the target directory) using forge and started the server again using forge (so, I've gone for the "remote-server" scenario). Finally, I have also successfully created a management user through add-user.sh and have been able to access the browser interface.

       

      Any ideas why arquillian is not injecting my test with my service? Have I missed something in my setup?

       

      Thanks,

      Savvas