= 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);
}
----