https://github.com/ibm/application-modernization-javaee-quarkus
  
  
    Application Modernization Sample - From Java EE (2010) to Cloud-Native (2021) 
    https://github.com/ibm/application-modernization-javaee-quarkus
  
cloudnative events-triggered jakartaee java javaee micro-frontends microprofile microservices openliberty opensource quarkus strangler websphere
        Last synced: 2 months ago 
        JSON representation
    
Application Modernization Sample - From Java EE (2010) to Cloud-Native (2021)
- Host: GitHub
- URL: https://github.com/ibm/application-modernization-javaee-quarkus
- Owner: IBM
- License: apache-2.0
- Created: 2020-11-23T16:17:17.000Z (almost 5 years ago)
- Default Branch: master
- Last Pushed: 2022-10-02T01:10:34.000Z (about 3 years ago)
- Last Synced: 2024-12-19T10:10:03.139Z (11 months ago)
- Topics: cloudnative, events-triggered, jakartaee, java, javaee, micro-frontends, microprofile, microservices, openliberty, opensource, quarkus, strangler, websphere
- Language: Java
- Homepage:
- Size: 181 MB
- Stars: 117
- Watchers: 12
- Forks: 75
- Open Issues: 3
- 
            Metadata Files:
            - Readme: README.md
- License: LICENSE
 
Awesome Lists containing this project
README
          ## Application Modernization - From Java EE in 2010 to Cloud-Native in 2021
This sample demonstrates how to modernize 10+ year-old Java EE applications with cloud-native technologies and the modern Java runtimes Quarkus and Open Liberty. The modernized application is deployed to and operated with OpenShift, the enterprise distribution of Kubernetes.
### Project Structure
* [Demonstrated Capabilities, Technologies and Tools](#demonstrated-capabilities-technologies-and-tools)
* [Introduction Video (12 mins)](#introduction-video)
* [Session Recording: Application Modernization and Rabbits (30 mins)](http://heidloff.net/article/webinar-recording-application-modernization-and-rabbits/)
* [Architecture](#architecture)
* [Documentation](#documentation)
* [Deployment via Docker Desktop](#deployment-via-docker-desktop)
* [Deployment to OpenShift on IBM Cloud with Tekton](#deployment-to-openshift-on-ibm-cloud-with-tekton)
* [Deployment to OpenShift on IBM Cloud with Tekton and ArgoCD](documentation/Deployments.md#deployment-to-openshift-on-ibm-cloud-with-tekton-and-argocd)
* [Deployment to OpenShift on IBM Cloud with local Scripts](documentation/Deployments.md#deployment-to-openshift-on-ibm-cloud-with-local-scripts)
* [More Deployment Options](documentation/Deployments.md)
### Demonstrated Capabilities, Technologies and Tools
Application modernization is a journey. The legacy application has been modernized in ten steps.
1. Monolith - WebSphere Traditional 8.5.5
    - Java EE 6 app from 2008 with Db2 database running in VMs or bare metal.
2. Monolith - WebSphere Traditional 9 in container
    - Application converted with Transformation Advisor.
3. Monolith - WebSphere Liberty
    - Application converted with Eclipse Migration Tools.
4. Separated frontend
    - Dojo frontend in separate container.
5. Monolith - Open Liberty
    - Modern project structure.
6. Strangled Catalog Service and remaining Open Liberty Monolith
    - Strangled catalog service (inspired by Mono2Micro) developed with Quarkus and Postgres.
    - Event driven architecture via Kafka.
7. Strangled Catalog Service and remaining Quarkus Monolith
    - Strangled Quarkus catalog service uses reactive programming model.
    - Remaining Quarkus monolith runs as native executable.
8. Micro frontend based web application
    - Developed with single-spa and Vue.js. Messaging is done via RxJS.
9. CI/CD via Tekton
    - Target OpenShift. Via OpenShift Pipelines operator.
10. CI/CD via Tekton and ArgoCD
    - Target OpenShift. Via OpenShift GitOps operator.
### Introduction Video
The following 12 minutes video describes the project on a high level:
[](https://youtu.be/lw95LLqa37g)
### Architecture
Architecture of the legacy application:

Screenshot of legacy storefront application:

Architecture of the modernized application:

Screenshot of modernized storefront application:

### Documentation
* Project Overview
    * [Project Overview Video](http://heidloff.net/article/video-application-modernization-in-baby-steps/) (12 mins)
    * Talk: [Application Modernization and Rabbits](http://heidloff.net/article/webinar-recording-application-modernization-and-rabbits/) (30 mins)
    * [Project Teaser Video](https://youtu.be/evhQ7BslMeU) (2 mins)
    * Rabbit video: [Application Modernization and Rabbits](http://heidloff.net/articles/application-modernization-and-rabbits/)
    * [Project Overview Slides](documentation/AppModernization.pdf)
* IBM Modernization Tools and IBM WebSphere
    * [Improving operational Efficiency through Application Modernization](http://heidloff.net/article/improving-operational-efficiency-through-application-modernization/)
    * [Modernizing Java EE Applications with WebSphere Liberty](http://heidloff.net/article/modernizing-java-ee-applications-with-websphere-liberty/)
    * [Step-by-Step Instructions how to use Transformation Advisor](http://heidloff.net/article/step-by-step-instructions-ibm-transformation-advisor/)
    * [Increasing Productivity for legacy Liberty Applications](http://heidloff.net/article/increasing-developer-productivity-for-legacy-liberty-applications/)
    * [Moving from WebSphere Liberty to Open Source with Open Liberty](http://heidloff.net/article/modernizing-websphere-liberty-applications-with-open-liberty/)
* Strangler Pattern and Event Driven Architecture
    * [Don’t build distributed Monoliths!](http://heidloff.net/article/do-not-build-distributed-monoliths/)
    * [Strangler Pattern Example](http://heidloff.net/article/strangler-pattern-example/)
    * [Step-by-Step Instructions for Mono2Micro](http://heidloff.net/article/step-by-step-instructions-mono2micro/)
    * [Event driven Architectures for loosely coupled Microservices](http://heidloff.net/article/event-driven-architectures-loosely-coupled-microservices/)
    * [Using Quarkus for building reactive Applications](http://heidloff.net/article/using-quarkus-reactive-applications)
* User Experience Modernization
    * [Modernizing Applications with new User Experiences](http://heidloff.net/article/modernizing-applications-with-new-user-experiences/)
    * [Using Micro Frontends in Microservices based Architectures](http://heidloff.net/article/using-micro-frontends-microservices/)
    * [Developing Micro Frontends with Single-Spa](http://heidloff.net/article/developing-micro-frontends-single-spa/)
    * [Developing loosely coupled Micro Frontends via RxJS](http://heidloff.net/article/developing-loosely-coupled-micro-frontends-rxjs/)
* OpenShift Development and Deployment Patterns
    * [Exernalizing Configurations for OpenShift Deployments](http://heidloff.net/article/externalizing-configurations-for-openshift-deployments/)
    * [Deploying Db2 on OpenShift](http://heidloff.net/article/deploying-ibms-db2-on-openshift/)
    * [Deploying Postgres on OpenShift](http://heidloff.net/article/deploying-postgres-on-openshift/)
    * [Deploying Kafka on OpenShift](http://heidloff.net/article/deploying-kafka-on-openshift/)
    * [Connecting to managed Database Services via TLS](http://heidloff.net/article/connecting-to-managed-database-services-via-tls/)
    * [Deployments of Applications to OpenShift via Source](http://heidloff.net/article/deployments-of-applications-to-openshift-via-source/)
    * [Deploying Nginx on OpenShift](http://heidloff.net/article/deploying-nginx-on-openshift/)
    * [Using CORS for OpenShift Applications](http://heidloff.net/article/using-cors-for-openshift-applications/)
    * [Running Liberty Applications with Db2 locally](http://heidloff.net/article/running-liberty-applications-with-db2-locally/)
    * [Running legacy Java Applications locally](http://heidloff.net/article/running-legacy-java-applications-locally/)
* CI/CD and DevOps
    * [Deploying Tekton on OpenShift](http://heidloff.net/article/deploying-tekton-on-openshift/)
    * [Sample Tekton Pipelines for Microservices](http://heidloff.net/article/sample-tekton-pipelines-for-microservices/)
    * [Debugging Tekton on OpenShift](http://heidloff.net/article/debugging-tekton-on-openshift/)
    * [Accessing GitHub in Tekton Tasks on OpenShift](http://heidloff.net/article/accessing-github-in-tekton-tasks-on-openshift/)
    * [Deploying ArgoCD on OpenShift](http://heidloff.net/article/deploying-argocd-on-openshift/)
    * [Using GitOps on OpenShift](http://heidloff.net/article/using-gitops-on-openshift/)
* Observability
    * [OpenShift Logging Quick Start](http://heidloff.net/article/openshift-logging-quick-start/)
    * [Logging for OpenShift via LogDNA](http://heidloff.net/article/logging-for-openshift-via-logdna/)
* More Resources
    * [10 Reasons why Enterprises should modernize Applications](http://heidloff.net/article/ten-reasons-why-enterprises-should-modernize-applications/)
    * [Application Modernization Resources on IBM Developer](http://heidloff.net/article/application-modernization-resources-on-ibm-developer/)
    * [IBM Garage Application Modernization Playbook](https://ibm-cloud-architecture.github.io/modernization-playbook/applications/refactor/)
### Deployment via Docker Desktop
If you want to run the modernized application locally, you can invoke the following commands. All you need is a local Docker installation and the git CLI.
Notes:
* Docker requires 14 GB memory, 10 CPUs and 80 GB disk space
* It takes roughly 15 - 20 minutes to start everything
* Make sure docker-compose is also installed (sounds like this needs to be installed separately on some systems)
```
$ git clone https://github.com/nheidloff/application-modernization-javaee-quarkus.git && cd application-modernization-javaee-quarkus
$ ROOT_FOLDER=$(pwd)
$ sh ${ROOT_FOLDER}/scripts-docker/build-and-run.sh
```
The 'build-and-run.sh' script will launch the following containers.

Once everything has been started, you can open the web applications:
* Legacy Dojo frontend: http://localhost/CustomerOrderServicesWeb
* Modern micro-frontend based application: http://localhost:8080
See the [documentation](documentation/RunDemo.md) how to run the demo.
### Deployment to OpenShift on IBM Cloud with Tekton
The following scripts deploy the modernized application on Red Hat [OpenShift on IBM Cloud](https://cloud.ibm.com/kubernetes/overview?platformType=openshift). However the same instructions should work for other OpenShift and OCP deployments, for example [CodeReady Containers](https://developers.redhat.com/products/codeready-containers/overview).
First create an [IBM Cloud Account](https://cloud.ibm.com/registration). Then create an OpenShift cluster, for example via the [IBM Cloud Dashboard](https://cloud.ibm.com/kubernetes/catalog/create?platformType=openshift). I've tested classic infrastructure, single zone, OpenShift 4.6.17, b3c.8x32 and 3 worker nodes.
Additionally you need to install Tekton. The easiest option is to use the '[OpenShift Pipelines](https://docs.openshift.com/container-platform/4.6/pipelines/installing-pipelines.html)' operator from the OperatorHub view in the OpenShift Console ([screenshots](documentation/deploy-tekton-1.png)). Simply accept all defaults. No local installations are necessary.
```
$ git clone https://github.com/nheidloff/application-modernization-javaee-quarkus.git && cd application-modernization-javaee-quarkus
$ ROOT_FOLDER=$(pwd)
$ sh ${ROOT_FOLDER}/scripts-openshift-tekton/check-prerequisites.sh
$ oc login ...
$ sh ${ROOT_FOLDER}/scripts-openshift/deploy-db2.sh
$ sh ${ROOT_FOLDER}/scripts-openshift/deploy-kafka.sh
$ sh ${ROOT_FOLDER}/scripts-openshift/deploy-postgres.sh
$ sh ${ROOT_FOLDER}/scripts-openshift-tekton/deploy-application.sh
$ sh ${ROOT_FOLDER}/scripts-openshift-tekton/show-urls.sh
```