Arquillian and Glassfish 3.0.1 Remote
figueiredo Nov 10, 2010 7:07 AMHi,
I am still learning Arquillian and I'm trying to use it with JUnit tests on Glassfish 3.0.1 remote, but I'm having some problems. So please excuse me if I am asking a very newbie question.
I am using the basic examples from the Arquillian reference[1][2] in order to test very simple EJBs. I've also read some posts over here, like [3][4], in order to avoid some pitfalls, but I didn't find someone who's got a similar problem as me. I cannot have my test running on Glassfish's (v3.0.1) Remote container because I always get a "DeploymentException" (item (A) followed).
I am using the following (B), (C) and (D) configurations. Please, let me know if I am wrong somewhere.
Thanks in advance.
- Fabio
References
==================================
[1] http://docs.jboss.org/arquillian/reference/latest/en-US/html_single/#container.glassfish-remote-3
[2] http://docs.jboss.org/arquillian/reference/latest/en-US/html_single/#gettingstarted
[3] http://community.jboss.org/thread/158652
[4] http://community.jboss.org/message/562801
=== (A) Failure Trace
======================================
org.jboss.arquillian.impl.event.FiredEventException: org.jboss.arquillian.spi.DeploymentException: Could not deploy archive
at org.jboss.arquillian.impl.event.MapEventManager.fire(MapEventManager.java:68)
at org.jboss.arquillian.impl.context.AbstractEventContext.fire(AbstractEventContext.java:115)
at org.jboss.arquillian.impl.EventTestRunnerAdaptor.beforeClass(EventTestRunnerAdaptor.java:99)
at org.jboss.arquillian.junit.Arquillian$2.evaluate(Arquillian.java:162)
at org.jboss.arquillian.junit.Arquillian$3$1.evaluate(Arquillian.java:186)
at org.jboss.arquillian.junit.Arquillian$MultiStatementExecutor.execute(Arquillian.java:297)
at org.jboss.arquillian.junit.Arquillian$3.evaluate(Arquillian.java:182)
at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
at org.jboss.arquillian.junit.Arquillian.run(Arquillian.java:127)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49)
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: org.jboss.arquillian.spi.DeploymentException: Could not deploy archive
at org.jboss.arquillian.container.jsr88.remote_1_2.JSR88RemoteContainer.deploy(JSR88RemoteContainer.java:146)
at org.jboss.arquillian.container.glassfish.remote_3.GlassFishJSR88RemoteContainer.deploy(GlassFishJSR88RemoteContainer.java:63)
at org.jboss.arquillian.impl.handler.ContainerDeployer.callback(ContainerDeployer.java:62)
at org.jboss.arquillian.impl.handler.ContainerDeployer.callback(ContainerDeployer.java:50)
at org.jboss.arquillian.impl.event.MapEventManager.fire(MapEventManager.java:63)
... 14 more
Caused by: java.lang.IllegalStateException: error submitting remote command
at org.glassfish.deployapi.SunDeploymentManager.getTargets(SunDeploymentManager.java:170)
at org.jboss.arquillian.container.jsr88.remote_1_2.JSR88RemoteContainer.deploy(JSR88RemoteContainer.java:135)
... 18 more
Caused by: java.lang.RuntimeException: error submitting remote command
at org.glassfish.deployment.client.AbstractDeploymentFacility.listReferencedTargets(AbstractDeploymentFacility.java:725)
at org.glassfish.deployment.client.AbstractDeploymentFacility.listTargets(AbstractDeploymentFacility.java:683)
at org.glassfish.deployapi.SunDeploymentManager.getTargets(SunDeploymentManager.java:168)
... 19 more
Caused by: java.lang.RuntimeException: org.glassfish.api.admin.InvalidCommandException: Command _get-targets not found
at org.glassfish.deployment.client.RemoteDeploymentFacility$RemoteCommandRunner.run(RemoteDeploymentFacility.java:121)
at org.glassfish.deployment.client.AbstractDeploymentFacility.listReferencedTargets(AbstractDeploymentFacility.java:694)
... 21 more
Caused by: org.glassfish.api.admin.InvalidCommandException: Command _get-targets not found
at com.sun.enterprise.admin.remote.RemoteAdminCommand.fetchCommandModel(RemoteAdminCommand.java:886)
at com.sun.enterprise.admin.remote.RemoteAdminCommand.getCommandModel(RemoteAdminCommand.java:259)
at com.sun.enterprise.admin.cli.remote.RemoteCommand.prepare(RemoteCommand.java:295)
at com.sun.enterprise.admin.cli.CLICommand.execute(CLICommand.java:240)
at com.sun.enterprise.admin.cli.remote.RemoteCommand.executeAndReturnOutput(RemoteCommand.java:380)
at org.glassfish.deployment.client.RemoteDeploymentFacility$RemoteCommandRunner.run(RemoteDeploymentFacility.java:117)
... 22 more
=== (B) Arquillian
=== /src/test/resources/arquillian.xml
======================================
<?xml version="1.0"?>
<arquillian xmlns="http://jboss.com/arquillian"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:glassfish="urn:arq:org.jboss.arquillian.container.glassfish.remote_3">
<glassfish:container>
<!-- The administrative port and host the JSR-88 client should connect to. -->
<glassfish:deploymentUri>deployer:Sun:AppServer::127.0.0.1:4848</glassfish:deploymentUri>
<!-- The host of the remote server. -->
<glassfish:remoteServerAddress>127.0.0.1</glassfish:remoteServerAddress>
<!-- The HTTP port of the remote server. -->
<glassfish:remoteServerHttpPort>8080</glassfish:remoteServerHttpPort>
<!-- The JSR-88 implementation factory class. -->
<glassfish:deploymentFactoryClass>org.glassfish.deployapi.SunDeploymentFactory</glassfish:deploymentFactoryClass>
<!-- The admin username for performing JSR-88 deployments. -->
<glassfish:deploymentUsername>admin</glassfish:deploymentUsername>
<!-- The admin password for performing JSR-88 deployments.
Trying to set a empty deploymentPassword will fail. Just exclude the option if you don't have a password set.-->
<!-- <glassfish:deploymentPassword>password</glassfish:deploymentPassword> -->
<!--
<glassfish:deploymentTimeoutSeconds>10</glassfish:deploymentTimeoutSeconds>
-->
</glassfish:container>
</arquillian>
=== (C) Maven's Project Object Model
=== /pom.xml
=====================================
<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>projectname.access</groupId>
<artifactId>ProjectName-Access</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>ProjectName-Access EJB</name>
<properties>
<endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<repositories>
<repository>
<id>jboss-public-repository-group</id>
<name>JBoss Public Maven Repository Group</name>
<url>https://repository.jboss.org/nexus/content/groups/public</url>
</repository>
<repository>
<id>download.java.net</id>
<name>Java.net Maven Repository</name>
<url>http://download.java.net/maven/2</url>
</repository>
<repository>
<id>Glassfish</id>
<name>Glassfish Repository</name>
<url>http://download.java.net/maven/glassfish/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.ejb</artifactId>
<version>3.1-b21</version>
<type>jar</type>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.servlet</artifactId>
<version>3.1-b21</version>
<type>jar</type>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.enterprise</groupId>
<artifactId>cdi-api</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.jboss.arquillian</groupId>
<artifactId>arquillian-junit</artifactId>
<version>1.0.0.Alpha4.SP2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jboss.arquillian.container</groupId>
<artifactId>arquillian-glassfish-remote-3</artifactId>
<version>1.0.0.Alpha4.SP1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.glassfish.deployment</groupId>
<artifactId>deployment-client</artifactId>
<version>3.1-b21</version>
<scope>test</scope>
</dependency>
</dependencies>
<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>
<compilerArguments>
<endorseddirs>${endorsed.dir}</endorseddirs>
</compilerArguments>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ejb-plugin</artifactId>
<version>2.3</version>
<configuration>
<ejbVersion>3.1</ejbVersion>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.1</version>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<outputDirectory>${endorsed.dir}</outputDirectory>
<silent>true</silent>
<artifactItems>
<artifactItem>
<groupId>javax</groupId>
<artifactId>javaee-endorsed-api</artifactId>
<version>6.0</version>
<type>jar</type>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
<finalName>ProjectName-Access</finalName>
</build>
</project>
=== (D) Test Class
=====================================
package projectname.access.sessionfacade;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import javax.ejb.EJB;
import org.jboss.arquillian.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.junit.Test;
import org.junit.runner.RunWith;
@RunWith(Arquillian.class)
public class ArquilianTest {
@EJB
SessionFacade sessionFacadeEJB;
/* Let's try out Arquillian! We need to create a deployment package which then will be deployed by Arquillian on the target container (in our case Glassfish 3.0.1 Remote). */
@Deployment
public static JavaArchive createDeployment() {
return ShrinkWrap.create(JavaArchive.class, "test.jar").addClass(SessionFacade.class);
}
@Test
public void testeComportamento() throws Exception {
String ejbReturnedValue = sessionFacadeEJB.getName();
assertNotNull(ejbReturnedValue);
String expectedName = "name";
assertTrue(ejbReturnedValue.endsWith(expectedName));
}
}