Tips
- Starting mutiple containers conditionally
- Starting Tomcat in security mode
- How to get Tomcat 5 working with the Java 5 XML Parsers
- How to use the ZIP or TAR.GZ distributions provided by servers on a Maven2 repository
Starting multiple containers conditionally
Maven 2 / Maven 3 supports the notion of profiles which can be used with Cargo to decide for example when to run tests on a specific container. Here's how you could use the Cargo Maven 2 / Maven 3 plugin to that effect:
<project> [...] <profiles> <profile> <id>tomcat5x</id> <build> <plugins> <plugin> <groupId>org.codehaus.cargo</groupId> <artifactId>cargo-maven2-plugin</artifactId> <configuration> <container> <containerId>tomcat5x</containerId> <zipUrlInstaller> <url>http://www.apache.org/dist/jakarta/tomcat-5/v5.0.30/bin/jakarta-tomcat-5.0.30.zip</url> <downloadDir>${project.build.directory}/downloads</downloadDir> <extractDir>${project.build.directory}/extracts</extractDir> </zipUrlInstaller> </container> <configuration> <home>${project.build.directory}/tomcat5x/container</home> </configuration> </configuration> <executions> <execution> <id>start-container</id> <phase>pre-integration-test</phase> <goals> <goal>start</goal> </goals> </execution> <execution> <id>stop-container</id> <phase>post-integration-test</phase> <goals> <goal>stop</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </profile> <profile> <id>orion2x</id> <build> <plugins> <plugin> <groupId>org.codehaus.cargo</groupId> <artifactId>cargo-maven2-plugin</artifactId> <configuration> <container> <containerId>orion2x</containerId> <zipUrlInstaller> <url>http://www.orionserver.com/distributions/orion2.0.5.zip</url> <downloadDir>${project.build.directory}/downloads</downloadDir> <extractDir>${project.build.directory}/extracts</extractDir> </zipUrlInstaller> </container> <configuration> <home>${project.build.directory}/orion2x/container</home> </configuration> </configuration> <executions> <execution> <id>start-container</id> <phase>pre-integration-test</phase> <goals> <goal>start</goal> </goals> </execution> <execution> <id>stop-container</id> <phase>post-integration-test</phase> <goals> <goal>stop</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </profile> </profiles> </project>
Then to start the tomcat 5.x container you would type mvn -P tomcat5x install
. if you want to start both containers you would type mvn -P tomcat5x,orion2x install
.
If you want to define a profile as the default you can use the <activation>
element with an activation strategy. For example if you want a profile to be always on, use:
<profiles> <profile> <id>tomcat5x</id> <activation> <activeByDefault>true</activeByDefault> </activation> [...]
Starting Tomcat in security mode
Cargo supports passing system properties Passing system properties. So, to start Tomcat in security mode, you need to specify two system properties:
- java.security.manager
- java.security.policy
For instance,
[...] <plugins> [...] <plugin> <groupId>org.codehaus.cargo</groupId> <artifactId>cargo-maven2-plugin</artifactId> <configuration> <container> <containerId>tomcat5x</containerId> <home>${catalina.home}</home> [...] <systemProperties> <java.security.manager>default</java.security.manager> <java.security.policy>${catalina.home}\conf\catalina.policy</java.security.policy> </systemProperties> </container> </configuration> </plugin> [...] </plugins> [...]
How to get Tomcat 5 working with the Java 5 XML Parsers
Tip submitted by Ben P.
Imagine that you have some XML jars in the common/endorsed
folder of Tomcat and you have edited your catalina.bat
file to specify some extra JVM opts to specify the XML parser. Here's how to achieve the same using Cargo:
<plugin> <groupId>org.codehaus.cargo</groupId> <artifactId>cargo-maven2-plugin</artifactId> <configuration> <container> <containerId>tomcat5x</containerId> <home>${tomcat.home}</home> <dependencies> <dependency> <location>${tomcat.home}/common/endorsed/xalan.jar</location> </dependency> <dependency> <location>${tomcat.home}/common/endorsed/xercesImpl.jar</location> </dependency> </dependencies> <systemProperties> <javax.xml.parsers.DocumentBuilderFactory> org.apache.xerces.jaxp.DocumentBuilderFactoryImpl </javax.xml.parsers.DocumentBuilderFactory> <javax.xml.parsers.SAXParserFactory> org.apache.xerces.jaxp.SAXParserFactoryImpl </javax.xml.parsers.SAXParserFactory> </systemProperties> </container> <configuration> <type>existing</type> <home>${tomcat.home}</home> </configuration> </configuration> </plugin>
This shows how to add classpath elements to a Cargo container using the <dependencies>
element.