Migrated Java Version of AWS COBOL CardDemo for Runtime Execution

CardDemo is an GitHub open-source mainframe COBOL/CICS application from Amazon . It showcases modernization patterns including migration, testing, and service enablement. The app simulates a credit card system so teams can explore AWS-based strategies.

We used the SoftwareMining translator to convert the CardDemo CICS COBOL code to Java and C#. The Java build runs on AWS and is available below.

BMS mapset Cocrdup.bms, map CCRDUPA

AWS CardDemo Cocrdup CCRDUPA

BMS mapset Coactup.bms, map CACTUPA

AWS CardDemo Coactup CACTUPA

Execute AWS CardDemo in Java

SoftwareMining Automatic Conversion Highlights

Evaluate the Translation Technology

The live CardDemo application demonstrates the behaviour of a COBOL application translated by SoftwareMining. To perform a more comprehensive technical evaluation, organizations can install the evaluation version of the translation tools, translate selected COBOL programs from their own applications, examine the generated Java or C# source code, and run the modernized application using temporary evaluation licences and runtime libraries. Our technical team can assist throughout the evaluation process.

Evaluate COBOL Converter Free Trial

CardDemo: COBOL, Java, and C# Side-by-Side

The sample (from program "COBIL00C") shows how the ACCOUNT-RECORD used in CICS READ is mapped to Object-Relational classes. It also shows how CICS/BMS fields become typed Field objects supporting operations such as setFocus() and setProtected. See BMS Program Cleanup for details.

READ-ACCTDAT-FILE.

EXEC CICS READ
  DATASET   (WS-ACCTDAT-FILE)
  INTO      (ACCOUNT-RECORD)
  LENGTH    (LENGTH OF ACCOUNT-RECORD)
  RIDFLD    (ACCT-ID)
  KEYLENGTH (LENGTH OF ACCT-ID)
  UPDATE
  RESP      (WS-RESP-CD)
  RESP2     (WS-REAS-CD)
END-EXEC

EVALUATE WS-RESP-CD
 WHEN DFHRESP(NORMAL)
   CONTINUE
 WHEN DFHRESP(NOTFND)
   MOVE 'Y' TO WS-ERR-FLG
   MOVE 'Account ID NOT found...' TO WS-MESSAGE
   MOVE -1 TO ACTIDINL OF COBIL0AI
   PERFORM SEND-BILLPAY-SCREEN
 WHEN OTHER
   DISPLAY 'RESP:' WS-RESP-CD 'REAS:' WS-REAS-CD
   MOVE 'Y' TO WS-ERR-FLG
   MOVE 'Unable to lookup Account...' TO WS-MESSAGE
   MOVE -1 TO ACTIDINL OF COBIL0AI
   PERFORM SEND-BILLPAY-SCREEN
END-EVALUATE.
private void readAcctdatFile() {
  accountRecord.assignKeyLength(accountRecord.getAcctId().lengthOf());
  accountRecord.assignResponseCodeField(variables.getWsRespCd());
  accountRecord.read();
  variables.setReasCd(accountRecord.getResponse2Code());

  if (variables.getWsRespCd() == CicsCodes.NORMAL) {
    // ok
  } else if (variables.getWsRespCd() == CicsCodes.NOTFND) {
    variables.setErrFlg("Y");
    variables.setMessage("Account ID NOT found...");
    cobil0ai.getActidin().setFocus();
    sendBillpayScreen();
  } else {
    DisplayHelper.display(this, "RESP:" + variables.getWsRespCdAsStr()
        + " REAS:" + variables.getReasCdAsStr());
    variables.setErrFlg("Y");
    variables.setMessage("Unable to lookup Account...");
    cobil0ai.getActidin().setFocus();
    sendBillpayScreen();
  }
}
private void ReadAcctdatFile() {
  accountRecord.AssignKeyLength(accountRecord.AcctId.LengthOf());
  accountRecord.AssignResponseCodeField(variables.WsRespCd);
  accountRecord.Read()();
  variables.ReasCd = accountRecord.GetResponse2Code();

  if (variables.WsRespCd == CicsCodes.NORMAL) {
    // ok
  } else if (variables.WsRespCd == CicsCodes.NOTFND) {
    variables.ErrFlg = "Y";
    variables.Message = "Account ID NOT found...";
    cobil0ai.Actidin.SetFocus();
    SendBillpayScreen();
  } else {
    DisplayHelper.Display(this, "RESP:" + variables.WsRespCd
        + " REAS:" + variables.ReasCd);
    variables.ErrFlg = "Y";
    variables.Message = "Unable to lookup Account...";
    cobil0ai.Actidin.SetFocus();
    SendBillpayScreen();
  }
}

This example shows OR mapping for ACCOUNT-RECORD and conversion of BMS fields to typed UI fields (for example, setFocus and setProtected). See the full guide: BMS Program Cleanup.

BMS Map Views Translated to JSP/HTML

The images below show design-time HTML views of BMS maps. At runtime, Java builds render as JSP; C# builds render as HTML.

Test drive the Java translation of CardDemo