Arquillian JPA tutorial: Could not create new instance of class org.jboss.arquillian.test.impl.EventTestRunnerAdaptor

16,203

The pom.xml of the project has some of the profiles like arquillian-weld-ee-embedded, arquillian-glassfish-embedded, and arquillian-jbossas-managed.and none of them is active by default,so to make the Arquillian container workable,you need to make any of these profile default. check the following pom.xml

           `  <dependenies>
              <dependency>
        <groupId>org.jboss.arquillian.junit</groupId>
        <artifactId>arquillian-junit-container</artifactId>
        <scope>test</scope>
    </dependency>
    </dependencies>
<profiles>
    <profile>
        <id>arquillian-jbossas-embedded</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <dependencies>
            <dependency>
                <groupId>org.jboss.spec</groupId>
                <artifactId>jboss-javaee-6.0</artifactId>
                <version>1.0.0.Final</version>
                <type>pom</type>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.jboss.arquillian.container</groupId>
                <artifactId>arquillian-weld-ee-embedded-1.1</artifactId>
                <version>1.0.0.CR7</version>
            </dependency>
            <dependency>
                <groupId>org.jboss.weld</groupId>
                <artifactId>weld-core</artifactId>
                <version>2.1.0.Final</version>
                <scope>test</scope>
            </dependency>

            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-simple</artifactId>
                <version>1.6.4</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    </profile>
    <profile>
        <id>arquillian-jbossas-managed</id>
        <dependencies>
            <dependency>
                <groupId>org.jboss.spec</groupId>
                <artifactId>jboss-javaee-6.0</artifactId>
                <version>1.0.0.Final</version>
                <type>pom</type>
                <scope>provided</scope>
            </dependency>
            <dependency>
            <groupId>org.jboss.as</groupId>
            <artifactId>jboss-as-arquillian-container-managed</artifactId>
                <version>7.1.1.Final</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.jboss.arquillian.protocol</groupId>
                <artifactId>arquillian-protocol-servlet</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
    </profile>
</profiles>

Share:
16,203
Germano Massullo
Author by

Germano Massullo

Updated on June 24, 2022

Comments

  • Germano Massullo
    Germano Massullo about 2 years

    I finished following the JPA tutorial at http://arquillian.org/guides/testing_java_persistence/ , but when I try to run the test ("Run the Test on GlassFish" section of the guide) as JUnit I obtain the following messages in Eclipse's console:

    java.lang.RuntimeException: Could not create new instance of class org.jboss.arquillian.test.impl.EventTestRunnerAdaptor
        at org.jboss.arquillian.test.spi.SecurityActions.newInstance(SecurityActions.java:160)
        at org.jboss.arquillian.test.spi.SecurityActions.newInstance(SecurityActions.java:111)
        at org.jboss.arquillian.test.spi.SecurityActions.newInstance(SecurityActions.java:97)
        at org.jboss.arquillian.test.spi.TestRunnerAdaptorBuilder.build(TestRunnerAdaptorBuilder.java:52)
        at org.jboss.arquillian.junit.Arquillian.run(Arquillian.java:93)
        at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
        at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
    Caused by: java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
        at org.jboss.arquillian.test.spi.SecurityActions.newInstance(SecurityActions.java:156)
        ... 10 more
    Caused by: org.jboss.arquillian.container.impl.ContainerCreationException: Could not create Container glassfish-embedded
        at org.jboss.arquillian.container.impl.LocalContainerRegistry.create(LocalContainerRegistry.java:85)
        at org.jboss.arquillian.container.impl.client.container.ContainerRegistryCreator.createRegistry(ContainerRegistryCreator.java:76)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94)
        at org.jboss.arquillian.core.impl.EventContextImpl.invokeObservers(EventContextImpl.java:99)
        at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:81)
        at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:135)
        at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:115)
        at org.jboss.arquillian.core.impl.ManagerImpl.bindAndFire(ManagerImpl.java:236)
        at org.jboss.arquillian.core.impl.InstanceImpl.set(InstanceImpl.java:74)
        at org.jboss.arquillian.config.impl.extension.ConfigurationRegistrar.loadConfiguration(ConfigurationRegistrar.java:60)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94)
        at org.jboss.arquillian.core.impl.EventContextImpl.invokeObservers(EventContextImpl.java:99)
        at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:81)
        at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:135)
        at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:115)
        at org.jboss.arquillian.core.impl.ManagerImpl.start(ManagerImpl.java:261)
        at org.jboss.arquillian.test.impl.EventTestRunnerAdaptor.<init>(EventTestRunnerAdaptor.java:56)
        ... 15 more
    Caused by: java.lang.IllegalArgumentException: DeployableContainer must be specified
        at org.jboss.arquillian.core.spi.Validate.notNull(Validate.java:44)
        at org.jboss.arquillian.container.impl.ContainerImpl.<init>(ContainerImpl.java:71)
        at org.jboss.arquillian.container.impl.LocalContainerRegistry.create(LocalContainerRegistry.java:76)
        ... 39 more
    

    pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <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>org.arquillian.example</groupId>
      <artifactId>arquillian-tutorial</artifactId>
      <version>1.0-SNAPSHOT</version>
      <packaging>jar</packaging>
    
      <name>arquillian-tutorial</name>
      <url>http://maven.apache.org</url>
    
      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      </properties>
    
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.3.2</version>
            <configuration>
              <source>1.6</source>
              <target>1.6</target>
            </configuration>
          </plugin>
          <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>2.3.2</version>
          <configuration>
              <source>1.6</source>
              <target>1.6</target>
          </configuration>
          </plugin>
        </plugins>
      </build>
    
      <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.jboss.arquillian</groupId>
                <artifactId>arquillian-bom</artifactId>
                <version>1.1.1.Final</version>
                <scope>import</scope>
                <type>pom</type>
            </dependency>
        </dependencies>
    </dependencyManagement>
    
      <dependencies>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.8.1</version>
          <scope>test</scope>
        </dependency>
        <dependency>
          <groupId>org.mockito</groupId>
          <artifactId>mockito-all</artifactId>
          <version>1.8.5</version>
          <scope>test</scope>
        </dependency>
        <dependency>
          <groupId>org.hamcrest</groupId>
          <artifactId>hamcrest-integration</artifactId>
          <version>1.2.1</version>
        </dependency>
        <dependency>
          <groupId>net.avh4.util</groupId>
          <artifactId>imagecomparison</artifactId>
          <version>0.0.2</version>
          <scope>test</scope>
        </dependency>
          <dependency>
          <groupId>org.jboss.spec</groupId>
          <artifactId>jboss-javaee-6.0</artifactId>
          <version>1.0.0.Final</version>
          <type>pom</type>
          <scope>provided</scope>
        </dependency>
        <dependency>
          <groupId>org.jboss.arquillian.junit</groupId>
          <artifactId>arquillian-junit-container</artifactId>
          <scope>test</scope>
        </dependency>
        <!--<dependency>
          <groupId>org.jboss.arquillian.container</groupId>
          <artifactId>arquillian-weld-ee-embedded-1.1</artifactId>
          <version>1.0.0.CR3</version>
          <scope>test</scope>
        </dependency>
        <dependency>
          <groupId>org.jboss.weld</groupId>
          <artifactId>weld-core</artifactId>
          <version>1.1.5.Final</version>
          <scope>test</scope>
        </dependency>-->
        <dependency>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-simple</artifactId>
          <version>1.6.4</version>
          <scope>test</scope>
        </dependency>
        <dependency>
          <groupId>org.hibernate</groupId>
          <artifactId>hibernate-jpamodelgen</artifactId>
          <version>1.2.0.Final</version>
          <scope>provided</scope>
        </dependency>
      </dependencies>
        <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>
          </dependency>
          <dependency>
              <groupId>org.glassfish.main.extras</groupId>
              <artifactId>glassfish-embedded-web</artifactId>
              <version>3.1.2</version>
          </dependency>
          </dependencies>
          <build>
          <testResources>
              <testResource>
              <directory>src/test/resources</directory>
              </testResource>
              <testResource>
              <directory>src/test/resources-glassfish-embedded</directory>
              </testResource>
          </testResources>
          <plugins>
              <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-surefire-plugin</artifactId>
              <version>2.12</version>
              <configuration>
                  <systemPropertyVariables>
                  <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>
    </project>
    

    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">
                    src/test/resources-glassfish-embedded/glassfish-resources.xml
                </property>
            </configuration>
        </container>
    </arquillian>
    

    Game.java

    package org.arquillian.example;
    
    import java.io.Serializable;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.validation.constraints.NotNull;
    import javax.validation.constraints.Size;
    
    @Entity
    public class Game implements Serializable {
        private Long id;
        private String title;
    
        public Game() {}
    
        public Game(String title) {
            this.title = title;
        }
    
        @Id @GeneratedValue
        public Long getId() {
            return id;
        }
    
        public void setId(Long id) {
            this.id = id;
        }
    
        @NotNull
        @Size(min = 3, max = 50)
        public String getTitle() {
            return title;
        }
    
        public void setTitle(String title) {
            this.title = title;
        }
    
        @Override
        public String toString() {
            return "Game@" + hashCode() + "[id = " + id + "; title = " + title + "]";
        }
    }
    

    GamePersistenceTest.java

    package org.arquillian.example;
    
    
    import java.util.List;
    import javax.inject.Inject;
    import javax.persistence.EntityManager;
    import javax.persistence.PersistenceContext;
    import javax.transaction.UserTransaction;
    import org.jboss.arquillian.container.test.api.Deployment;
    import org.jboss.arquillian.junit.Arquillian;
    import org.jboss.shrinkwrap.api.Archive;
    import org.jboss.shrinkwrap.api.ShrinkWrap;
    import org.jboss.shrinkwrap.api.asset.EmptyAsset;
    import org.jboss.shrinkwrap.api.spec.WebArchive;
    import org.junit.runner.RunWith;
    import org.junit.Before;
    import org.junit.After;
    import java.util.List;
    import org.junit.Test;
    import java.util.Arrays;
    import java.util.Collection;
    import java.util.HashSet;
    import java.util.Set;
    import org.junit.Assert;
    import javax.persistence.criteria.CriteriaBuilder;
    import javax.persistence.criteria.CriteriaQuery;
    import javax.persistence.criteria.Root;
    
    
    @RunWith(Arquillian.class)
    public class GamePersistenceTest {
        @Deployment
        public static Archive<?> createDeployment() {
            return ShrinkWrap.create(WebArchive.class, "test.war")
                .addPackage(Game.class.getPackage())
                .addAsResource("test-persistence.xml", "META-INF/persistence.xml")
                .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml");
        }
    
        private static final String[] GAME_TITLES = {
            "Super Mario Brothers",
            "Mario Kart",
            "F-Zero"
        };
    
        @PersistenceContext
        EntityManager em;
    
        @Inject
        UserTransaction utx;
    
        // tests go here
    
        @Before
        public void preparePersistenceTest() throws Exception {
            clearData();
            insertData();
            startTransaction();
        }
    
        private void clearData() throws Exception {
            utx.begin();
            em.joinTransaction();
            System.out.println("Dumping old records...");
            em.createQuery("delete from Game").executeUpdate();
            utx.commit();
        }
    
        private void insertData() throws Exception {
            utx.begin();
            em.joinTransaction();
            System.out.println("Inserting records...");
            for (String title : GAME_TITLES) {
                Game game = new Game(title);
                em.persist(game);
            }
            utx.commit();
            // clear the persistence context (first-level cache)
            em.clear();
        }
    
        private void startTransaction() throws Exception {
            utx.begin();
            em.joinTransaction();
        }
        @After
        public void commitTransaction() throws Exception {
            utx.commit();
        }
    
        private static void assertContainsAllGames(Collection<Game> retrievedGames) {
            Assert.assertEquals(GAME_TITLES.length, retrievedGames.size());
            final Set<String> retrievedGameTitles = new HashSet<String>();
            for (Game game : retrievedGames) {
                System.out.println("* " + game);
                retrievedGameTitles.add(game.getTitle());
            }
            Assert.assertTrue(retrievedGameTitles.containsAll(Arrays.asList(GAME_TITLES)));
        }
    
        @Test
        public void shouldFindAllGamesUsingCriteriaApi() throws Exception {
            // given
            CriteriaBuilder builder = em.getCriteriaBuilder();
            CriteriaQuery<Game> criteria = builder.createQuery(Game.class);
    
            Root<Game> game = criteria.from(Game.class);
            criteria.select(game);
            // TIP: If you don't want to use the JPA 2 Metamodel,
            // you can change the get() method call to get("id")
            criteria.orderBy(builder.asc(game.get(Game_.id)));
            // No WHERE clause, which implies select all
    
            // when
            System.out.println("Selecting (using Criteria)...");
            List<Game> games = em.createQuery(criteria).getResultList();
    
            // then
            System.out.println("Found " + games.size() + " games (using Criteria):");
            assertContainsAllGames(games);
        }
    
    
    }
    
  • Germano Massullo
    Germano Massullo over 10 years
    where is arquillian-jbossas-embedded?
  • Charles Stevens
    Charles Stevens over 10 years
    ìf you are not using jboss ,then you can mark any other profile default,and that should work