I wrote this "document" as I was setting up my environment. It may be of no use at all and I know for a fact that some of the things stated in it are wrong. Nevertheless, it worked for me and, if nothing else, there might be an URL in here you haven't visitied. Regards, S. Bro ================================================================================================================ Using Struts with VisualAge for Java WTE 3.5.3 ------------------------------------------------------------------------------------------------------------ DRAFT! ------------------------------------------------------------------------------------------------------------ This document is split up in two parts: Administrator's tasks. These tasks are related to the shared repository. They must be carried out only once, by the administrator, at the start of the project. Team Developers' tasks. These tasks are related to the team developers' local configurations and they must be performed once by each developer in order for him or her to be able to test locally. Throughout this document the article http://www7.software.ibm.com/vad.nsf/Data/Document2558?OpenDocument&SubMast will be referred to as "IBM's Struts article". It is recommended that you read the part of this article related to VAJ 3.5.3 before returning to this document. Note that although the approach used here deals with the latest version of Struts, the 1.0 version, it will most probably work with all versions. However, for the version 1.0b the "hack" used in step 5 of the Administrator's task is not nessecary. . Instructions for deploying Struts on WAS comes with the Struts binary distribution (struts-documentation.war). Last minute updates can be found in the struts user archives or at http://jakarta-apache.org All the paths used in this document are relative to the classpath unless otherwise stated. ------------------------------------------------------------------------------------------------------------ The number of ways in which a Struts project can be set up is legion. For simplicity's sake the approach used here assumes that all the nessecary files are contained within VAJ. A real-life project would probably keep some of the files in Visual SourceSafe, WebSphere Studio or some such tool for making code drops easier. ------------------------------------------------------------------------------------------------------------ Administrator's tasks. Prerequisites: All WTE features must be present in the workspace before continuing. That is: "IBM WebSphere Test Environment" and dependencies (i.e. "IBM XML Parser for Java", etc.) must already be in your workspace. 1.) Install a JAXP compatible XML parser. Struts depends on the presence of a JAXP compatible parser. JAXP is part of the Apache Tomcat 3.2.2 binary distribution downloadable from: http://jakarta.apache.org/builds/jakarta-tomcat/release/v3.2.2/bin/ Install JAXP 1.0.1 as per the instructions found in the IBM Struts article. Follow the instructions closely or problems may occur with Windows 2000. Remember to version both the packages you imported and the packages of which you created opened editions! 2.) Download and install Apache Struts. Download and unzip the latest (at the time of this writing: 1.0) version of the Apache Struts source code from: http://jakarta.apache.org/builds/jakarta-struts/release/v1.0/src/ Create a new Struts project in the VAJ workspace (e.g.: "ApacheStruts") and import the Struts source code into the new project. 3.) Installing Struts resources. In the file system, using WinZip, open the file struts.jar which comes with the Struts binary distribution at http://jakarta.apache.org/builds/jakarta-struts/release/v1.0/) and extract the files: org\apache\struts\resources\struts-config_1_0.dtd org\apache\struts\resources\web-app_2_2.dtd org\apache\struts\resources\web-app_2_3.dtd These file must be added the above path to the ApacheStruts project on the "Resources" tab in the VAJ workspace. In addition to these files the tag library descriptors must also be present (*a). These files are also part of the Struts binary distribution and must likewise be added to the resource tab of the ApacheStruts project as: WEB-INF\app.tld WEB-INF\struts.tld WEB-INF\struts-bean.tld WEB-INF\struts-form.tld WEB-INF\struts-html.tld WEB-INF\struts-logic.tld WEB-INF\struts-template.tld *a: Note that some of the tld files included with the Struts distribution are deprecated and provided merely for backwards compatibility (see http://jakarta-apache.org). The wise thing to do would probably be to omit these files to avoid someone using them by accident or convinience. 4.) Create a Project for the Web Application. This project will contain derivatives of Struts classes as well as any project specific code. The resource tab for this project will contain those Struts configuration files that will have to be modified by team developers as work progresses. So, if your project's name is "BLAH" create a new project called "BLAH". On the resource tab for the new project add the following resource files: WEB-INF\web.xml WEB-INF\struts.config.xml ApplicationResources.properties (*b) Make sure team developers have write-access to these files. Finally, translate the "web.xml" file for the Struts project into a "yourwebapp.webapp" file (Detailed reasons and instructions for this can be found in IBM's Struts article.) and add this file to the web project as (assuming your webapp's name is "BLAH"): blah.webapp *b Note that the precise path of the ApplicationResources.properties file can be configured through "web.xml" so it may differ from project to project. 5.) Resolving the WebSphere bug. Due to a "bug" in WebSphere (see: http://nagoya.apache.org/bugzilla/show_bug.cgi?id=932) a small hack has to be made. In the method org.apache.struts.taglib.html.FormTag.doEndTag() change the lines: pageContext.removeAttribute(Constants.BEAN_KEY, PageContext.REQUEST_SCOPE); pageContext.removeAttribute(Constants.FORM_KEY, PageContext.REQUEST_SCOPE); to read: pageContext.getRequest ().removeAttribute(Constants.BEAN_KEY); pageContext.getRequest ().removeAttribute(Constants.FORM_KEY); These blocks of code are equivalent. One can easily assert that this is indeed the case by using JUNIT: junit.framework.Assert.assertTrue("Expected bean attribute got: null", pageContext.getRequest().getAttribute(Constants.BEAN_KEY) != null && pageContext.getAttribute(Constants.BEAN_KEY, PageContext.REQUEST_SCOPE) != null); junit.framework.Assert.assertTrue("Expected form attribute got: null", pageContext.getRequest().getAttribute(Constants.FORM_KEY) != null && pageContext.getAttribute(Constants.FORM_KEY, PageContext.REQUEST_SCOPE) != null); pageContext.getRequest ().removeAttribute(Constants.BEAN_KEY); pageContext.getRequest ().removeAttribute(Constants.FORM_KEY); junit.framework.Assert.assertTrue("Bean attribute was not removed", pageContext.getAttribute(Constants.BEAN_KEY, PageContext.REQUEST_SCOPE) == null); junit.framework.Assert.assertTrue("Form attribute was not removed", pageContext.getAttribute(Constants.FORM_KEY, PageContext.REQUEST_SCOPE) == null); For more information about this bug and it's ramifications scan the Struts user archives for the thread: "Form tag problem in VAJ 3.5.3 WTE with 1.0b2" Team Developers' tasks. 1.) Configuring the WebSphere Test Environment. Add a new webgroup to the WTE servlet engine configuration file, i.e. edit the file: <VAJ Install Dir>\...\...\WebSphere Test Environment\properties\default.servlet_engine and add a new webgroup. If your webapp's name will be "blah" the entry would look like: <websphere-webgroup name="bah"> <description>BLAH Web Application</description> <document-root>$approot$/web</document-root> <classpath>$approot$/web$psep $$server_root$/../Blah</classpath> <root-uri>/blah</root-uri> <auto-reload enabled="true" polling-interval="3000"/> <shared-context>false</shared-context> </websphere-webgroup> Note that the classpath includes the web application specific project resources ($server_root$/../Blah). This is were we will keep the blah.webapp file so all developers can share the same file (see "Administrator Task 4"). I've had no luck in setting this particular path with the WTE GUI as it seems the servlet engine loads the webapp file before setting the WTE classpath (?!). Optionally, if you're not going to use it you can comment out the one already present (i.e. default_app) to avoid cluttering up the WTE console trace. Next you need to manually create the neccesary folder for the new webapp, ie: <VAJ Install Dir>\...\...\WebSphere Test Environment\hosts\default_host\blah Finally, start the WTE and set the classpath. The classpath must include the ApacheStruts project as well as the JAXP parser project and the web application specific project ("BLAH" above). If you are using JUNIT and LOG4J these must be added to the classpath as well. You should now be able to start the servlet engine and start using Struts. Resources: Jakarta homepage: http://jakarta-apache.org The official Struts user archives: http://www.mail-archive.com/struts-user@jakarta.apache.org/ Other sites mirror these archives, e.g.: http://marc.theaimsgroup.com/?l=struts-user&r=1&w=2&b=200105 Apache Struts and Visualage for Java: http://www7.software.ibm.com/vad.nsf/Data/Document2557?OpenDocument&p=1&BCT=1 http://www7.software.ibm.com/vad.nsf/Data/Document2558?OpenDocument&SubMast General information about Struts: http://husted.com TODO: Resolve the WebSphere bug by importing a newer version of Jasper. The version needed is part of the Apache Tomcat 3.2.2 distribution. This is preferrable to changing the Struts source code. What's the difference between WTE classpath and servlet engine classpath? Use "The Struts Validator". http://home.earthlink.net/~dwinterfeldt/ See the threads: "Any Success With Validator?" "Validation Clarified" ------------------------------------------------------------------------- SBT 24/06-2001, 09/07-2001, 10/07-2001 ------------------------------------------------------------------------- Walking tour: http://husted.com/about/struts/example-tour.html#struts-config.xml D:\jakarta-struts-1.0-src\web\example Detailed System Design, control-flow: http://www-106.ibm.com/developerworks/library/j-struts/?n-j-2151 ------------------------------------------------------------------------- Team development: ------------------------------------------------------------------------- http://groups.google.com/groups?hl=da&safe=off&ic=1&th=55adb9df6c5583ed,8&seekm=3725CC57.4EB283A5%40trcinc.com#p ------------------------------------------------------------------------- System Design: Which JSP tags are we using. Did we create any ourself? ================================================================================================================ "West, Tedie" To: [EMAIL PROTECTED] <Tedie.West@eBr cc: eviate.com> Subject: Struts and Websphere Test Environment 3.5.3 20-09-01 23:28 Please respond to struts-user Hi All, Has anyone been able to get the Struts examples to run under the Websphere Test Environment in VisualAge for Java v3.5.3? Which configuration files need to be adjusted? What are the steps you took? I am getting a HTTP error 503 when trying to run the examples? I have been referencing an article that I found on the IBM website from Kyle Brown that tells the necessary steps. However, I have been unsuccessful. Thanks. Bye. Tedie West Product Development eBreviate Office: 972-797-9262 [EMAIL PROTECTED]