There is a bug in Tomcat, WO or Project Wonder that causes problems if you have more than one webapp deployed in a single instance of Tomcat if they don't all have identical classpaths. This bug will not impact most developers. If you are deploying a single application, or all your applications share the same classpath, then you will not run into this bug.
WO developers have been able to deploy their applications as a WAR bundle in a J2EE container since WO 5.1, and as an independent SSDD (Servlet Single Directory Deployment) bundles and WAR files since WO 5.2. This article guides you through the simple setup in WOLips to allow you to deploy you application to a servlet container such as Apache Tomcat.
- Eclipse 3.4 & WOLips 5640 or later installed.
- Servlet Container of your choice installed. For this article I'll be setting it up using a completely stock install of Tomcat 6.0.18.
- An existing WebObjects project.
Step 1 - Project Properties
- Right-Click on your project in the WO Explorer tab of the WOLips perspective in Eclipse and select "Properties" or select "Properties" from the "Project" menu.
- Select "WOLips Deployment" from the left-hand side and check the "Servlet Deployment" checkbox and the "Autogenerate web.xml" checkbox.
Step 2 - Install
- Right-Click on your project and select "WOLips Ant Tools" and then "Instal"
- Look in the Finder at your /Library/WebObjects/Application/ directory and you should find 3 files for your project
- YourApp directory - this is a Single Servlet Directory Deployment (SSDD) it contains all of the Frameworks on the build path embedded in it.
- YourApp.war - this is your webapp archive. It contains all the same files as the SSDD, but zipped up.
Step 3 - Deploy
Copy the MyApp.war file to your servlet container's webapps directory.
Notes about JBoss
I wouldn't consider myself a WAR expert, but I do deploy my WebObjects application using JBoss and it works very well.
Have you tried a "Hello World" type example application? If you can get a simple application running under JBoss then you should be okay with a more complicated one. I suggest starting with "Hello World" and then adding a simple EOF and that should cover everything.
There were a few tricky configurations in the initial setup. To be clear, I am using XCode, but it probably doesn't matter. Here are a few things to check.
Check you jboss-web.xml file. You definitely need to configure this file properly if you are using EOF. The application will never get started properly without this file configured correctly.
Make sure your deployment license gets built into the WAR file for deployment by setting the SERVLET_DEPLOY_LICENSE item.
Make sure the servlet project settings are correct:
- SERVLET_SINGLE_DIR_DEPLOY = NO
- SERVLET_TRUE_WAR = YES
- SERVLET_WEBAPPS_DIR = /Library/JBoss/3.2/deploy
Also, I explicitly defined a package for all of my classes. This prevents JBoss from complaining upon startup, however, JBoss still ran the application just fine anyway.