{"id":15013789,"url":"https://github.com/ibm/application-modernization-javaee-quarkus","last_synced_at":"2025-08-20T10:33:04.325Z","repository":{"id":39730458,"uuid":"315371679","full_name":"IBM/application-modernization-javaee-quarkus","owner":"IBM","description":"Application Modernization Sample - From Java EE (2010) to Cloud-Native (2021)","archived":false,"fork":false,"pushed_at":"2022-10-02T01:10:34.000Z","size":190305,"stargazers_count":117,"open_issues_count":3,"forks_count":75,"subscribers_count":12,"default_branch":"master","last_synced_at":"2024-12-19T10:10:03.139Z","etag":null,"topics":["cloudnative","events-triggered","jakartaee","java","javaee","micro-frontends","microprofile","microservices","openliberty","opensource","quarkus","strangler","websphere"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/IBM.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-11-23T16:17:17.000Z","updated_at":"2024-12-16T17:32:53.000Z","dependencies_parsed_at":"2022-07-09T16:16:57.866Z","dependency_job_id":null,"html_url":"https://github.com/IBM/application-modernization-javaee-quarkus","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IBM%2Fapplication-modernization-javaee-quarkus","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IBM%2Fapplication-modernization-javaee-quarkus/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IBM%2Fapplication-modernization-javaee-quarkus/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IBM%2Fapplication-modernization-javaee-quarkus/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/IBM","download_url":"https://codeload.github.com/IBM/application-modernization-javaee-quarkus/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":230415318,"owners_count":18222158,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cloudnative","events-triggered","jakartaee","java","javaee","micro-frontends","microprofile","microservices","openliberty","opensource","quarkus","strangler","websphere"],"created_at":"2024-09-24T19:44:47.144Z","updated_at":"2024-12-19T10:10:15.950Z","avatar_url":"https://github.com/IBM.png","language":"Java","readme":"## Application Modernization - From Java EE in 2010 to Cloud-Native in 2021\n\nThis 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.\n\n\n\n### Project Structure\n\n* [Demonstrated Capabilities, Technologies and Tools](#demonstrated-capabilities-technologies-and-tools)\n* [Introduction Video (12 mins)](#introduction-video)\n* [Session Recording: Application Modernization and Rabbits (30 mins)](http://heidloff.net/article/webinar-recording-application-modernization-and-rabbits/)\n* [Architecture](#architecture)\n* [Documentation](#documentation)\n* [Deployment via Docker Desktop](#deployment-via-docker-desktop)\n* [Deployment to OpenShift on IBM Cloud with Tekton](#deployment-to-openshift-on-ibm-cloud-with-tekton)\n* [Deployment to OpenShift on IBM Cloud with Tekton and ArgoCD](documentation/Deployments.md#deployment-to-openshift-on-ibm-cloud-with-tekton-and-argocd)\n* [Deployment to OpenShift on IBM Cloud with local Scripts](documentation/Deployments.md#deployment-to-openshift-on-ibm-cloud-with-local-scripts)\n* [More Deployment Options](documentation/Deployments.md)\n\n\n\n### Demonstrated Capabilities, Technologies and Tools\n\nApplication modernization is a journey. The legacy application has been modernized in ten steps.\n\n1. Monolith - WebSphere Traditional 8.5.5\n    - Java EE 6 app from 2008 with Db2 database running in VMs or bare metal.\n2. Monolith - WebSphere Traditional 9 in container\n    - Application converted with Transformation Advisor.\n3. Monolith - WebSphere Liberty\n    - Application converted with Eclipse Migration Tools.\n4. Separated frontend\n    - Dojo frontend in separate container.\n5. Monolith - Open Liberty\n    - Modern project structure.\n6. Strangled Catalog Service and remaining Open Liberty Monolith\n    - Strangled catalog service (inspired by Mono2Micro) developed with Quarkus and Postgres.\n    - Event driven architecture via Kafka.\n7. Strangled Catalog Service and remaining Quarkus Monolith\n    - Strangled Quarkus catalog service uses reactive programming model.\n    - Remaining Quarkus monolith runs as native executable.\n8. Micro frontend based web application\n    - Developed with single-spa and Vue.js. Messaging is done via RxJS.\n9. CI/CD via Tekton\n    - Target OpenShift. Via OpenShift Pipelines operator.\n10. CI/CD via Tekton and ArgoCD\n    - Target OpenShift. Via OpenShift GitOps operator.\n\n\n\n### Introduction Video\n\nThe following 12 minutes video describes the project on a high level:\n\n\u003ckbd\u003e[![Video](documentation/video.png)](https://youtu.be/lw95LLqa37g)\u003c/kbd\u003e\n\n\n\n### Architecture\n\nArchitecture of the legacy application:\n\n\u003ckbd\u003e\u003cimg src=\"documentation/start.png\" /\u003e\u003c/kbd\u003e\n\nScreenshot of legacy storefront application:\n\n\u003ckbd\u003e\u003cimg src=\"documentation/storefront-shop.png\" /\u003e\u003c/kbd\u003e\n\nArchitecture of the modernized application:\n\n\u003ckbd\u003e\u003cimg src=\"documentation/end.png\" /\u003e\u003c/kbd\u003e\n\nScreenshot of modernized storefront application:\n\n\u003ckbd\u003e\u003cimg src=\"documentation/modernized-ui-1.png\" /\u003e\u003c/kbd\u003e\n\n\n\n### Documentation\n\n* Project Overview\n    * [Project Overview Video](http://heidloff.net/article/video-application-modernization-in-baby-steps/) (12 mins)\n    * Talk: [Application Modernization and Rabbits](http://heidloff.net/article/webinar-recording-application-modernization-and-rabbits/) (30 mins)\n    * [Project Teaser Video](https://youtu.be/evhQ7BslMeU) (2 mins)\n    * Rabbit video: [Application Modernization and Rabbits](http://heidloff.net/articles/application-modernization-and-rabbits/)\n    * [Project Overview Slides](documentation/AppModernization.pdf)\n\n* IBM Modernization Tools and IBM WebSphere\n    * [Improving operational Efficiency through Application Modernization](http://heidloff.net/article/improving-operational-efficiency-through-application-modernization/)\n    * [Modernizing Java EE Applications with WebSphere Liberty](http://heidloff.net/article/modernizing-java-ee-applications-with-websphere-liberty/)\n    * [Step-by-Step Instructions how to use Transformation Advisor](http://heidloff.net/article/step-by-step-instructions-ibm-transformation-advisor/)\n    * [Increasing Productivity for legacy Liberty Applications](http://heidloff.net/article/increasing-developer-productivity-for-legacy-liberty-applications/)\n    * [Moving from WebSphere Liberty to Open Source with Open Liberty](http://heidloff.net/article/modernizing-websphere-liberty-applications-with-open-liberty/)\n\n* Strangler Pattern and Event Driven Architecture\n    * [Don’t build distributed Monoliths!](http://heidloff.net/article/do-not-build-distributed-monoliths/)\n    * [Strangler Pattern Example](http://heidloff.net/article/strangler-pattern-example/)\n    * [Step-by-Step Instructions for Mono2Micro](http://heidloff.net/article/step-by-step-instructions-mono2micro/)\n    * [Event driven Architectures for loosely coupled Microservices](http://heidloff.net/article/event-driven-architectures-loosely-coupled-microservices/)\n    * [Using Quarkus for building reactive Applications](http://heidloff.net/article/using-quarkus-reactive-applications)\n\n* User Experience Modernization\n    * [Modernizing Applications with new User Experiences](http://heidloff.net/article/modernizing-applications-with-new-user-experiences/)\n    * [Using Micro Frontends in Microservices based Architectures](http://heidloff.net/article/using-micro-frontends-microservices/)\n    * [Developing Micro Frontends with Single-Spa](http://heidloff.net/article/developing-micro-frontends-single-spa/)\n    * [Developing loosely coupled Micro Frontends via RxJS](http://heidloff.net/article/developing-loosely-coupled-micro-frontends-rxjs/)\n\n* OpenShift Development and Deployment Patterns\n    * [Exernalizing Configurations for OpenShift Deployments](http://heidloff.net/article/externalizing-configurations-for-openshift-deployments/)\n    * [Deploying Db2 on OpenShift](http://heidloff.net/article/deploying-ibms-db2-on-openshift/)\n    * [Deploying Postgres on OpenShift](http://heidloff.net/article/deploying-postgres-on-openshift/)\n    * [Deploying Kafka on OpenShift](http://heidloff.net/article/deploying-kafka-on-openshift/)\n    * [Connecting to managed Database Services via TLS](http://heidloff.net/article/connecting-to-managed-database-services-via-tls/)\n    * [Deployments of Applications to OpenShift via Source](http://heidloff.net/article/deployments-of-applications-to-openshift-via-source/)\n    * [Deploying Nginx on OpenShift](http://heidloff.net/article/deploying-nginx-on-openshift/)\n    * [Using CORS for OpenShift Applications](http://heidloff.net/article/using-cors-for-openshift-applications/)\n    * [Running Liberty Applications with Db2 locally](http://heidloff.net/article/running-liberty-applications-with-db2-locally/)\n    * [Running legacy Java Applications locally](http://heidloff.net/article/running-legacy-java-applications-locally/)\n\n* CI/CD and DevOps\n    * [Deploying Tekton on OpenShift](http://heidloff.net/article/deploying-tekton-on-openshift/)\n    * [Sample Tekton Pipelines for Microservices](http://heidloff.net/article/sample-tekton-pipelines-for-microservices/)\n    * [Debugging Tekton on OpenShift](http://heidloff.net/article/debugging-tekton-on-openshift/)\n    * [Accessing GitHub in Tekton Tasks on OpenShift](http://heidloff.net/article/accessing-github-in-tekton-tasks-on-openshift/)\n    * [Deploying ArgoCD on OpenShift](http://heidloff.net/article/deploying-argocd-on-openshift/)\n    * [Using GitOps on OpenShift](http://heidloff.net/article/using-gitops-on-openshift/)\n\n* Observability\n    * [OpenShift Logging Quick Start](http://heidloff.net/article/openshift-logging-quick-start/)\n    * [Logging for OpenShift via LogDNA](http://heidloff.net/article/logging-for-openshift-via-logdna/)\n\n* More Resources\n    * [10 Reasons why Enterprises should modernize Applications](http://heidloff.net/article/ten-reasons-why-enterprises-should-modernize-applications/)\n    * [Application Modernization Resources on IBM Developer](http://heidloff.net/article/application-modernization-resources-on-ibm-developer/)\n    * [IBM Garage Application Modernization Playbook](https://ibm-cloud-architecture.github.io/modernization-playbook/applications/refactor/)\n\n\n\n### Deployment via Docker Desktop\n\nIf 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.\n\nNotes:\n* Docker requires 14 GB memory, 10 CPUs and 80 GB disk space\n* It takes roughly 15 - 20 minutes to start everything\n* Make sure docker-compose is also installed (sounds like this needs to be installed separately on some systems)\n\n```\n$ git clone https://github.com/nheidloff/application-modernization-javaee-quarkus.git \u0026\u0026 cd application-modernization-javaee-quarkus\n$ ROOT_FOLDER=$(pwd)\n$ sh ${ROOT_FOLDER}/scripts-docker/build-and-run.sh\n```\n\nThe 'build-and-run.sh' script will launch the following containers.\n\n\u003ckbd\u003e\u003cimg src=\"documentation/Containers.png\" /\u003e\u003c/kbd\u003e\n\nOnce everything has been started, you can open the web applications:\n\n* Legacy Dojo frontend: http://localhost/CustomerOrderServicesWeb\n* Modern micro-frontend based application: http://localhost:8080\n\nSee the [documentation](documentation/RunDemo.md) how to run the demo.\n\n\n### Deployment to OpenShift on IBM Cloud with Tekton\n\nThe 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).\n\nFirst 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.\n\nAdditionally 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.\n\n```\n$ git clone https://github.com/nheidloff/application-modernization-javaee-quarkus.git \u0026\u0026 cd application-modernization-javaee-quarkus\n$ ROOT_FOLDER=$(pwd)\n$ sh ${ROOT_FOLDER}/scripts-openshift-tekton/check-prerequisites.sh\n$ oc login ...\n$ sh ${ROOT_FOLDER}/scripts-openshift/deploy-db2.sh\n$ sh ${ROOT_FOLDER}/scripts-openshift/deploy-kafka.sh\n$ sh ${ROOT_FOLDER}/scripts-openshift/deploy-postgres.sh\n$ sh ${ROOT_FOLDER}/scripts-openshift-tekton/deploy-application.sh\n$ sh ${ROOT_FOLDER}/scripts-openshift-tekton/show-urls.sh\n```","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fibm%2Fapplication-modernization-javaee-quarkus","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fibm%2Fapplication-modernization-javaee-quarkus","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fibm%2Fapplication-modernization-javaee-quarkus/lists"}