HomeDocumentation > User's guide > Migrating to Apache Geronimo > Best Practices Tomcat to Geronimo Migration
{scrollbar}

Tomcat as we all know is a Web Container available with Apache family of products. It implements Java Servlet 2.5 API and Java Server Pages 2.1 API. Apache Geronimo which is a Java EE5 certified application server which Apache Derby, Apache Active MQ, Apache AXIS, Apache Tomcat etc pre-integrated. As a result while working with Geronimo you will be working with same Tomcat engine as the standalone version of Tomcat. However there are some differences which we will discuss in upcoming sections

Implementation Analysis

While working with Geronimo you will be working with same Tomcat as the standalone Tomcat. This section will enlist the basic differences/similarities between Geronimo and Tomcat

  1. Both implements servlet 2.5 and JSP 2.1 API's
  2. JNDI has to be configure manually in server.xml for Tomcat whereas in Geronimo,JNDI has access to all the object references managed by geronimo kernel
  3. JMS is configured manually in server.xml for Tomcat whereas in Geronimo same can be achieved by GUI based Administrative Console
  4. JDBC is configured manually in server.xml for Tomcat whereas in Geronimo same can be achieved by GUI based Administrative Console
  5. web.xml is the default deployment descriptor for both the servers
  6. Geronimo has container specific deployment descriptor also know as deployment plans whereas Tomcat does not have any container specific deployment descriptor

In geronimo most of the configuration can be done using the deployment plan geronimo-web.xml, config.xml or config-substitution.properties. Adding resources like JMS queues, connection factory, JDBC datasource etc can be easily achieved using web based Administrative console. This simplifies the configuration management versus the manual configuration done using server.xml and context.xml in Tomcat.

Best Practices

In order to overcome most migration related issues you need to figure out how each service is mapped within Tomcat and apply to Apache Geronimo. We will enlist some scenarios in this regard

Tomcat only application

In this case you may have some servlet,jsp's added to your application. You may have also configured security realms, Tomcat specific features like JSP reloading etc.

  • Servlet and JSP's code will work equally well with Tomcat and Geronimo. So there are no modifications required on this part.
  • In Tomcat you may have configured security realms in server.xml, also a admin, manager roles can be added using tomcat-users.xml file. In geronimo same can be achieved by adding the following tags <security-realm-name>geronimo-admin</security-realm-name> <sec:security> </sec:security> in geronimo-web.xml(geronimo specific deployment descriptor also known as deployment plan). Users and Groups can be added to the default realm by using the Security => Console Realm menu from the Web console menu.

Tomcat and Apache Derby

For Tomcat to work with Apache Derby you have to download Apache Derby and configure environment variables like DERBY_INSTALL. You also need to make sure that the following jars are present in the classpath

  • lib/derby.jar
  • lib/derbytools.jar
  • lib/derbynet.jar
  • lib/derbyclient.jar
    To execute a sql command you have to use ij scipt which comes packaged with Apache Derby.

With regarda to Apache Geronimo there is no need for setting up environment variables or classpath. This is take care of by geronimo. Creating database table and database pool can be easily achieved by using web based Administrative Console. However you have to include a <dependency> </dependency> tag and <resource-ref> </resource-ref> tag in geronimo-web.xml so that the resources are visible to the deployed application.
All the other suggestions made in Tomcat only application is equally vaild in this scenario as well.

Tomcat and Apache AXIS

For Tomcat to work you have to include the following elements in your CLASSPATH environment variable. The jars mentioned below can be automatically downloaded within eclipse if you have set up the development environment in eclipse. This can be easily achieved by adding a wsdl file in your application and using Eclipse WSDL to Java tool to generate all the required artifacts including your java classes.

  • wsdl4j-1.5.1.jar
  • saaj.jar
  • jaxrpc.jar
  • axis.jar

With regards to Apache Geronimo you need not set any of the above mentioned libraries in your classpath as these are pre-integrated.

Tomcat and Apache ActiveMQ

Make sure you have apache activemq installed. Include the following elements in your CLASSPATH environment variable. Yyou have to specify the JMS resources that is queue and connection factory in context.xml available with Tomcat installation using the <Resource> </Resource> tags. Next you need to specify the resource reference, message destination reference and message destination using <resource-ref>, <message-destination-ref>, <message-destination> tag in web.xml.

lib/activeio-core-3.0.0-incubator.jar
lib/commons-logging-1.1.jar
<ActiveMQ_HOME>/apache-activemq-4.1.1.jar

Start the ActiveMQ broker by running the activemq.bat script. This script can be found in <ActiveMQ_HOME>/bin

In Geronimo connection factory and queue can be easily created using the GUI based web console. Active MQ is automatically started on server start. The jars mentioned are no longer required and should be removed from ClassPath. However you have to include a Active MQ dependency using <dependency> </dependency> tags, resource references using <resource-ref> </resource-ref> tags and message destination using <message-destination> </message-destination> tags in geronimo-web.xml.

Port Configuration

In case you have modified ports in server.xml of your Tomcat installation and you want to achieve the same. This can be done by modifying config-substitution.properties available in <GERONIMO_HOME>/var/log/config-substitution.properties. PortOffset variable in config-substitution.properties can be used to modify all the ports in one go or else each port can be configured to custom values.

Remove unneeded jars

In case of Tomcat you may have included various jars in your application in WEB-INF/lib. Most of these jars are already present in geronimo and can be removed from the application. This will also reduce the size of your application to few KBs in geronimo which would have been MBs in case of Tomcat. Also by removing these jars developer no longer need to support and integrate these
jars.

Do Not want to remove jars

In case you are unwilling to remove jars from your current environment. May be you want to use your version of jars and geronimo ships a very different version of jars. In that case also geronimo provides an easy configuration. You can configure geronimo-web.xml to add <inverse-classloading/> tag. Using this tag the classloading hierarchy will change to Child First.

JSP Reloading

If you have configured Tomcat for JSP reloading than you would want to have the same in geronimo. This can be easily achieved in geronimo by editing <geronimo_home>/var/catalina/conf/web.xml.

Search for <servlet-class>org.apache.jasper.servlet.JspServlet </servlet-class> and add the following elements under the servlet class

Add the XML snippet to web.xmlsolid <init-param> <param-name>development</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>modificationTestInterval</param-name> <param-value>10</param-value> </init-param>

modificationTestInterval is time in seconds.

Persist JSP Compilation

If your Tomcat server is configured to persist JSP compilation between server restarts than you can configure geronimo as well for the same configuration. However there are two ways you can configure this in geronimo.

Server scoped

Using this you can retain the compiled JSPs of all Web applications running in the server across server restarts. Edit <geronimo_home>/var/catalina/conf/web.xml. Search for org.apache.jasper.servlet.JspServlet and add the following elements

Add the XML snippet to web.xmlsolid <init-param> <param-name>scratchdir</param-name> <param-value> ../var/catalina/temp </param-value> </init-param> <init-param> <param-name>keepgenerated</param-name> <param-value>false</param-value> </init-param>

Create a directory <geronimo_home>/var/catalina/temp. All the web applications will be compiled and stored in temp directory. These will persist over server restarts.

Application scoped

Configure the web deployment descriptor web.xml in application as follows

Add the XML snippet to web.xmlsolid <servlet> <servlet-name>jsp</servlet-name> <servlet-class> org.apache.jasper.servlet.JspServlet </servlet-class> <init-param> <param-name>development</param-name> <param-value>false</param-value> </init-param> <init-param> <param-name>fork</param-name> <param-value>false</param-value> </init-param> <init-param> <param-name>scratchdir</param-name> <param-value> ../var/catalina/temp </param-value> </init-param> <init-param> <param-name>keepgenerated</param-name> <param-value>false</param-value> </init-param> <init-param> <param-name>xpoweredBy</param-name> <param-value>false</param-value> </init-param> <init-param> <param-name>engineOptionsClass</param-name> <param-value> org.apache.geronimo.jasper.JspServletOptions </param-value> </init-param> <load-on-startup>3</load-on-startup> </servlet> <servlet-mapping> <servlet-name>jsp</servlet-name> <url-pattern>*.jsp</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>jsp</servlet-name> <url-pattern>*.jspx</url-pattern> </servlet-mapping>

You need to create the temp directory in this case as well.

References

Following resources can be useful while migrating from Tomcat to Geronimo
1) http://geronimo.apache.org/schemas-2.1/docs/geronimo-module-1.2.xsd.html - Look for inverse-classloading. You may also want to know more on dependencies, hidden-classes, non-overridable-classes. These all elements will be helpful in modifying the geronimo-web.xml.
2) Learn how to configure JMS with apache geronimo - http://cwiki.apache.org/GMOxDOC21/web-application-for-jms-access.html
3) Learn how to configure JDBC with apache geronimo- http://cwiki.apache.org/GMOxDOC21/web-application-for-jdbc-access.html
4) For security related configurations you can refer- http://cwiki.apache.org/GMOxDOC21/configuring-security.html
5) More on configuring various services- JMS, JDBC http://cwiki.apache.org/GMOxDOC21/configuring-services.html