Description of the Exercise
Provide a command-line (or graphical) interactive Java front-end to the legacy COBOL application SMPLCALC.cbl by implementing the program architecture illustrated in Figure 1. Before starting the exercise, download and extract the archive SMPLCALC.cbl Legacy COBOL Program Artifacts.

Figure 1. Legacy Software Reengineering and Reuse Exercise Architecture
Follow these steps to complete the exercise:
- Locate the interface data structure for SMPLCALC.cbl in the copybook (source include file) SMPLCALC.cpy. There is only one data structure in the copybook.
- Create an XML Schema which represents all of the data in the SMPLCALC-INTERFACE COBOL data structure. Instead of writing this by hand, you can use the Micro Focus Net Express CBL2XML wizard [37].
- Write a Java interface ISimpleCalculator.java for three computation types supported by SMPLCALC.cbl using appropriate method signatures:
- long doAdd(int, int) throws java.lang.ArithmeticException.
- long doSubtract(int, int) throws Java.lang.ArithmeticException
- long doMultipy(int, int) throws Java.lang.ArithmeticException
- Write a Java class JSimpleCalculator.java that implements the interface defined in ISimpleCalculator.java and provides a user interface for:
- Specifying which computation (add, sub, mul) is desired.
- Specifying the operands to the computation.
- Displaying the result of the computation (can be an error).
- Use the Java command-line utility xjc, in combination with the XML Schema created in Step 2, to generate Java to XML marshalling code (JAXB). Update JSimpleCalculator.java to call this marshalling code.
- Write a small C/C++ JNI program Java2CblXmlBridge.cpp which exports a method “Java2SmplCalc” which:
- Invokes XML2CALC.cbl (see Step 7), passing the XML document received from JSimpleCalculator.java.
- Returns the XML document generated by XML2CALC.cbl (see Step 7) on return from SMPLCALC.cbl to JSimpleCalculator.java.
- Write a COBOL program XML2CALC.cbl which:
- Marshalls XML received from the Java2CblXmlBridge.cpp, based on the XML Schema created in Step 2, into SMPLCALC-INTERFACE.
- Invokes SMPLCALC.cbl, passing SMPLCALC-INTERFACE by reference.
- Marshalls SMPLCALC-INTERFACE back to XML before returning to Java2CblXmlBridge.cpp.
- Compile XML2CALC.cbl and link it with the machine/object code for SMPLCALC.cbl (SMPLCALC.obj).
To simulate a situation where only partial source code for an application is available, do not recompile SMPLCALC.cbl; use the object file (machine code) that comes with this exercise instead.
- Create a DLL that can be loaded an used by JSimpleCalculator.java by compiling and linking Java2CblXmlBridge.cpp with the object code for XML2CALC.cbl.
- Update JSimpleCalculator.java to use the XJC-generated marshalling code to send/receive XML through the JNI method defined in Step 6 and display the results of the computations performed downstream by SMPLCALC.cbl.
Software for the Exercise
SMPLCALC.cbl Legacy COBOL Program Artifacts
Java SE Development Kit 6u13 (Java compiler and runtime)
Visual Studio C++ (C/C++ compiler and runtime)
Micro Focus Net Express 5.1 with .NET (COBOL compiler and runtime)
Solution to the Exercise:
Legacy Software Reengineering and Reuse Exercise Solution Code
The following screen captures demonstrate execution of the solution code. Feel free to create a graphical user interface using Java Swing in your own solution.

Figure 2. Legacy Software Reengineering and Reuse Solution Input

Figure 3. Legacy Software Reengineering and Reuse Solution Output