| = TomEE and Arquillian |
| :index-group: Arquillian |
| :jbake-date: 2018-12-05 |
| :jbake-type: page |
| :jbake-status: published |
| |
| |
| Check out the link:arquillian-getting-started.html[Getting started] page |
| if you are not at all familiar with Arquillian. |
| |
| All the Arquillian Adapters for TomEE support the following |
| configuration options in the *src/test/resources/arquillian.xml*: |
| |
| [source,xml] |
| ---- |
| <container qualifier="tomee" default="true"> |
| <configuration> |
| <property name="httpPort">-1</property> |
| <property name="stopPort">-1</property> |
| <!--Optional Container Properties--> |
| <property name="properties"> |
| aproperty=something |
| </property> |
| <!--Optional Remote Adapter Deployer Properties |
| <property name="deployerProperties"> |
| aproperty=something |
| </property> |
| --> |
| </configuration> |
| </container> |
| ---- |
| |
| The above can also be set as system properties rather than via the |
| *src/test/resources/arquillian.xml* file. |
| |
| [source,xml] |
| ---- |
| <build> |
| <plugins> |
| <plugin> |
| <groupId>org.apache.maven.plugins</groupId> |
| <artifactId>maven-surefire-plugin</artifactId> |
| <configuration> |
| <systemPropertyVariables> |
| <tomee.httpPort>-1</tomee.httpPort> |
| <tomee.stopPort>-1</tomee.stopPort> |
| </systemPropertyVariables> |
| </configuration> |
| </plugin> |
| </plugins> |
| </build> |
| ---- |
| |
| When a port is set to -1, a random port will be chosen. This is key to |
| avoiding port conflicts on CI systems or for just plain clean testing. |
| |
| The TomEE Arquillian adapters will export the actual port chosen back as |
| a system property using the same name. The test case can use the |
| property to retrieve the port and contact the server. |
| |
| [source,java] |
| ---- |
| URL url = new URL("http://localhost:" + System.getProperty("tomee.httpPort"); |
| // use the URL to connect to the server |
| ---- |
| |
| If that property returns null |
| |
| When you are actually using a test on the client side, you can use |
| instead |
| |
| [source,java] |
| ---- |
| import org.jboss.arquillian.test.api.ArquillianResource; |
| ... |
| @ArquillianResource private URL url; |
| ---- |
| |
| The URL will get injected by Arquillian. Be careful, that injection only |
| works if your are on the client side (it does not make sense in the |
| server side). So, if for a specific need to need it, just use the system |
| property. |
| |
| == TomEE Embedded Adapter |
| |
| The TomEE Embedded Adapter will boot TomEE right inside the test case |
| itself resulting in one JVM running both the application and the test |
| case. This is generally much faster than the TomEE Remote Adapter and |
| great for development. That said, it is strongly recommended to also run |
| all tests in a Continuous Integration system using the TomEE Remote |
| Adapter. |
| |
| To use the TomEE Embedded Arquillian Adapter, simply add these Maven |
| dependencies to your Maven pom.xml: |
| |
| [source,xml] |
| ---- |
| <dependency> |
| <groupId>org.apache.tomee</groupId> |
| <artifactId>arquillian-tomee-embedded</artifactId> |
| <version>8.0.4</version> <!--Current version--> |
| </dependency> |
| <dependency> |
| <groupId>org.apache.tomee</groupId> |
| <artifactId>tomee-embedded</artifactId> |
| <version>8.0.4</version> |
| </dependency> |
| <!--Required for WebServices and RESTful WebServices--> |
| <dependency> |
| <groupId>org.apache.tomee</groupId> |
| <artifactId>tomee-webservices</artifactId> |
| <version>8.0.4</version> |
| </dependency> |
| <dependency> |
| <groupId>org.apache.tomee</groupId> |
| <artifactId>tomee-jaxrs</artifactId> |
| <version>8.0.4</version> |
| </dependency> |
| ---- |
| |
| As mentioned above the Embedded Adapter has the following properties |
| which can be specified in the *src/test/resources/arquillian.xml* file: |
| |
| * `httpPort` |
| * `stopPort` |
| * `properties` (System properties for container) |
| |
| Or alternatively as System properties, possibly shared with other TomEE |
| Arquillian Adapters: |
| |
| * `tomee.httpPort` |
| * `tomee.stopPort` |
| |
| Or more specifically as a System properties only applicable to the |
| Embedded Adapter: |
| |
| * `tomee.embedded.httpPort` |
| * `tomee.embedded.stopPort` |
| |
| == TomEE Remote Adapter |
| |
| The TomEE Remote Adapter will unzip and setup a TomEE or TomEE Plus |
| distribution. Once setup, the server will execute in a separate process. |
| This will be slower, but with the added benefit it is 100% match with |
| the production system environment. |
| |
| On a local machine clients can get the remote server port using the |
| following System property: |
| |
| [source,java] |
| ---- |
| final String port = System.getProperty("server.http.port"); |
| ---- |
| |
| The following shows a typical configuration for testing against TomEE |
| (webprofile version). The same can be done against TomEE+ by changing |
| `<tomee.classifier>webprofile</tomee.classifier>` to |
| `<tomee.classifier>plus</tomee.classifier>` |
| |
| [source,xml] |
| ---- |
| <properties> |
| <tomee.version>8.0.4</tomee.version> |
| <tomee.classifier>webprofile</tomee.classifier> |
| </properties> |
| <build> |
| <plugins> |
| <plugin> |
| <groupId>org.apache.maven.plugins</groupId> |
| <artifactId>maven-surefire-plugin</artifactId> |
| <configuration> |
| <systemPropertyVariables> |
| <tomee.classifier>${tomee.classifier}</tomee.classifier> |
| <tomee.version>${tomee.version}</tomee.version> |
| </systemPropertyVariables> |
| </configuration> |
| </plugin> |
| </plugins> |
| </build> |
| <dependencies> |
| <dependency> |
| <groupId>org.apache.tomee</groupId> |
| <artifactId>arquillian-tomee-remote</artifactId> |
| <version>${tomee.version}</version> |
| </dependency> |
| <dependency> |
| <groupId>org.apache.tomee</groupId> |
| <artifactId>apache-tomee</artifactId> |
| <version>${tomee.version}</version> |
| <classifier>${tomee.classifier}</classifier> |
| <type>zip</type> |
| </dependency> |
| </dependencies> |
| ---- |
| |
| The Remote Adapter has the following properties which can be specified |
| in the *src/test/resources/arquillian.xml* file: |
| |
| * `httpPort` |
| * `stopPort` |
| * `version` |
| * `classifier` (Must be either `webprofile` or `plus`) |
| * `properties` (System properties for container) |
| * `deployerProperties` (Sent to Deployer) |
| |
| Or alternatively as System properties, possibly shared with other TomEE |
| Arquillian Adapters: |
| |
| * `tomee.httpPort` |
| * `tomee.stopPort` |
| * `tomee.version` |
| * `tomee.classifier` |
| |
| Or more specifically as a System properties only applicable to the |
| Remote Adapter: |
| |
| * `tomee.remote.httpPort` |
| * `tomee.remote.stopPort` |
| * `tomee.remote.version` |
| * `tomee.remote.classifier` |
| |
| == Maven Profiles |
| |
| Setting up both adapters is quite easy via Maven profiles. Here the |
| default adapter is the Embedded Adapter, the Remote Adapter will run |
| with `-Ptomee-webprofile-remote` specified as a `mvn` command argument. |
| |
| [source,xml] |
| ---- |
| <profiles> |
| |
| <profile> |
| <id>tomee-embedded</id> |
| <activation> |
| <activeByDefault>true</activeByDefault> |
| </activation> |
| <dependencies> |
| <dependency> |
| <groupId>org.apache.tomee</groupId> |
| <artifactId>arquillian-tomee-embedded</artifactId> |
| <version>8.0.4</version> |
| </dependency> |
| </dependencies> |
| </profile> |
| |
| <profile> |
| <id>tomee-webprofile-remote</id> |
| <properties> |
| <tomee.version>8.0.4</tomee.version> |
| <tomee.classifier>webprofile</tomee.classifier> |
| </properties> |
| <build> |
| <plugins> |
| <plugin> |
| <groupId>org.apache.maven.plugins</groupId> |
| <artifactId>maven-surefire-plugin</artifactId> |
| <configuration> |
| <systemPropertyVariables> |
| <tomee.classifier>${tomee.classifier}</tomee.classifier> |
| <tomee.version>${tomee.version}</tomee.version> |
| </systemPropertyVariables> |
| </configuration> |
| </plugin> |
| </plugins> |
| </build> |
| <dependencies> |
| <dependency> |
| <groupId>org.apache.tomee</groupId> |
| <artifactId>arquillian-tomee-remote</artifactId> |
| <version>${tomee.version}</version> |
| </dependency> |
| <dependency> |
| <groupId>org.apache.tomee</groupId> |
| <artifactId>apache-tomee</artifactId> |
| <version>${tomee.version}</version> |
| <classifier>${tomee.classifier}</classifier> |
| <type>zip</type> |
| </dependency> |
| </dependencies> |
| </profile> |
| |
| <profile> |
| <id>tomee-plus-remote</id> |
| <properties> |
| <tomee.version>8.0.4</tomee.version> |
| <tomee.classifier>plus</tomee.classifier> |
| </properties> |
| <build> |
| <plugins> |
| <plugin> |
| <groupId>org.apache.maven.plugins</groupId> |
| <artifactId>maven-surefire-plugin</artifactId> |
| <configuration> |
| <systemPropertyVariables> |
| <tomee.classifier>${tomee.classifier}</tomee.classifier> |
| <tomee.version>${tomee.version}</tomee.version> |
| </systemPropertyVariables> |
| </configuration> |
| </plugin> |
| </plugins> |
| </build> |
| <dependencies> |
| <dependency> |
| <groupId>org.apache.tomee</groupId> |
| <artifactId>arquillian-tomee-remote</artifactId> |
| <version>${tomee.version}</version> |
| </dependency> |
| <dependency> |
| <groupId>org.apache.tomee</groupId> |
| <artifactId>apache-tomee</artifactId> |
| <version>${tomee.version}</version> |
| <classifier>${tomee.classifier}</classifier> |
| <type>zip</type> |
| </dependency> |
| </dependencies> |
| </profile> |
| |
| </profiles> |
| ---- |