Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Mainframe to Quarkus Devoxx Fr

Mainframe to Quarkus Devoxx Fr

Slides of Devoxx France Mainframe to Quarkus Deep Dive I gave with Chaker Fezai and Saïd Boudjelda.
Source of the slides are here: https://github.com/SCIAM-FR/mainframe-to-quarkus

Avatar for Antoine Sabot-Durand

Antoine Sabot-Durand

April 21, 2025
Tweet

More Decks by Antoine Sabot-Durand

Other Decks in Programming

Transcript

  1. Antoine Sabot-Durand Java Champion Engineering director @SCIAM Former CDI spec

    lead Former MicroProfile Health and Fault Tolerance spec lead Follow me on bs: @antoine.sabot-durand.net SCIAM - 2025
  2. Saïd Boudjelda Tech lead @SCIAM Senior Backend Engineer in my

    daily life Open source contributor (May be, I can say that now) Some passion for FP and Distributed Systems Follow me: @bmscomp SCIAM - 2025
  3. Chaker Fezai Tech lead @SCIAM Kogito and BPMN expert Active

    tech speaker Experienced Java Backend Engineer Follow me: @chakerfezai.bsky.social SCIAM - 2025
  4. Agenda  Introduction context and Architecture [Antoine]  From EBCDIC

    to ASCII [Said]  Management of K8s jobs for the Ignite cluster. [Chaker]  Massive ingestion strategies [Said]  Kogito and BPMN for business workflow and orchestration [Chaker]  Other technologies used on the project [Antoine]  UIs for managing ingestion jobs in K8s and Kogito [Chaker] SCIAM - 2025
  5. Disclaimers This Story is true Some names have been changed

    by customer request Some facts have been simplified for the sake of clarity SCIAM - 2025
  6. Disclaimers This Story is true Some names have been changed

    by customer request Some facts have been simplified for the sake of clarity We won’t talk about accounting business logic SCIAM - 2025
  7. Disclaimers This Story is true Some names have been changed

    by customer request Some facts have been simplified for the sake of clarity We won’t talk about accounting business logic We are not Mainframe experts SCIAM - 2025
  8. Once upon a time…​ The Blue Orange insurance group decided

    to move its accountancy system to from the mainframe to microservices. SCIAM - 2025
  9. Once upon a time…​ The Blue Orange insurance group decided

    to move its accountancy system to from the mainframe to microservices. We’re talking about 100 subsidiaries, 1 billion accounts, and 200 million movements per day…​ SCIAM - 2025
  10. Once upon a time…​ The Blue Orange insurance group decided

    to move its accountancy system to from the mainframe to microservices. We’re talking about 100 subsidiaries, 1 billion accounts, and 200 million movements per day…​ The goal was to be able to process all this data as quickly as possible and to be able to scale the system. SCIAM - 2025
  11. Once upon a time…​ The Blue Orange insurance group decided

    to move its accountancy system to from the mainframe to microservices. We’re talking about 100 subsidiaries, 1 billion accounts, and 200 million movements per day…​ The goal was to be able to process all this data as quickly as possible and to be able to scale the system. This talk will give you some insight on how we did it. SCIAM - 2025
  12. WAP Application at Blue Orange WAP (Worldwide Accounting Platform) is

    the mainframe application that handles all the accounting of the group SCIAM - 2025
  13. WAP Application at Blue Orange WAP (Worldwide Accounting Platform) is

    the mainframe application that handles all the accounting of the group It is a monolithic COBOL application that has been in production for nearly 40 years SCIAM - 2025
  14. WAP Application at Blue Orange WAP (Worldwide Accounting Platform) is

    the mainframe application that handles all the accounting of the group It is a monolithic COBOL application that has been in production for nearly 40 years It receives a huge amount of data from all the subsidiaries SCIAM - 2025
  15. WAP Application at Blue Orange WAP (Worldwide Accounting Platform) is

    the mainframe application that handles all the accounting of the group It is a monolithic COBOL application that has been in production for nearly 40 years It receives a huge amount of data from all the subsidiaries A batch process runs every night to process all the data and generate the accounting entries SCIAM - 2025
  16. Wap’s UP project Wap’s up was launched at the end

    of 2020 The goal was to rewrite the WAP application in Java and to move it to a microservices architecture SCIAM - 2025
  17. Wap’s UP project Wap’s up was launched at the end

    of 2020 The goal was to rewrite the WAP application in Java and to move it to a microservices architecture The project is expected to be completed in 2030/2031 SCIAM - 2025
  18. Wap’s UP project Wap’s up was launched at the end

    of 2020 The goal was to rewrite the WAP application in Java and to move it to a microservices architecture The project is expected to be completed in 2030/2031 the first phase of the project (biggest) will be in service in autumn SCIAM - 2025
  19. Wap’s UP project Wap’s up was launched at the end

    of 2020 The goal was to rewrite the WAP application in Java and to move it to a microservices architecture The project is expected to be completed in 2030/2031 the first phase of the project (biggest) will be in service in autumn The team is composed of: 12 Java Devs, 5 teradata devs, 4 front devs, 10 Business Analysts, 1 tech lead, 1 PMO and 2 Managers SCIAM - 2025
  20. What’s a mainframe?  A mainframe is a large computer

    that is used for large-scale computing purposes that require greater availability and security than a smaller-scale machine can offer. SCIAM - 2025
  21. What’s a mainframe?  A mainframe is a large computer

    that is used for large-scale computing purposes that require greater availability and security than a smaller-scale machine can offer.  Mainframes are used primarily by large organizations for critical applications, bulk data processing, and transaction processing. SCIAM - 2025
  22. What’s a mainframe?  A mainframe is a large computer

    that is used for large-scale computing purposes that require greater availability and security than a smaller-scale machine can offer.  Mainframes are used primarily by large organizations for critical applications, bulk data processing, and transaction processing.  Main language is COBOL (Common Business Oriented Language) and OS is Z/OS SCIAM - 2025
  23. Mainframes the good parts Reliability: They are very resilient, with

    built-in redundancy and failover capabilities. SCIAM - 2025
  24. Mainframes the good parts Reliability: They are very resilient, with

    built-in redundancy and failover capabilities. Availability: They can run for long periods of time without downtime. SCIAM - 2025
  25. Mainframes the good parts Reliability: They are very resilient, with

    built-in redundancy and failover capabilities. Availability: They can run for long periods of time without downtime. Security: They have robust security features, including encryption, access controls, and auditing capabilities. SCIAM - 2025
  26. Mainframes the good parts Reliability: They are very resilient, with

    built-in redundancy and failover capabilities. Availability: They can run for long periods of time without downtime. Security: They have robust security features, including encryption, access controls, and auditing capabilities. Scalability: They can handle large volumes of transactions and data processing, making them suitable for high-demand applications. SCIAM - 2025
  27. Mainframes the bad parts Cost: They are expensive to maintain

    and operate. Talent: shortage of skilled mainframe operators and developers (COBOL). SCIAM - 2025
  28. Mainframes the bad parts Cost: They are expensive to maintain

    and operate. Talent: shortage of skilled mainframe operators and developers (COBOL). Vendor lock-in: IBM has a monopoly on the mainframe market. SCIAM - 2025
  29. Mainframes the bad parts Cost: They are expensive to maintain

    and operate. Talent: shortage of skilled mainframe operators and developers (COBOL). Vendor lock-in: IBM has a monopoly on the mainframe market. Lack of flexibility: They are often seen as rigid and inflexible, making it difficult to adapt to changing business needs. SCIAM - 2025
  30. Requirement to move from mainframe Courage: rewriting something that works

    is a big deal! Value Creation: The new system must be able to create value for the business. SCIAM - 2025
  31. Requirement to move from mainframe Courage: rewriting something that works

    is a big deal! Value Creation: The new system must be able to create value for the business. A good use case: If the system you want to migrate does only data ingestion and simple consultation, it is not worth the effort. SCIAM - 2025
  32. Strategies to move from mainframe Code translation: Translate the code

    from COBOL to Java (or any other language). You don’t change the architecture, you just change the language, and you generate non-maintainable code. SCIAM - 2025
  33. Strategies to move from mainframe Code translation: Translate the code

    from COBOL to Java (or any other language). You don’t change the architecture, you just change the language, and you generate non-maintainable code. Monolith wrapping: Wrap the application in a concrete dome. Features are exposed as API without touching the content You don’t change the architecture, you just change the language, and you generate non-maintainable code. SCIAM - 2025
  34. Strategies to move from mainframe Code translation: Translate the code

    from COBOL to Java (or any other language). You don’t change the architecture, you just change the language, and you generate non-maintainable code. Monolith wrapping: Wrap the application in a concrete dome. Features are exposed as API without touching the content You don’t change the architecture, you just change the language, and you generate non-maintainable code. Code rewriting: Rewrite the code from scratch. You change the architecture and you generate maintainable code. SCIAM - 2025
  35. Why Quarkus? Quarkus is a cloud-native Java framework It has

    a fast startup time and low memory footprint SCIAM - 2025
  36. Why Quarkus? Quarkus is a cloud-native Java framework It has

    a fast startup time and low memory footprint It has a huge ecosystem of libraries and extensions SCIAM - 2025
  37. Why Quarkus? Quarkus is a cloud-native Java framework It has

    a fast startup time and low memory footprint It has a huge ecosystem of libraries and extensions It can go further thanks to GraalVM native image SCIAM - 2025
  38. Why did we need a big SQL engine like Teradata?

    Teradata is a massively parallel processing (MPP) SQL engine SCIAM - 2025
  39. Why did we need a big SQL engine like Teradata?

    Teradata is a massively parallel processing (MPP) SQL engine We needed to process a lot of files SCIAM - 2025
  40. Why did we need a big SQL engine like Teradata?

    Teradata is a massively parallel processing (MPP) SQL engine We needed to process a lot of files We needed a powerful SQL engine to generate huge GROUP BY and JOINs requests SCIAM - 2025
  41. EBCDIC EBCDIC = Extended Binary Coded Decimal Interchange Code Developed

    by IBM for mainframes and midrange systems 8-bit character encoding, different from ASCII Incompatible with ASCII — requires conversion for interoperability SCIAM - 2025
  42. Why EBCDIC Matters Data exchanges between modern systems and mainframes

    require understanding of encoding Figure 1. EBCDIC Character Set SCIAM - 2025
  43. COBOL COPYBOOKS Standard record definitions for reading EBCDIC-encoded files Used

    to define the structure of records in COBOL programs Ensures consistency in data structure definitions across COBOL programs Often used in conjunction with data conversion routines (e.g., EBCDIC to ASCII) 01 CUSTOMER-RECORD. 05 CUST-ID PIC 9(5). 05 CUST-NAME PIC A(30). 05 CUST-ADDRESS PIC A(50). 05 CUST-BALANCE PIC S9(9)V99 COMP-3. * Ex : ±999999999.99 SCIAM - 2025
  44. How to read EBCDIC files CFT Axway (We are not

    allowed) Java™ Batch Launcher and Toolkit for z/OS® (JZOS) (No one wants to touch mainframes) Cobrix - COBOL Data Source for Apache Spark (We have to drag the complexity of Apache Spark) SCIAM - 2025
  45. EBCDIC files, The JVM way Code something from scratch, (We

    had little time!!) JRecord (Our best fit) SCIAM - 2025
  46. JRecord a road to Contribution Open-source Java library available on

    GitHub You can contribute to it, everything is welcome Use it and test it Report issues Bug fixes New features Documentation github.com/bmTas/JRecord SCIAM - 2025
  47. JRecord, time to play with (Very Small Demo) Prepare an

    EBCDIC file Prepare a Cobol Copybook Prepare a Java program Start reading EBCDIC file and write into ASCII file SCIAM - 2025
  48. Stack Technique Kubernetes: Orchestrates and dynamically creates pods Fabric8 API:

    Triggers pod creation based on the file size Apache Ignite: In-memory distributed storage for file lines Java Quarkus: Lightweight JVM application in each pod, fast startup COS/S3: Source of the files to be processed SCIAM - 2025
  49. The ingestion challenge Convert EBCDIC files to ASCII (UTF-8) Slice

    the files into chunks (Skip bad lines) Validate each partition (Complex validation rules) SCIAM - 2025
  50. Worst ideas ever (Do not do that) Use old-fashioned Java

    IO (BufferedReader) Read the content of the file and store into the heap Collision issue (Even with a good hash function) OutOfMemory and heap space issues Garbage collector tuning headache SCIAM - 2025
  51. What will be the solution then? Use Fixed Length files

    (more control of memory) Use RocksDB as a key-value store (Fast and Reliable) Use Memory Mapped Files (FFM API de JDK 23) Use multi threading for file processing (More CPU usage) SCIAM - 2025
  52. RocksDB RocksDB is an embeddable, persistent key-value store for fast

    storage It is a C++ library built on LevelDB It is optimized for fast storage (SSD and Flash) It is designed for fast read and write operations It is used by many big companies (Facebook, LinkedIn, Yahoo, etc.) SCIAM - 2025
  53. Memory Mapped Files vs. BufferedReader Aspect BufferedReader Memory-Mapped Files Speed

    Slower (sequential) Faster (direct OS access) Memory Overhead Heap (buffer- controlled) Off-heap (OS- managed) Access Pattern Sequential only Random access (like an array) SCIAM - 2025
  54. Buffered Reader Pros: Handles text encoding automatically. Safe for small-to-medium

    files. Cons: Slower for large files (multiple syscalls). Heap memory usage. // Sequential, line-by-line reading try (BufferedReader br = new BufferedReader(new FileReader("file.txt"))) { String line; while ((line = br.readLine()) != null) { /* Process line */ } } SCIAM - 2025
  55. Memory-Mapped Files Pros: Near-native speed (bypasses JVM heap). Efficient for

    large/binary files. Cons: Complex error handling (e.g., OutOfMemoryError if mapping fails). OS-dependent (limited by virtual address space). // Random access via OS mapping try (RandomAccessFile raf = new RandomAccessFile("file.bin", "r")) { FileChannel channel = raf.getChannel(); MappedByteBuffer buffer = channel.map(READ_ONLY, 0, channel.size()); while (buffer.hasRemaining()) { byte b = buffer.get(); /* Direct access */ } } SCIAM - 2025
  56. Time for a small Demo Read using both ways and

    compare the results SCIAM - 2025
  57. Cooking Pizza Workflow public class Pizzeria { ... public Pizza

    cookingPizza(int numberOfPizzas, int time) { //Make pizza dough var dough = beaterService.makePizzaDough(numberOfPizzas); //Roll out the dough and top var rollOutTop = rollOutService(dough); //Bake the pizza var pizza = ovenService.bake(rollOutTop,time); // Cut pizza pizza = ovenService.cut(pizza); return pizza; } } SCIAM - 2025
  58.  Cogito ergo sum Cloud native Business Automation for building

    Intelligent applications backed by battle-tested capabilities + = On SCIAM - 2025
  59. Traditional platform BPMN  A large monolith and Stateful 

    Not Optimized for cloud and architecture microservices. SCIAM - 2025
  60. Traditional platform BPMN  A large monolith and Stateful 

    Not Optimized for cloud and architecture microservices.  Long startup time SCIAM - 2025
  61. Traditional platform BPMN  A large monolith and Stateful 

    Not Optimized for cloud and architecture microservices.  Long startup time  Large compute consumption SCIAM - 2025
  62. Traditional platform BPMN  A large monolith and Stateful 

    Not Optimized for cloud and architecture microservices.  Long startup time  Large compute consumption  Poor performance SCIAM - 2025
  63. Traditional platform BPMN  A large monolith and Stateful 

    Not Optimized for cloud and architecture microservices.  Long startup time  Large compute consumption  Poor performance  Affect developers' productivity SCIAM - 2025
  64. WHY KOGITO  Cloud first priority  Optimized for cloud

    architecture  Multi runtime mode  Technology Enabler  Developer-centric Experience SCIAM - 2025
  65. Order Shipment Workflow BPMN 2.0 Place order waiting for inventory

    send inventory log failed Create payment waiting for payment Cancel order Cancel Payment Cancel Stock Create Shipping order completed Cancel Shipping waiting for shipping FAILED Success REJECTED Success FAILED place order SCIAM - 2025
  66. CODE GENERATION Traditional Pipeline load Parse Validate Evaluate Run Time

    Kogito Pipeline load Parse Validate Build Time Evaluate Run Time SCIAM - 2025
  67. Challenges of Microservice Architecture Observability Scalability Easy to use /

    evolve High availability Schedules Human operation friendly Fault-Tolerance(Retry) Atomicity Data Consistency (Saga) Long Running Friendly SCIAM - 2025
  68. Cucumber Cucumber is a testing framework that supports Behavior Driven

    Development (BDD). As we have a lot of SQL queries to test, we needed a way to test them. SCIAM - 2025
  69. Cucumber Cucumber is a testing framework that supports Behavior Driven

    Development (BDD). As we have a lot of SQL queries to test, we needed a way to test them. It was a blessing for us to have a common language between devs and business. SCIAM - 2025
  70. Cucumber Cucumber is a testing framework that supports Behavior Driven

    Development (BDD). As we have a lot of SQL queries to test, we needed a way to test them. It was a blessing for us to have a common language between devs and business. In the end, BA were writing the tests and devs only creating new vocabulary. SCIAM - 2025
  71. Liquibase Liquibase is an open-source database schema change management tool.

    We have multiple schemas to manage on the projet SCIAM - 2025
  72. Liquibase Liquibase is an open-source database schema change management tool.

    We have multiple schemas to manage on the projet It was a bit hard to have our DBA accept this tool SCIAM - 2025
  73. Liquibase Liquibase is an open-source database schema change management tool.

    We have multiple schemas to manage on the projet It was a bit hard to have our DBA accept this tool Flyway was also considered but not chosen due to cost SCIAM - 2025
  74. Mybatis Mybatis is a 20-year-old ORM Java framework. It allows

    working very close to SQL. SCIAM - 2025
  75. Mybatis Mybatis is a 20-year-old ORM Java framework. It allows

    working very close to SQL. You can put dynamic part in your SQL queries. SCIAM - 2025
  76. Mybatis Mybatis is a 20-year-old ORM Java framework. It allows

    working very close to SQL. You can put dynamic part in your SQL queries. Object Mapping is very flexible SCIAM - 2025
  77. Mybatis Mybatis is a 20-year-old ORM Java framework. It allows

    working very close to SQL. You can put dynamic part in your SQL queries. Object Mapping is very flexible Works with XML or Annotations SCIAM - 2025
  78. Global Dashboard View  Real-time global system overview  Statistics

    on incoming flows: total, in-progress, completed, failed SCIAM - 2025
  79. Global Dashboard View  Real-time global system overview  Statistics

    on incoming flows: total, in-progress, completed, failed  Supervise microservices and database health SCIAM - 2025
  80. Global Dashboard View  Real-time global system overview  Statistics

    on incoming flows: total, in-progress, completed, failed  Supervise microservices and database health  Trigger corrective actions directly SCIAM - 2025
  81. Flow Details  Filter flows by topology  Track step-by-step

    flow execution  Access step-level logs SCIAM - 2025
  82. Flow Details  Filter flows by topology  Track step-by-step

    flow execution  Access step-level logs  Available actions: Restart (from beginning or specific step) Cancel Temporarily disable a flow type SCIAM - 2025
  83. Microservices Management List all pods per microservice Real-time status visualization

    Available actions: Restart pod Manual stop SCIAM - 2025
  84. Microservices Management List all pods per microservice Real-time status visualization

    Available actions: Restart pod Manual stop public List<PodInfo> getPodsInfo() { PodList kogitoPods = client.pods().inNamespace("kogito").list(); return kogitoPods.getItems().stream() .map(pod -> { String name = pod.getMetadata().getName(); String status = pod.getStatus() != null ? pod.getStatus().getPhase() : "Unknown" return new PodInfo(name, status); }).collect(Collectors.toList()); } SCIAM - 2025
  85. Key Benefits Centralized system supervision Faster incident response Fine-grained system

    observability Reduced reliance on external tools and CLI SCIAM - 2025
  86. References  Slides are accessible here  Slides source 

    Slides generated with Asciidoctor and Reveal.js bit.ly/m2q_DevoxxFr25 github.com/SCIAM-FR/mainframe-to-quarkus SCIAM - 2025