= Multiple TomEE Arquillian
:index-group: Arquillian
:jbake-type: page
:jbake-status: published

This example shows how to deploy two different applications if the need for it shows.
That sometimes happens if we need communication between two different web applications. In our
example we will deploy two applications web resources and test their content.

== Run the application:

[source, bash]
----
mvn clean test
----

This command runs the test where we have specified the two deployments we want to
test. The test deploys two applications on which we test their content
that we defined as web resource in our `createDep1()` and createDep2()` method.

== @Deployment annotation

If we want to have two different applications running in the same test it's as
simple as adding two different `@Deployment` annotated methods to our test class.

[source,java]
----
@Deployment(name = "war1", testable = false)
@TargetsContainer("tomee-1")
public static WebArchive createDep1() {
    return ShrinkWrap.create(WebArchive.class, "application1.war")
            .addAsWebResource(new StringAsset("Hello from TomEE 1"), "index.html");
}

@Deployment(name = "war2", testable = false)
@TargetsContainer("tomee-2")
public static WebArchive createDep2() {
    return ShrinkWrap.create(WebArchive.class, "application2.war")
            .addAsWebResource(new StringAsset("Hello from TomEE 2"), "index.html");
}
----

== Define `Deployment` context

For each test method we have to define on which `Deployment` context the tests
should be run. For that we use the `@OperateOnDeployment("war2")` annotation on our
test method.

[source,java]
----
@Test
@OperateOnDeployment("war2")
public void testRunningInDep2(@ArquillianResource final URL url) throws IOException {
    final String content = IO.slurp(url);
    assertEquals("Hello from TomEE 2", content);
}
----
