Installing and setting up the MQSeries Workflow Web Client
The following sections provide installation hints for unsupported
environments. They can help you getting started, but they are not guaranteed
to work. Note that most of these setups have only been tested on Windows NT.
Additional or different settings may be necessary for other platforms.
- In
<WLDir>\startWebLogic.cmd
add
<MQWFDir>\bin\java<VRMS>\fmcojagt.jar;<MQWFDir>\WebClient\fmcohcli.jar
|
to the PRE_CLASSPATH
setting.
- In
<WLDir>\weblogic.properties
add the following line:
weblogic.httpd.webApp.MQWFClient=<MQWFDir>/WebClient/webpages
|
Make sure to use forward slashes ('/') as directory separators.
- Edit the
<MQWFDir>/WebClient/webpages/WEB-INF/web.xml
file and enable the following
lines if you want to use the <MQWFDir>/WebClient/WebClient.properties
configuration file:
<init-param>
<param-name>ConfigurationFile</param-name>
<param-value><MQWFDir>/WebClient/WebClient.properties</param-value>
</init-param>
|
- To run the Web Client:
- Start
<WLDir>\startWebLogic.cmd
- Start your Web browser and point it to
http://localhost:7001/MQWFClient/RTC.html
- Make a backup copy of the
<MQWFDir>/WebClient/webpages/WEB-INF/web.xml
file. There have been instances where this file was overwritten during
configuration of the Web application.
- Create a new Server for MQSeries Workflow:
- Copy the directory
<JRDir>/servers/default
to
<JRDir>/servers/fmc
.
- Edit the
<JRDir>/lib/jvms.properties
file and add
the following line:
- Edit the
<JRDir>/servers/fmc/local.properties
file
and change the following property to read:
jrun.server.displayname=JRun MQWF Server
|
Read the chapter 'Server Creation' in the JRun online documentation for
more details.
- Make sure the JRun Admin Server is running.
- Start the JRun Management Console (JMC).
- Expand the 'JRun MQWF Server' node in the tree on the left.
- In the 'Java Settings' branch, edit the 'JRun Control Port' setting
and assign to it an unused port number (it still has the same port as the
default server it was copied from).
- On the same panel, add
<MQWFDir>/bin/java<VRMS>/fmcojagt.jar
and <MQWFDir>/WebClient/fmcohcli.jar
to the
'Classpath' setting.
- If you are using the built-in JRun Web server instead of an external
Web server, open the 'JRun Web Server' branch and assign an unused port
number to the 'Web Server Port' setting, for example, 8080.
- Select the 'Web Applications' branch and delete the two Web
applications from the default server, 'Default User Application' and
'JRun Demo'.
- Click on 'Create an Application'.
- Select 'JRun MQWF Server' in the 'JRun Server Name' list box.
- Enter 'MQSeries Workflow' in the 'Application Name' field.
- Enter '/MQWFClient' in the 'Application URL' field.
- Enter '<MQWFDir>/WebClient/webpages' in the
'Application Root Dir' field.
- Click on 'create'.
- Edit the
<MQWFDir>/WebClient/webpages/WEB-INF/web.xml
file and enable the following
lines if you want to use the <MQWFDir>/WebClient/WebClient.properties
configuration file:
<init-param>
<param-name>ConfigurationFile</param-name>
<param-value><MQWFDir>/WebClient/WebClient.properties</param-value>
</init-param>
|
- To run the Web Client:
- Select 'JRun Web Server' in the tree on left.
- Click the 'start server' button.
- Start your Web browser and point it to
http://localhost:8080/MQWFClient/RTC.html
- If you see the logon page, but get an error when trying to log on, check
if the
<MQWFDir>/WebClient/webpages/WEB-INF/web.xml
file has been overwritten and restore it from your backup, if
necessary.
Apache Tomcat is an open source project that can be found at
http://jakarta.apache.org.
It is recommended you use Tomcat Version 3.2.1 which supports the Servlet V2.2
and JSP V1.1 specifications.
- In
<TCDir>\bin\tomcat.bat
:
- Add the following line at the beginning of the file:
- Tomcat V3.1: Add the following line after all the other CLASSPATH
settings:
set CLASSPATH=%CLASSPATH%;<MQWFDir>\bin\java<VRMS>\fmcojagt.jar;<MQWFDir>\WebClient\fmcohcli.jar
|
- Tomcat V3.1: Change the
command to read
start %JAVA_HOME%\bin\java ...
|
- Tomcat V3.2: Add
set CP=%CP%;<MQWFDir>\bin\java<VRMS>\fmcojagt.jar;<MQWFDir>\WebClient\fmcohcli.jar
|
before the line reading
echo Using CLASSPATH: %CP%
|
- In
<TCDir>\conf\server.xml
:
- Add
<Context path="/MQWFClient" docBase="<MQWFDir>/WebClient/webpages" reloadable="false" />
|
before the closing </ContextManager>
tag at the
end of the file, for example,
<Context path="/MQWFClient"
docBase="/d:/Program Files/MQSeries Workflow/WebClient/webpages"
reloadable="false"/>
|
(note the leading forward slash and that the long names containing
blanks have to be used).
- Edit the
<MQWFDir>/WebClient/webpages/WEB-INF/web.xml
file and enable the following
lines if you want to use the <MQWFDir>/WebClient/WebClient.properties
configuration file:
<init-param>
<param-name>ConfigurationFile</param-name>
<param-value><MQWFDir>/WebClient/WebClient.properties</param-value>
</init-param>
|
- To run the Web Client:
- Start
<TCDir>\bin\startup.bat
- Start your Web browser and point it to
http://localhost:8080/MQWFClient/RTC.html
- If the
com.ibm.workflow.api
package cannot be found when compiling the JSPs
and you are using directories with blanks in their names on the CLASSPATH, try using the
short names instead. For example, use
set CP=%CP%;c:\Progra~1\MQSeri~1\bin\java3300\fmcojagt.jar;c:\Progra~1\MQSeri~1\bin\fmcohcli.jar
|
instead of
set CP="%CP%;c:\Program Files\MQSeries Workflow\bin\java3300\fmcojagt.jar;c:\Program Files\MQSeries Workflow\bin\fmcohcli.jar"
|
- In
<MQWFDir>/WebClient/WebClient.properties
, set the following:
DocumentRoot=<MQWFDir>/WebClient/webpages
|
- Edit the file
<IASDir>/properties/server/<ServerName>/java.options
and add the following line:
-classpath <MQWFDir>\WebClient\fmcohcli.jar;<MQWFDir>\bin\JAVA<VRMS>\fmcojagt.jar
|
- Start the Inprise Application Server and go to
http://localhost:9090. If the
Inprise AS is running, you should be connected to the Administration
Console.
- Log on, select the HTTP Web Engine, and press "Manage".
- Under "Setup", select "File Aliases".
- Add a new entry with Alias Pathname "/MQWFClient" and Full Pathname
"<MQWFDir>/WebClient/webpages".
- Under "Servlet Aliases", add the alias "/MQWFClient/servlet" and under
Servlet Invoked, specify "invoker".
- Select the "Servlets" button and select "Add" to add the servlet:
Specify "Main" for the servlet name and "com.ibm.workflow.servlet.client.Main"
as the Servlet.
- Under "Properties", specify "ConfigurationFile" as Name, and
<MQWFDir>\WebClient\WebClient.properties
for the
servlet's properties file.
- To run the Web Client:
- Shutdown and restart the Inprise Application server.
- Start your Web browser and point it to
http://localhost:8080/MQWFClient/RTC.html
- Go to the
<iPDir>/<server>/config
directory
where <iPDir>
denotes the iPlanet installation directory
and <server>
denotes the ID of the server where you
want to configure the Web Client.
- Edit the
jvm12.conf
file and add the following to the
jvm.classpath setting:
jvm.classpath=...<MQWFDir>/WebClient/fmcohcli.jar;<MQWFDir>/bin/JAVA<VRMS>/fmcojagt.jar
|
Be sure to use the correct path separator character for your platform. Note
that it is not sufficient to add these .jar files to the servlet's classpath,
this will result in java.lang.MissingResourceExceptions.
- Edit the
obj.conf
file and add the following line to the
<Object name="default">
section:
NameTrans fn="pfx2dir" from="/MQWFClient" dir="<MQWFDir>/WebClient/webpages"
|
- Edit the
rules.properties
file and add the following line:
- Edit the
servlets.properties
file and add the following lines:
servlet.MQWFClient.code=com.ibm.workflow.servlet.client.Main
servlet.MQWFClient.initArgs=ConfigurationFile=<MQWFDir>/WebClient/WebClient.properties
servlet.MQWFClient.context=MQWFClient
|
- Edit the
contexts.properties
file and add the following lines:
context.MQWFClient.uri=/MQWFClient
context.MQWFClient.docRoot=<MQWFDir>/WebClient/webpages
|
- To run the Web Client:
- Run the iPlanet Administration server and make sure the manual changes
are picked up (you can click the 'Apply' button in the upper left
corner to do so).
- Start the server for which you configured the Web Client.
- Start your Web browser and point it to
http://localhost/MQWFClient/RTC.html
JSWDK is no longer supported, please upgrade to
Apache Tomcat which is as easy to install and use.
Starting with version 3.2, Tomcat has been enabled to support SSL. Setup
is pretty simple:
- Make sure Apache Tomcat V3.2 is configured and
working.
- Download and install
JSSE (Java
secure sockets extension)
- Then open the
<TCDir>/doc/tomcat-ssl-howto.html file and follow the
instructions in the section titled SSL direct
- If using the JDK's
keytool
, note that the default location
for the keystore file is the System.getProperty("user.home")
directory (for example, c:\winnnt\profiles\<userID>
on
Windows NT). Use the -keystore
parameter of
keytool
if you want to specify an alternate location.
- Start your Web browser and point it to
https://localhost:8443/MQWFClient/RTC.html. If you copied the
Connector
parameters from the Tomcat instructions and
have troubles accessing the Web Client over this connection, try to set
<Parameter name="clientAuth" value="false"/>
|
in Tomcat's server.xml
configuration file.
- Make sure Apache Tomcat V3.2 is configured and
working.
- Edit the
<TCDir>/conf/tomcat-users.xml
file and add
the Workflow user IDs you want to authorize to your Workflow role,
for example, mqwf:
<tomcat-users>
<user name="admin" password="password" roles="mqwf"/>
<user name="user1" password="changeit" roles="mqwf"/>
</tomcat-users>
|
Note that this .xml-file based authentication requires the
org.apache.tomcat.request.SimpleRealm
request interceptor
to be enabled in <TCDir>/conf/server.xml
(this is
the default, there is another interceptor available which is JDBC-based).
See also the
BasicAuthenticationHandler sample.
- Enable authentication for the Web Client's Web application by adding the
following lines before the closing
</web-app>
tag in
<MQWFDir>/WebClient/webpages/WEB-INF/web.xml
:
<security-constraint>
<web-resource-collection>
<web-resource-name>Web Client</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>mqwf</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>MQSeries Workflow Web Client</realm-name>
</login-config>
|
Note that the role-name
entered here must match the entry
in the roles
attribute above.
The following may or may not work for you. We have not always succeeded setting
up basic authentication with these instructions, so maybe there still is
something missing.
- Make sure the WebSphere server is running and start the WebSphere
Adminstrative Console.
- Open the 'Configure Global Security Settings' wizard and check the
'Enable Security' checkbox on the 'General' page. On the 'User Registry'
page, check what Server ID you are using.
- Click 'Finish'. You now must restart the WebSphere server and enter the
Server user ID and password when re-opening the Administrative Console.
- Open the 'Create Enterprise Application' wizard and enter 'MQSeries Workflow'
as application name, then click 'Next'.
- Open the 'Web Applications' node, select 'MQWFClient', click 'Add',
click 'Next', then click 'Finish' (there is nothing to enter on the last
page).
- Open the 'Configure Application Security' wizard to select the
authentication mechanism to be used and select the 'MQSeries Workflow' leaf
of the 'Enterprise Applications' node. Then click 'Next'.
- Enter 'MQSeries Workflow Web Client' as the Realm name. This is the text
the user will see on the browser's password prompt.
- Select the 'Basic' challenge type and optionally check the 'Use SSL' box
if you configured HTTPS.
- Click 'Finish' (again, there is nothing to enter on the last page).
- Open the 'Configure Security Permissions' wizard to configure
authorizations and select the 'MQSeries Workflow' leaf of the
'Enterprise Applications' node. Then click 'Next'.
- On the 'Permissions' page, select all permissions by pressing Ctrl-A, then
click 'Next'.
- On the 'Grant Permissions' page select the 'Selection' radio button. In
the 'Search For' box select 'User' and in the 'Search Filter' box enter
'*' (asterisk). Then click 'Search'. (EF: What is 'All authenticated'?
Never got a password prompt with this one...)
- In the 'Search Results' list select the user ID you want to authorize.
Note that this user ID must be a Workflow user ID and its password must
match the Workflow password if you want to use the
BasicAuthenticationHandler sample.
- Click 'Next'. On this page, you can check that the permissions have been
granted by opening the trees. Click 'Finish'.
- Open the 'Configure Resource Security' wizard to configure access
restrictions and expand the 'Virtual Hosts' node. Open the 'default_host'
node, select the '/MQWFClient' leaf and click 'Finish' (there is nothing
to enter on the last page).
- To test Basic Authentication start the 'MQSeries Workflow' Enterprise
Application instead of the 'MQWF Web Client' Application Server. Then
point your browser to
http://localhost/MQWFClient/servlet/Main?command=logon. You must
have an authentication handler like the
BasicAuthenticationHandler sample installed for this to work.
This setup uses IBM HTTP Server as Web server and Apache Tomcat as Servlet
container. This is different from the Tomcat standalone
configuration where Apache Tomcat is used as both Web server and Servlet
container.
- Shutdown the IBM HTTP server if it is running.
- Create a self-signed certificate (sufficient for demonstration purposes):
- Start the Key Management utility that comes with IBM HTTP Server.
- Select the 'Key Database File' - 'New...' menu option.
- Select 'CMS key database file' from the list of key database types and
type in the name and location for the file:
<MQWFDir>/WebClient/ihs.kdb
. Then click OK.
- In the password dialog box, enter a password for this database. Leave the
expiration time for the key database unspecified. Click the 'Stash the
password to a file?' checkbox. If the password is not stashed into a file,
the Web server will not be able to start automatically. Then click OK.
- Select the 'Create' - 'New Self-Signed Certificate...' menu option.
- Enter 'WebClient' as the 'Key Label' and fill in all information about
your organization. Then click OK to create and save the certificate.
- Close the Key Management utility.
- Make sure Apache Tomcat is configured and start it at
least once.
- EF tbd: What about ApacheModuleJServ.dll?
- Edit the
<IHSDir>/conf/httpd.conf
file and add the
following line at the end:
Include "<TCDir>/conf/tomcat-apache.conf"
|
Note that Tomcat V3.1 has a bug which causes the wrong document root
directory to be generated in tomcat-apache.conf
. Edit this
file and change the lines reading
Alias /MQWFClient <TCDir>\webapps\MQWFClient
<Directory "<TCDir>\webapps\MQWFClient">
|
to
Alias /MQWFClient <MQWFDir>\WebClient\webpages
<Directory "<MQWFDir>\WebClient\webpages">
|
Copy the changed file to the <IHSDir>/conf
directory
so that it is not overwritten the next time you start tomcat. Change the
Include
directive in <IHSDir>/conf/httpd.conf
accordingly and do not forget to re-apply these changes every time you
update <TCDir>/conf/server.xml
. This bug is fixed in
Tomcat V3.2.
- To run the Web Client using HTTPS:
- Start Apache Tomcat (this must be done before starting IBM HTTP Server
so that the
tomcat-apache.conf
file is up to date).
- Start IBM HTTP Server.
- Start your Web browser and point it to
https://localhost/MQWFClient/RTC.html
These instructions describe how to enable SSL in WebSphere Application Server.
In the following, <IHSDir>
denotes the IBM HTTP Server
installation directory and <WASDir>
denotes the WebSphere
Application Server installation directory.
- Open the WebSphere Administrative console and locate the virtual host, that
you want to enable SSL support, for example,
default_host
.
Go to the 'Advanced' page of the virtual host and add
<virtual_host>:443
and its variations to the alias
list.
- You must restart all application servers using the virtual host for the
changes to become effective.
- Create a self-signed certificate as described above.
- Go to the
<IHSDir>/conf
directory and make a backup
copy of httpd.conf
.
- Edit the
httpd.conf
file and make sure the ServerAdmin
directive points to a valid e-mail address and the ServerName
directive is enabled and matches the fully qualified hostname. SSL
configuration requires that the ServerName
directive matches
the fully qualified host name of your server, such as www.acme.com.
- Locate the line where the WebSphere server module is loaded and add
the IBM HTTP Server SSL module you have installed, for example:
LoadModule ibm_ssl_module modules/IBMModuleSSL128.dll
LoadModule ibm_app_server_module <WASDir>/bin/mod_ibm_app_server.dll
|
- Add the port number for the virtual server just below the
Listen 80
statement. The default port number for SSL is 443.
If you don't have the Listen 80
item, just add the following
line after the sample #Listen lines:
- Add following lines at the end of the httpd.conf:
<VirtualHost :443>
SSLEnable
SSLClientAuth none
DocumentRoot "<IHSDir>/htdocs"
ErrorLog logs/error.log
TransferLog logs/access.log
</VirtualHost>
SSLDisable
Keyfile "<MQWFDir>/WebClient/ihs.kdb"
SSLV2Timeout 100
SSLV3Timeout 1000
|
Be sure to use replace <IHSDir>
and
<MQWFDir>
with the values appropriate for your
environment.
- To run the Web Client using HTTPS:
- Start IBM HTTP Server.
- In the WebSphere Administrative Console, select the
'MQSeries Workflow WebClient' server from the Topology Tree and click
the start button.
- Start your Web browser and point it to
https://localhost/MQWFClient/RTC.html
This setup can be used to demonstrate the EmailHandler sample without being
connected to a network. It assumes that you have Microsoft Outlook Express
installed (usually comes with Microsoft Internet Explorer). Then download
and install the Apache mail server, JAMES, which is an open source project
that can be found at
http://java.apache.org.
- Go to the
<JamesDir>/bin
directory and start the
run.bat
script.
- Open a new console window and edit the newly created
<JamesDir>/conf/JAMES.conf.xml
file. Search for the
line reading
<account login="root" password=""/>
|
(it is marked with a 'FILL ME' tag; do not confuse it with the comment
line near the top of the file) and fill in the adminstrator's
password. You don't need to fill in the other fields marked with
the 'FILL ME' tag.
- Save your changes and go back to the console where you started the
run.bat
script. Press the enter key to start the mail
server.
- Open a telnet session on 'localhost', port '4555'. Select the
'Connect' - 'Remote system...' menu option of the Windows NT telnet
program to do so. You might want to turn on 'local echo' for the
telnet session (on Windows 2000, enter
set LOCAL_ECHO
on the telnet command line). Log on to JAMES with
user ID 'root' and the password you specified above.
- Create mail accounts for the Workflow users you want to send mail
to, for example, type
adduser admin password
to create
a mail account for the Workflow administrator. Type quit
when done.
- The mail server is now running and operable. In the future, just
invoke the
<JamesDir>/bin/run.bat
script to
start the mail server. This concludes the server-side configuration.
- Start Outlook Express and select the 'Tools' - 'Accounts...' menu
option.
- Click the 'Add' button and select the 'Mail...' option.
- Enter the descriptive name of the mail user, for example,
'Workflow Admin'. Then click 'Next'.
- Select the 'I already have an e-mail address ...' option and
enter 'admin@localhost' in the 'E-mail address' field. The user ID
specified here must match the one used with the
adduser
command above. The click 'Next'.
- Select 'POP3' as incoming mail server type. Enter 'localhost' in
both the 'Incoming mail server' and 'Outgoing mail server' fields, then
click 'Next'.
- Enter the account name and password as specified with the
adduser
command above. Select the 'Remember password'
option so that you do not have to enter the password every time
you receive your mail (this should be OK for demonstration
purposes). Click 'Next'.
- Click 'Finish' to create the new account.
- Select the newly created account (named 'localhost') on the 'Mail'
page of the dialog box and click the 'Properties' button.
- Enter a more meaningfull name for this account, for example,
'Workflow Admin'. Deselect the 'Include this account' box so this
account is not automatically synchronized and does not interfere with
your other uses of the mail client. Then press the 'OK' button.
- Close the 'Internet Accounts' dialog box. This concludes the
client-side configuration.
- When e-mail has been sent to this account, simply select the 'Workflow
Admin' option of the 'Send/Recv' button on the toolbar.
- Make sure you have VisualAge for Java installed and you have added the
'WebSphere Test Environment' Feature. If the 'WebSphere Test Environment' is not
installed
- Open the VA for Java Workbench
- Press 'F2' or select 'File' - 'Quick Start'
- Select 'Features' and 'Add Feature' and press 'Ok'.
- Select 'IBM WebSphere Test Environment' and press 'OK'.
In the following, <WTEDir
denotes the WebSphere Test Environment directory,
<VAJDir>/ide/project_resources/IBM WebSphere Test Environment
.
- Edit the
<WTEDir>/properties/default.servlet_engine
file
and add the following lines to the
<websphere-servlet-host name="default_host">
section:
<websphere-webgroup name="MQWFClient">
<description>MQSeries Workflow Web Client</description>
<document-root><MQWFDir>/WebClient/webpages</document-root>
<classpath><MQWFDir>/WebClient/webpages/WEB-INF</classpath>
<root-uri>/MQWFClient</root-uri>
<auto-reload enabled="true" polling-interval="3000"/>
<shared-context>false</shared-context>
</websphere-webgroup>
|
(note the leading forward slash for the document-root
element).
- Copy the
<WTEDir>/hosts/default_host/default_app/servlets/default_app.webapp
file to <MQWFDir>/WebClient/webpages/WEB-INF/MQWFClient.webapp
. Note that
this file must be in the Web application's classpath
(see above) and that its
basename must match the websphere-webgroup
's name.
- Edit the
<MQWFDir>/WebClient/webpages/WEB-INF/MQWFClient.webapp
file
and add the following lines:
<servlet>
<name>Main</name>
<code>com.ibm.workflow.servlet.client.Main</code>
<servlet-path>/servlet/Main</servlet-path>
<init-parameter>
<name>ConfigurationFile</name>
<value><MQWFDir>/WebClient/WebClient.properties</value>
</init-parameter>
</servlet>
|
- Import the MQSeries Workflow Java API into VA for Java:
- Open the VA for Java Workbench
- Select 'File' - 'Import'
- Enter
<MQWFDir>/bin/JAVA<VRMS>/fmcojagt.jar
as the
Filename
- Enter 'IBM MQSeries Workflow Java APIs' as the project name
- Check 'Create new/scratch editions of versioned projects/packages'
- Check 'Version imported classes and new editions of packages/projects'
- Select 'Version name' and enter your version number, for example '3.3.0.0'. Then
click 'Finish'
All Problems in the packages com.ibm.workflow.corba
and
com.ibm.workflow.corba.jni
can be safely ignored.
- Import the MQSeries Workflow Web Client into VA for Java:
- Open the VA for Java Workbench
- Select 'File' - 'Import'
- Enter
<MQWFDir>/WebClient/fmcohcli.jar
as the
Filename
- Enter 'IBM MQSeries Workflow Web Client' as the project name
- Check 'Create new/scratch editions of versioned projects/packages'
- Check 'Version imported classes and new editions of packages/projects'
- Select 'Version name' and enter your version number, for example '2.3'. Then
click 'Finish'
All problems in the packages com.ibm.workflow.servlet.client
,
com.ibm.workflow.servlet.sample
, and com.ibm.workflow.util.cfg
can be safely ignored.
- Configure the WebSphere Test Environment:
- Open the VA for Java Workbench and start the WTE using 'Workspace' - 'Tools' -
'WebSphere Test Environment...'
- Select 'Servlet Engine' in the tree on the left
- Click 'Edit Class Path...' and make sure that 'IBM MQSeries Workflow Java APIs'
and 'IBM MQSeries Workflow WebClient' are checked.
- To debug JSPs, make sure all 3 checkboxes in the 'JSP Settings' area
are checked ('Load servlets externally', 'Halt at the beginning of the service
method' and 'Enable JSP Source debugging').
- Select 'JSP Execution Monitor Options' in the tree on the left make sure that
both checkboxes are checked ('Enable monitoring JSP execution' and 'Retrieve
syntax error information').
- The default port used by the WTE is 8080, so start your Web browser and point it to
http://localhost:8080/MQWFClient/RTC.html
to run the Web Client within the WebSphere Test Environment.
© Copyright IBM Corporation 1999, 2001. All Rights Reserved.