...

IBM COBOL for AIX Integrating IBM COBOL for AIX with Java

by user

on
Category: Documents
13

views

Report

Comments

Transcript

IBM COBOL for AIX Integrating IBM COBOL for AIX with Java
IBM COBOL for AIX
Integrating IBM COBOL for AIX with Java
By: Gaby Baghdadi
Level: Introductory
April 2010
Integrating IBM COBOL for AIX with Java, Page 2 of 32
Contents
IBM COBOL for AIX .................................................................................................. 1
About this Tutorial ................................................................................................... 3
Objectives .............................................................................................................. 3
Prerequisites ........................................................................................................... 3
System Requirements............................................................................................... 3
Glossary ................................................................................................................. 4
Start the Terminal Emulator to AIX System.................................................................. 5
Get Started with IBM COBOL Compiler Demo ............................................................... 5
COBOL class used with a COBOL client ........................................................................ 8
COBOL class used with a Java client ......................................................................... 10
COBOL class run using the java command ................................................................. 12
Accessing existing procedural COBOL code from Java .................................................. 15
Catching of Java exceptions from COBOL................................................................... 18
Multithreading in COBOL and Java ............................................................................ 21
Passing Java data types between a COBOL program and Java methods.......................... 24
Retrieving and setting JVM system properties in a COBOL program ............................... 27
COBOL explicitly creating a JVM, then re-using it from another COBOL program.............. 29
Conclusion ............................................................................................................ 32
Trademarks........................................................................................................... 32
Resources ............................................................................................................. 32
Copyright © 2010, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®.
Integrating IBM COBOL for AIX with Java, Page 3 of 32
Before you start
About this Tutorial
This set of tutorials demonstrates the integration of COBOL with Java, available in IBM
COBOL for AIX compiler. The principles demonstrated here also show how to combine
existing COBOL assets with Java to modernize existing applications.
Objectives
•
Use IBM COBOL Compiler for AIX and Java to discover flexibility available for
integrating the two languages.
•
Total time: 30 minutes
Prerequisites
•
•
Basic COBOL programming skills
Basic Java programming skills
System Requirements
http://www-01.ibm.com/software/awdtools/cobol/aix/sysreq/
Copyright © 2010, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®.
Integrating IBM COBOL for AIX with Java, Page 4 of 32
Glossary
IBM COBOL for AIX: The IBM® COBOL for AIX allows you to use your existing COBOL
code to upgrade your applications with the newest technologies. The goal of COBOL for AIX
is to enable developers to leverage over 3 decades' worth of applications in new endeavors.
It delivers needed COBOL function to continue integration of COBOL and Web-oriented
business processes.
Copyright © 2010, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®.
Integrating IBM COBOL for AIX with Java, Page 5 of 32
Getting Started
Start the Terminal Emulator to AIX System
Figure 1 Get Started
Double click the “Launch AIX” icon on the desktop (See Figure 1) to start the character
terminal to AIX system.
Get Started with IBM COBOL Compiler Demo
A successful login will result with the user presented with a menu of the demos hosted on
the server. Type 3 and press the Enter key to select the “IBM COBOL with Java on AIX”
demo. See Figure 2 Login
Figure 2 Login
Copyright © 2010, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®.
Integrating IBM COBOL for AIX with Java, Page 6 of 32
Figure 3 Demo Prepared
Note:
Starting another command window will start the demonstration setup of your
environment. This will result in loss of any work done in your home directory. This
will impact any progress you have made on demo steps going forward.
This demo does not require more than one terminal window. However, if you prefer
more than one terminal window then you may open them before going forward.
On the terminal window, you will see important information and the directory path to the
compiler invocation command (See Figure 3 Demo Prepared oval red). In your home
directory there are nine sub-directories (See Figure 3 Demo Prepared rectangle red), each
sub-directory contains a demonstration of a feature that can be used when integrating IBM
COBOL for AIX with Java. This document steps over each demo in its own section; you may
start any section in the order that you prefer.
The terminal window is now ready for commands (See Figure 3 Login arrow). Your home
directory contains all the necessary source code and scripts for demonstration. Type the ls
command to see the directory content (See Figure 4 Contents).
Copyright © 2010, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®.
Integrating IBM COBOL for AIX with Java, Page 7 of 32
Command:
ls
Figure 4 Contents
These nine directories
Demo directory
1_cobolClass
2_cobolJava
3_javaCommand
4_accessingCobol
5_catchingException
6_multithreading
7_passingData
8_setJVMproperties
9_JvmCreateReuse
contain following demos
Demo objective
Demonstrates COBOL class used with a COBOL client.
Demonstrates COBOL class used with a Java client.
Demonstrates COBOL class run using the java command.
Demonstrates accessing existing procedural COBOL code from Java.
Demonstrates catching of Java exceptions from COBOL.
Demonstrates multithreading in COBOL and Java
Demonstrates Passing Java data types between a COBOL program
and Java methods
Demonstrates retrieving and setting JVM system properties in a
COBOL program
Demonstrates COBOL explicitly creating a JVM, then re-using it from
another COBOL program
Screen images in the following demo sections are recorded using makefiles to
compile and link. Scripts are used to launch demo programs. Users are encouraged
to try the challenge of compiling, linking and running the demo program using
actual commands. Actual commands are given at the end of each step under “Hint
for User Challenge” heading.
Copyright © 2010, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®.
Integrating IBM COBOL for AIX with Java, Page 8 of 32
COBOL class used with a COBOL client
Highlights:
- Program entry point is a COBOL client program ‘cblclient.cbl’ which instantiates
an instance of class ‘cblclass’
- ‘cblclass’ is a class defined in COBOL ‘cblclass.cbl’
- The COBOL client then invokes a method ‘credit’ on the new ‘cblclass’ object
JNI services used:
- NewGlobalRef
Steps:
1. Change directory to 1_cobolClass and list contents. See figure 5 Change directory
1_cobolClass
Command:
cd 1_cobolClass
and
ls
Figure 5 Change directory 1_cobolClass
2. Compile and link cbclass.cbl and cbclient.cbl. See figure 6 Make 1_cobolClass
Command:
make
Copyright © 2010, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®.
Integrating IBM COBOL for AIX with Java, Page 9 of 32
Figure 6 Make 1_cobolClass
Hint for User challenge:
cob2_j -c cblclass.cbl
# Generates Java program cblclass among other artifacts
javac cblclass.java
cob2_j -o cblclient cblclient.cbl
cob2_j -o libcblclass.so -bnoentry -bexpall -bM:SRE cblclass.o
3. Run cblclient program. See figure 7 run 1_cobolClass
Command:
run.ksh
Figure 7 Run 1_cobolClass
Hint for User challenge:
cblclient
Use more command to see programming details of COBOL client program
‘cblclient.cbl’ and Definition of COBOL class in ‘cblclass.cbl’.
Hint:
more cblclient.cbl
more cblclass.cbl
4. Change the current directory back to home directory
Command:
cd ..
This completes this section of “COBOL class used with a COBOL client”.
Copyright © 2010, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®.
Integrating IBM COBOL for AIX with Java, Page 10 of 32
COBOL class used with a Java client
Highlights:
- Program entry point is a Java class ‘javamain’. The program ‘javamain.java’
instantiates an instance of class ‘cblclass’.
- ‘cblclass’ is a class defined in COBOL ‘cblclass.cbl’
- The Java client invokes a method ‘credit’ on ‘cblclass’ object
JNI services used:
- NewGlobalRef
Steps:
1. Change directory to 2_cobolJava and list contents. See figure 8 Change directory
2_cobolJava
Command:
cd 2_cobolJava
and
ls
Figure 8 Change directory 2_cobolJava
2. Compile and link cbclass.cbl and cbclient.cbl. See figure 6 Make 2_cobolJava
Command:
make
Figure 9 Make 2_cobolJava
Copyright © 2010, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®.
Integrating IBM COBOL for AIX with Java, Page 11 of 32
Hint for User challenge:
cob2_j -c cblclass.cbl
# Generates Java program cblclass among other artifacts
cob2_j -o libcblclass.so -bnoentry -bexpall -bM:SRE cblclass.o
javac cblclass.java
javac javamain.java
3. Run Java program javamain. See figure 10 run 2_cobolJava
Command:
run.ksh
Figure 10 Run 2_cobolJava
Hint for User challenge:
java javamain
Use more command to see programming details of Java client program ‘javamain.java’
and Definition of COBOL class in ‘cblclass.cbl’.
Hint:
more javamain.cbl
more cblclass.cbl
4. Change the current directory back to home directory
Command:
cd ..
This completes this section of “COBOL class used with a Java client”.
Copyright © 2010, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®.
Integrating IBM COBOL for AIX with Java, Page 12 of 32
COBOL class run using the java command
Highlights:
- COBOL class defines a factory static method ‘main’, which enables the COBOL
program to be run using the java command.
- ‘main’ method in COBOL class uses JNI array services to extract the command line
arguments
- Defining and using overloaded methods in COBOL
JNI services used:
- GetArrayLength
- GetObjectArrayElement
- GetStringChars
- GetStringLength
- ReleaseStringChars
Steps:
1. Change directory to 3_javaCommand and list contents. See figure 11 Change directory
3_javaCommand
Command:
cd 3_javaCommand
and
ls
Figure 11 Change directory 3_javaCommand
2. Compile and link oo17.cbl. See figure 12 Make 3_javaCommand
Command:
make
Copyright © 2010, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®.
Integrating IBM COBOL for AIX with Java, Page 13 of 32
Figure 12 Make 3_javaCommand
Hint for User challenge:
cob2_j -c oo17.cbl # Generates Java program oo17 among other artifacts
cob2_j -o libcblclass.so -bnoentry -bexpall -bM:SRE oo17.o
javac oo17.java
3. Run Java program oo17. See figure 13 run 3_JavaCommand
oo17.class expects three quoted string as an argument.
Example of command line arguments:
“aaa” “bbb” “ccc”
Command:
run.ksh
Copyright © 2010, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®.
Integrating IBM COBOL for AIX with Java, Page 14 of 32
Figure 13 Run 3_javaCommand
Hint for User challenge:
java oo17 "aaa" "bbb" "ccc"
Use more command to see programming details of COBOL program ‘oo17.cbl’.
Hint:
more oo17.cbl
4. Change the current directory back to home directory
Command:
cd ..
This completes this section of “COBOL class run using the java command”.
Copyright © 2010, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®.
Integrating IBM COBOL for AIX with Java, Page 15 of 32
Accessing existing procedural COBOL code from Java
Highlights:
The entry point is a Java class main ‘oofdriver’. ‘oofdriver’ invokes a COBOL class factory
method ‘oofw.cbl’. ‘oofw.cbl’ then calls a separately compiled procedural COBOL program
‘oofw2.cbl’. ‘oofw2.cbl’ then calls another separately compiled procedural COBOL program
‘oofsub.cbl’.
oofw.cbl and oofw2.cbl programs are compiled with the DYNAM compiler directive. DYNAM
directive causes non-nested, separately compiled programs (oofw2 and oofsub) to be
loaded for CALL dynamically at runtime (and deleted for CANCEL).
No JNI services are used.
Steps:
1. Change directory to 4_accessingCobol and list contents. See figure 14 Change directory
4_accessingCobol
Command:
cd 4_accessingCobol
and
ls
Figure 14 Change directory 4_accessingCobol
2. Compile and link oofdriver.java, oofsub.cbl, oofw.cbl and oofw2.cbl. See figure 15 Make
4_accessingCobol
Command:
make
Copyright © 2010, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®.
Integrating IBM COBOL for AIX with Java, Page 16 of 32
Figure 15 Make 4_accessingCobol
Hint for User challenge:
cob2 -c oofw2.cbl
# Note compiled as normal COBOL program using cob2
cob2 -o oofw2 oofw2.o
cob2_j -c oofw.cbl
cob2_j -o liboofw.a -bM:SRE -bnoentry -bexpall oofw.o
javac oofw.java
cob2 -c oofsub.cbl
# Note compiled as normal COBOL program using cob2
cob2 -o OOFSUB oofsub.o
javac oofdriver.java
3. Run Java program oofdriver. See figure 16 run 4_accessingCobol
Running this program requires setting COBPATH environment variable for runtime to be
able to find and load other programs.
Command:
run.ksh
Copyright © 2010, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®.
Integrating IBM COBOL for AIX with Java, Page 17 of 32
Figure 16 Run 4_accessingCobol
Hint for User challenge:
export OCOBPATH=$COBPATH # Save present value of COBPATH
export COBPATH=.
# Set the value of COBPATH to current directory
java oofdriver
# Run the java program
export COBPATH=$OCOBPATH
# Restore the original value of COBPATH after the run
Use more command to see programming details of oofdriver.java, oofsub.cbl, oofw.cbl
and oofw2.cbl programs.
Hint:
more oofdriver.cbl
more oofsub.cbl
more oofw.cbl
more oofw2.cbl
4. Change the current directory back to home directory
Command:
cd ..
This completes this section of “Accessing existing procedural COBOL code from Java”.
Copyright © 2010, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®.
Integrating IBM COBOL for AIX with Java, Page 18 of 32
Catching of Java exceptions from COBOL
Highlights:
Java class defines these methods:
- jidivide1: divides by zero, catches the exception
- jidivide2: divides by zero, catches the exception, then throws it
- jidivide3: divides by zero, doesn't catch the exception
COBOL program calls JNI's ExceptionOccurred(), ExceptionDescribe(),
ExceptionClear() and printStackTrace()API to retrieve details of Java exception after
invoking the Java method in following manner.
-
Invokes jidivide1, verifies that there are no pending exceptions
Invokes jidivide2, verifies that there is a pending exception, prints a debugging
message about the exception and clears the exception
Invokes jidivide3, verifies that there is a pending exception, prints a debugging
message about the exception and clears the exception
JNI services used:
- ExceptionOccurred
- ExceptionDescribe
- ExceptionClear
Steps:
1. Change directory to 5_catchingException and list contents. See figure 17 Change
directory 5_catchingException
Command:
cd 5_catchingException
and
ls
Figure 17 Change directory 5_catchingException
2. Compile and link jidic01driver.cbl and jidiv01j.java. See figure 18 Make
5_catchingException
Command:
make
Copyright © 2010, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®.
Integrating IBM COBOL for AIX with Java, Page 19 of 32
Figure 18 Make 5_catchingException
Hint for User challenge:
cob2_j -c jidiv01driver.cbl
cob2_j -o jidiv01driver jidiv01driver.o
javac jidiv01j.java
3. Run COBOL program jidiv01driver. See figure 19 run 5_catchingException
Command:
run.ksh
Figure 19 Run 5_catchingException
Copyright © 2010, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®.
Integrating IBM COBOL for AIX with Java, Page 20 of 32
Hint for User challenge:
jidiv01driver
Use more command to see programming details of jidic01driver.cbl and jidiv01j.java
programs.
Hint:
more jidic01driver.cbl
more jidiv01j.java
4. Change the current directory back to home directory
Command:
cd ..
This completes this section of “Catching of Java exceptions from COBOL”.
Copyright © 2010, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®.
Integrating IBM COBOL for AIX with Java, Page 21 of 32
Multithreading in COBOL and Java
Highlights:
COBOL program defines a "NewThread" class as a subclass of java.lang.Thread.
NewThread class defines the following factory (static) and instance methods:
Factory methods:
- CreateNewThread: creates a new NewThread instance, calls its Init() method, and
returns the new instance object to the caller (Java)
Instance methods:
- Init: initializes the NewThread instance data
- run: overrides java.lang.Thread's run() method (called when the thread is
started)
Java class main():
- Calls NewThread.CreateNewThread() to create a number (five) of threads
- Calls NewThread.start() (inherited from base java.lang.Thread), to start
- each thread
- Calls NewThread.join() (from base java.lang.Thread) to wait for each thread to
terminate
JNI services used:
- NewGlobalRef
- ExceptionOccurred
- ExceptionDescribe
- ExceptionClear
Steps:
1. Change directory to 6_multithreading and list contents. See figure 20 Change directory
6_multithreading
Command:
cd 6_multithreading
and
ls
Copyright © 2010, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®.
Integrating IBM COBOL for AIX with Java, Page 22 of 32
Figure 20 Change directory 6_multithreading
2. Compile and link Driver.java and NewThread.cbl. See figure 21 Make 6_multithreading
Command:
make
Figure 21 Make 6_multithreading
Hint for User challenge:
cob2_j -c NewThread.cbl
cob2_j -o libNewThread.so NewThread.o -bexpall
javac Driver.java
3. Run Java program Driver.class. See figure 22 run 6_multithreading
Command:
run.ksh
Copyright © 2010, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®.
Integrating IBM COBOL for AIX with Java, Page 23 of 32
Figure 22 Run 6_multithreading
Hint for User challenge:
java Driver
Use more command to see programming details of Driver.java and NewThread.cbl
programs.
Hint:
more Driver.java
more NewThread.cbl
4. Change the current directory back to home directory
Command:
cd ..
This completes this section of “Multithreading in COBOL and Java”.
Copyright © 2010, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®.
Integrating IBM COBOL for AIX with Java, Page 24 of 32
Passing Java data types between a COBOL program and Java
methods
Highlights:
Demonstrates passing the following Java data types between a COBOL program and Java
methods:
-
boolean, byte, char, int, short, long, float, double, String
JNI services used:
- NewStringUTF
- GetStringUTFChars
- GetStringUTFLength
Steps:
1. Change directory to 7_passingData and list contents. See figure 23 Change directory
7_passingData
Command:
cd 7_passingData
and
ls
Figure 23 Change directory 7_passingData
2. Compile and link oo3c.java and oo3driver.cbl. See figure 24 Make 7_passingData
Command:
make
Copyright © 2010, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®.
Integrating IBM COBOL for AIX with Java, Page 25 of 32
Figure 24 Make 7_passingData
Hint for User challenge:
cob2_j -c oo3driver.cbl
cob2_j -o oo3driver oo3driver.o
javac oo3c.java
3. Run COBOL program oo3driver. See figure 25 run 7_passingData
Command:
run.ksh
Figure 25 Run 7_passingData
…
…
Copyright © 2010, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®.
Integrating IBM COBOL for AIX with Java, Page 26 of 32
Hint for User challenge:
oo3driver
Use more command to see programming details of oo3c.java and oo3driver.cbl
programs.
Hint:
more oo3c.java
more oo3driver.cbl
4. Change the current directory back to home directory
Command:
cd ..
This completes this section of “Passing Java data types between a COBOL program and
Java methods”.
Copyright © 2010, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®.
Integrating IBM COBOL for AIX with Java, Page 27 of 32
Retrieving and setting JVM system properties in a COBOL program
Highlights:
-
COBOL program customizes the initialization of the JVM, including defining new Java
system properties, by setting COBOL's runtime environment variable
COBJVMINITOPTIONS
-
COBOL program then extracts the values of certain Java system properties, including
JVM's own (e.g. java.version), as well as those that were set through environment
variable COBJVMINITOPTIONS
JNI services used:
- GetStringChars
- GetStringLength
- NewString
Steps:
1. Change directory to 8_setJVMproperties and list contents. See figure 26 Change
directory 8_setJVMproperties
Command:
cd 8_setJVMproperties
and
ls
Figure 26 Change directory 8_setJVMproperties
2. Compile and link oo16.cbl. See figure 27 Make 8_setJVMproperties
Command:
make
Copyright © 2010, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®.
Integrating IBM COBOL for AIX with Java, Page 28 of 32
Figure 27 Make 8_setJVMproperties
Hint for User challenge:
cob2_j -o oo16 oo16.cbl
3. Run COBOL program oo16. See figure 28 run 8_setJVMproperties
Command:
run.ksh
Figure 28 Run 8_setJVMproperties
Hint for User challenge:
export "COBJVMINITOPTIONS=Djava.naming.factory.initial=com.ibm.websphere.naming.WsnInitialContextFactory
-Dxxx=aaa(bbb,ccc,ddd) -verbose:gc" # Set environment variable
oo16
Use more command to see programming details of oo16.cbl program and run.ksh script.
Hint:
more oo16.cbl
more run.ksh
4. Change the current directory back to home directory
Command:
cd ..
Copyright © 2010, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®.
Integrating IBM COBOL for AIX with Java, Page 29 of 32
This completes this section of “Retrieving and setting JVM system properties in a COBOL
program”.
COBOL explicitly creating a JVM, then re-using it from another
COBOL program
Highlights:
COBOL program explicitly creates a JVM, calls another COBOL program that uses OO, and
verifies that it is reusing the existing JVM.
JNI services used:
- JNI_CreateJavaVM
Steps:
1. Change directory to 9_JvmCreateReuse and list contents. See figure 29 Change
directory 9_JvmCreateReuse
Command:
cd 9_JvmCreateReuse
and
ls
Figure 29 Change directory 9_JvmCreateReuse
2. Compile and link oo2b.cbl, oo2driver.cbl and oo2c.java. See figure 30 Make
9_JvmCreateReuse
Command:
make
Copyright © 2010, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®.
Integrating IBM COBOL for AIX with Java, Page 30 of 32
Figure 30 Make 9_JvmCreateReuse
Hint for User challenge:
cob2_j -c oo2driver.cbl
cob2_j -c oo2b.cbl
cob2_j -o oo2driver oo2driver.o oo2b.o
javac oo2c.java
3. Run COBOL program oo16. See figure 31 run 9_JvmCreateReuse
Command:
run.ksh
Figure 31 Run 9_JvmCreateReuse
Hint for User challenge:
oo2driver
Use more command to see programming details of oo2b.cbl, oo2driver.cbl and oo2c.java.
Hint:
more oo2b.cbl
more oo2driver.cbl
more oo2c.java
Copyright © 2010, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®.
Integrating IBM COBOL for AIX with Java, Page 31 of 32
4. Change the current directory back to home directory
Command:
cd ..
This completes this section of “COBOL explicitly creating a JVM, then re-using it from
another COBOL program”.
Copyright © 2010, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®.
Integrating IBM COBOL for AIX with Java, Page 32 of 32
What you have learned
In the sections above you learned how to:
•
•
•
Use the IBM COBOL compiler’s Java features
Use the Java features to take advantage of old or legacy COBOL source code in
modern applications.
Enhance COBOL programs by taking advantage of new Java source code.
Conclusion
This concludes the tutorial on using the IBM COBOL for AIX compiler. This tutorial has
shown how to integrate COBOL with Java to take advantage of object oriented programming
with existing software assets in COBOL to modernize and combine business critical
applications.
Trademarks
IBM and the IBM logo are trademarks of International Business Machines Corporation in the
United States, other countries or both.
Microsoft, Windows, Windows NT, and the Windows logo are trademarks of Microsoft
Corporation in the United States, other countries, or both.
Other company, product and service names may be trademarks or service marks of others.
Resources
Community
COBOL Café
http://www-949.ibm.com/software/rational/cafe/community/cobol
Learn
http://www-01.ibm.com/software/awdtools/cobol/aix/library/
Copyright © 2010, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®.
Fly UP