Tomcat Integration for ServiceMix 1.1 and ServiceMix 2.0
The following guide explains how to deploy ServiceMix 1.1 and ServiceMix 2.0 on the Apache Tomcat application server.
Pre-Installation Requirements
- Java Developer Kit (JDK) 1.4.x or greater to run ServiceMix (to build Service, JDK 1.5.x or greater is required)
- The JAVA_HOME environment variable must be set to the directory where the JDK is installed, e.g.
c:\Program Files\Java\jdk1.5.xx
. - Maven 1.0.2 or greater (required when installing source or developers' releases).
- Apache Tomcat version 5.5
- ServiceMix 1.1 or ServiceMix 2.0
The following platform was used to produce this document:
- Windows XP
- Tomcat 5.5
- Java 5
- ServiceMix 1.1 and ServiceMix 2.0
Deploying ServiceMix on Tomcat
Execute the following steps to deploy ServiceMix on Apache Tomcat. NOTE: This procedure will work on Unix platforms as well as the Windows platform, with the appropriate substitutions, such as using the backslash ( \ ) instead of the forward slash ( / ).
- Apache Tomcat must be downloaded and installed. For instructions please see the Tomcat web site.
- By default Tomcat uses port 8080. Please note if your installation has Tomcat on another port, such as port 80.
- Download and build the ServiceMix source code. Please see the Getting Started guide for instructions.
NOTE: ServiceMix must be BUILT, as well as downloaded. - Create the WAR file:
Code Block |
---|
cd [servicemix_install_dir]\tooling\servicemix-web
maven war
|
where servicemix_install_dir
is the directory in which ServiceMix was downloaded and installed. - To deploy the WAR file,
servicemix-web.war
, copy it to the Tomcat webapps
directory. For example, on a Windows system: Code Block |
---|
cd [servicemix_install_dir]\tooling\servicemix-web\target
copy servicemix-web.war [tomcat_install_dir]\webapps
|
where tomcat_install_dir
is the directory in which Tomcat was installed.
- To deploy the ServiceMix WAR file, start and stop Tomcat.
- If there are errors indicating missing classes when Tomcat starts, perform the followng steps:
- Stop Tomcat.
- Install additional jar files in the deployed ServiceMix directory. The missing jar files are:
commons-collections-3.1.jar
and commons-pool-1.2.jar
. These can be obtained by using a search engine and searching for them. Or they can found in your Maven repository, which is usually located in your_home_dir\.maven\repository
. Specifically, your_home_dir\.maven\repository\commons-collections\jars
and your_home_dir\.maven\repository\commons-pool\jars
. Code Block |
---|
copy commons-collections-3.1.jar [tomcat_install_dir]\webapps\servicemix-web\WEB-INF\lib
copy commons-pool-1.2.jar [tomcat_install_dir]\webapps\servicemix-web\WEB-INF\lib
|
- Start Tomcat.
- The Tomcat console output should show ServiceMix starting:
Code Block |
---|
INFO: Deploying web application archive servicemix-web.war
Nov 1, 2005 11:03:54 AM org.springframework.web.context.ContextLoader initWebApplicationContext
INFO: Root WebApplicationContext: initialization started
Nov 1, 2005 11:03:54 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from ServletContext resource [/WEB-INF/applicationContext.xml]
Nov 1, 2005 11:03:55 AM org.springframework.core.CollectionFactory <clinit>
INFO: JDK 1.4+ collections available
Nov 1, 2005 11:03:55 AM org.springframework.core.CollectionFactory <clinit>
INFO: Commons Collections 3.x available
Nov 1, 2005 11:03:55 AM org.springframework.context.support.AbstractRefreshableApplicationContext refreshBeanFactory
INFO: Bean factory for application context [Root WebApplicationContext]: org.springframework.beans.factory.support.DefaultListableBeanFactory defining beans [jencks,broker,transactionManager,jmsFactory,jbi]; root of BeanFactory hierarchy
Nov 1, 2005 11:03:55 AM org.springframework.context.support.AbstractApplicationContext refresh
INFO: 5 beans defined in application context [Root WebApplicationContext]
Nov 1, 2005 11:03:55 AM org.springframework.context.support.AbstractApplicationContext initMessageSource
INFO: Unable to locate MessageSource with name 'messageSource': using default [org.springframework.context.support.DelegatingMessageSource@1049d3]
Nov 1, 2005 11:03:55 AM org.springframework.context.support.AbstractApplicationContext initApplicationEventMulticaster
INFO: Unable to locate ApplicationEventMulticaster with name 'applicationEventMulticaster': using default [org.springframework.context.event.SimpleApplicationEventMulticaster@14a7a12]
Nov 1, 2005 11:03:55 AM org.springframework.ui.context.support.UiApplicationContextUtils initThemeSource
INFO: No ThemeSource found for [Root WebApplicationContext]: using ResourceBundleThemeSource
Nov 1, 2005 11:03:55 AM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
INFO: Pre-instantiating singletons in factory [org.springframework.beans.factory.support.DefaultListableBeanFactory defining beans [jencks,broker,transactionManager,jmsFactory,jbi]; root of BeanFactory hierarchy]
Nov 1, 2005 11:03:55 AM org.springframework.beans.factory.support.AbstractBeanFactory getBean
INFO: Creating shared instance of singleton bean 'jencks'
Nov 1, 2005 11:03:56 AM org.springframework.beans.factory.support.AbstractBeanFactory getBean
INFO: Creating shared instance of singleton bean 'broker'
...
|
NOTE: The console output is also logged in tomcat_home_dir\logs\catalina.xxxx-xx-xx.log
.
Testing the ServiceMix Deployment on Tomcat
To ensure that ServiceMix is running on Tomcat do any of the following:
- Check the Tomcat console output or the Tomcat log files (see above) and look for servicemix-web starting without any errors.
- ServiceMix's default port is 1099. From another window run netstat and search for port 1099.
From a Windows console, type: Code Block |
---|
netstat -an|find "1099"
|
OR
From a Unix command shell, type: Code Block |
---|
netstat -an|grep 1099
|
- Run the ServiceMix JMX Console. To do this enter the following URL in a web browser: http://localhost:8080/servicemix-web
. Optionally, look at the following in the console: - Click on "Catalina".
- Click on "Unknown".
- Click on the "JMXServlet WebModule" to get monitoring information about the JMX Servlet itself:
- An http binding example is supplied. To run it on ServiceMix 1.1 do the following steps. To run it on ServiceMix 2.0 go to #2.0 steps.
- From a browser, enter the following URL: http://localhost:8080/servicemix-web/examples
. Note: if Tomcat is using a different port, such as port 80, substitute the correct port number for 8080 in the URL.
- Click on the "perform a GET" link. If an HTTP 404 error occurs, go to the next step. If there is no error you will see:
- If there was an HTTP 404 error, the
index.html
file needs to be modified. The index.html
file is located in the tomcat_install_dir\webapps\servicemix-web\examples
directory. After editing the file, return to step 1. Code Block |
---|
Change this line:
<li><a href="/jbi/exampleUri?x=123&name=James&location=London">perform a GET</a> into the HTTP binding</li>
to
<li><a href="/servicemix-web/jbi/exampleUri?x=123&name=James&location=London">perform a GET</a> into the HTTP binding</li>
|
- Use the ServiceMix JMX Console to see monitoring information on the httpBinding example just run.
- From a browser, enter the following URL: http://localhost:8080/servicemix-web
. Note: If Tomcat is not running on port 8080, substitute the correct port number for 8080. - Click on "org.servicemix."
- Click on "org.servicemix.jbi.framework.ComponentMBeanImpl". In the right-hand frame, scroll to the right to see statistics for the httpbinding example.
- To run the httpBinding example for ServiceMix 2.0 perform the following steps:
- Before attempting to run the example program, first check that the{{HelloWorldComponent.class}} file exists. Do a directory listing of the following and look for the file.
Code Block |
---|
cd [tomcat_install_dir]\webapps\servicemix-web\WEB-INF\classes\org\servicemix\components
|
Wiki Markup |
---|
where {{\[tomcat_install_dir\]}} is the directory in which Tomcat is installed. |
- If the file
HelloWorldComponent.class
does not exist and possibly the directory components
does not exist either, perform the following steps. If the file exists, go to - Create the
components
directory in the ServiceMix source distribution: Code Block |
---|
cd [servicemix_install_dir]\tooling\servicemix-web\src\main\java\org\servicemix
mkdir components
|
- Copy the
HelloWorldComponent.java
file to the components
directory created above. The HelloWorldComponent.java
file can be created by cutting and pasting the following code: Code Block |
---|
package org.servicemix.components;
import org.servicemix.components.util.TransformComponentSupport;
import org.servicemix.jbi.jaxp.StringSource;
import javax.jbi.messaging.MessageExchange;
import javax.jbi.messaging.MessagingException;
import javax.jbi.messaging.NormalizedMessage;
public class HelloWorldComponent extends TransformComponentSupport {
private String property;
protected boolean transform(MessageExchange exchange, NormalizedMessage in, NormalizedMessage out)
throws MessagingException {
out.setContent(new StringSource("<hello>" + in.getProperty(property) + "</hello>"));
return true;
}
public String getProperty() {
return property;
}
public void setProperty(String property) {
this.property = property;
}
}
|
- Rebuild the
servicemix-web.war
file: Code Block |
---|
cd [servicemix_install_dir]\tooling\servicemix-web
maven war
|
where servicemix_install_dir
is the directory in which ServiceMix was downloaded and installed. - Stop Tomcat.
Wiki Markup |
---|
Remove the existing {{\[tomcat_install_dir\]\webapps\servicemix-web}} directory. |
- Copy
servicemix-web.war
to the Tomcat webapps
directory. For example, on a Windows system: Code Block |
---|
cd [servicemix_install_dir]\tooling\servicemix-web\target
copy servicemix-web.war [tomcat_install_dir]\webapps
|
where tomcat_install_dir
is the directory in which Tomcat was installed.
- Start Tomcat to deploy the ServiceMix WAR file.
- To run the example: from a browser, enter the following URL: http://localhost:8080/servicemix-web/examples
. Note: if Tomcat is using a different port, such as port 80, substitute the correct port number for 8080 in the URL.
- Enter a name or some text in the text box (shown above) and click the Submit button. You will see: