Migrating Fuse 7 Applications to Red Hat build of Apache Camel for Quarkus
Migrating Fuse 7 Applications to Red Hat build of Apache Camel for Quarkus
Abstract
Preface Copy linkLink copied to clipboard!
Providing feedback on Red Hat build of Apache Camel documentation
To report an error or to improve our documentation, log in to your Red Hat Jira account and submit an issue. If you do not have a Red Hat Jira account, then you will be prompted to create an account.
Procedure
- Click the following link to create ticket
- Enter a brief description of the issue in the Summary.
- Provide a detailed description of the issue or enhancement in the Description. Include a URL to where the issue occurs in the documentation.
- Clicking Submit creates and routes the issue to the appropriate documentation team.
Chapter 1. Overview of migrating Fuse 7 applications to Red Hat build of Apache Camel for Quarkus Copy linkLink copied to clipboard!
1.1. Fuse, Red Hat build of Apache Camel for Quarkus and Camel on EAP Copy linkLink copied to clipboard!
1.1.1. Fuse Copy linkLink copied to clipboard!
Red Hat Fuse is an agile integration solution based on open source communities like Apache Camel and Apache Karaf. Red Hat Fuse is a lightweight, flexible integration platform that enables rapid on-premise cloud integration.
You can run Red Hat Fuse using three different runtimes:
- Karaf which supports OSGi applications
- Spring Boot
- JBoss EAP (Enterprise Application Platform)
1.1.2. Red Hat build of Apache Camel for Quarkus Copy linkLink copied to clipboard!
Red Hat build of Apache Camel for Quarkus brings the integration capabilities of Apache Camel and its vast component library to the Quarkus runtime. Red Hat build of Camel Quarkus provides Quarkus extensions for many of the Camel components.
Camel Quarkus takes advantage of the many performance improvements made in Camel 3, which results in a lower memory footprint, less reliance on reflection, and faster startup times.
In a Red Hat build of Apache Camel for Quarkus application, you define Camel routes using Java DSL, so you can migrate the Camel routes that you use in your Fuse application to CEQ.
1.1.3. Camel on EAP Copy linkLink copied to clipboard!
Karaf, which follows the OSGI dependency management concept, and EAP, which follows the JEE specification, are application servers impacted by the adoption of containerized applications.
Containers have emerged as the predominant method for packaging applications. Consequently, the responsibility for managing applications, which encompasses deployment, scaling, clustering, and load balancing, has shifted from the application server to the container orchestration using Kubernetes.
Although EAP continues to be supported on Red Hat Openshift, Camel 3 is no longer supported on an EAP server. So if you have a Fuse 7 application running on an EAP server, you should consider migrating your application to the Red Hat Build of Apache Camel for Spring Boot or the Red Hat build of Apache Camel for Quarkus and take the benefit of the migration process to consider a redesign, or partial redesign of your application, from a monolith to a microservices architecture.
If you do not use Openshift, RHEL virtual machines remain a valid approach when you deploy your application for Spring Boot and Quarkus, and Quarkus also benefits from its native compilation capabilities. It is important to evaluate the tooling to support the management of a microservices architecture on such a platform.
Red Hat provides this capability through Ansible, using the Red Hat Ansible for Middleware collections.
1.2. Standard migration paths Copy linkLink copied to clipboard!
1.2.1. XML path Copy linkLink copied to clipboard!
Fuse applications written in Spring XML or Blueprint XML should be migrated towards an XML-based flavor, and can target either the Spring Boot or the Quarkus runtime with no difference in the migration steps.
1.2.2. Java path Copy linkLink copied to clipboard!
Fuse applications written in Java DSL should be migrated towards a Java-based flavor, and can target either the Spring Boot or the Quarkus runtime with no difference in the migration steps.
1.3. Architectural changes Copy linkLink copied to clipboard!
Openshift has replaced Fabric8 as the runtime platform for Fuse 6 users and is the recommended target for your Fuse application migration.
You should consider the following architectural changes when you are migrating your application:
- If your Fuse 6 application relied on the Fabric8 service discovery, you should use Kubernetes Service Discovery when running Camel 3 on OpenShift.
- If your Fuse 6 application relies on OSGi bundle configuration, you should use Kubernetes ConfigMaps and Secrets when running Camel 3 on OpenShift.
- If your application uses a file-based route definition, consider using AWS S3 technology when running Camel 3 on OpenShift.
- If your application uses a standard filesystem, the resulting Spring Boot or Quarkus applications should be deployed on standard RHEL virtual machines rather than the Openshift platform.
- Delegation of Inbound HTTPS connections to the Openshift Router which handles SSL requirements.
- Delegation of Hystrix features to Service Mesh.
1.4. The javax to jakarta package namespace change Copy linkLink copied to clipboard!
The Java EE move to the Eclipse Foundation and the establishment of Jakarta EE, since Jakarta EE 9, packages used for all EE APIs have changed to jakarta.*
Code snippets in documentation have been updated to use the jakarta.* namespace, but you of course need to take care and review your own applications.
This change does not affect javax packages that are part of Java SE.
When migrating applications to EE 10, you need to:
-
Update any import statements or other source code uses of EE API classes from the
javaxpackage tojakarta. -
Change any EE-specified system properties or other configuration properties whose names begin with
javax.to begin withjakarta.. -
Use the
META-INF/services/jakarta.[rest_of_name]name format to identify implementation classes in your applications that use the implement EE interfaces or abstract classes bootstrapped with thejava.util.ServiceLoadermechanism.
1.4.1. Migration tools Copy linkLink copied to clipboard!
- Source code migration: How to use Red Hat Migration Toolkit for Auto-Migration of an Application to the Jakarta EE 10 Namespace
- Bytecode transforms: For cases where source code migration is not an option, the open source Eclipse Transformer
Additional resources
- Background: Update on Jakarta EE Rights to Java Trademarks
- Red Hat Customer Portal: Red Hat JBoss EAP Application Migration from Jakarta EE 8 to EE 10
- Jakarta EE: Javax to Jakarta Namespace Ecosystem Progress
Chapter 2. Migrating Camel Routes from Fuse 7 to Camel Copy linkLink copied to clipboard!
You can define Camel routes in Red Hat build of Apache Camel for Quarkus applications using Java DSL, XML IO DSL, or YAML.
2.1. Java DSL route migration example Copy linkLink copied to clipboard!
To migrate a Java DSL route definition from your Fuse application to CEQ, you can copy your existing route definition directly to your Red Hat build of Apache Camel for Quarkus application and add the necessary dependencies to your Red Hat build of Apache Camel for Quarkus pom.xml file.
In this example, we will migrate a content-based route definition from a Fuse 7 application to a new CEQ application by copying the Java DSL route to a file named Routes.java in your CEQ application.
Procedure
Using the
code.quarkus.redhat.comwebsite, select the extensions required for this example:- camel-quarkus-file
- camel-quarkus-xpath
Navigate to the directory where you extracted the generated project files from the previous step:
cd <directory_name>
$ cd <directory_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
Create a file named
Routes.javain thesrc/main/java/org/acme/subfolder. Add the route definition from your Fuse application to the
Routes.java, similar to the following example:Copy to Clipboard Copied! Toggle word wrap Toggle overflow Compile your CEQ application.
mvn clean compile quarkus:dev
mvn clean compile quarkus:devCopy to Clipboard Copied! Toggle word wrap Toggle overflow
This command compiles the project, starts your application, and lets the Quarkus tooling watch for changes in your workspace. Any modifications in your project will automatically take effect in the running application.
2.2. Blueprint XML DSL route migration Copy linkLink copied to clipboard!
To migrate a Blueprint XML route definition from your Fuse application to CEQ, use the camel-quarkus-xml-io-dsl extension and copy your Fuse application route definition directly to your CEQ application. You will then need to add the necessary dependencies to the CEQ pom.xml file and update your CEQ configuration in the application.properties file.
CEQ supports Camel 3, whereas Fuse 7 supports Camel 2.
For more information relating to upgrading Camel when you migrate your Red Hat Fuse 7 application to CEQ, see Migrating Apache Camel.
For more information about using beans in Camel Quarkus, see the CDI and the Camel Bean Component section in the Developing Applications with Red Hat build of Apache Camel for Quarkus guide.
2.2.1. XML-IO-DSL limitations Copy linkLink copied to clipboard!
You can use the camel-quarkus-xml-io-dsl extension to assist with migrating a Blueprint XML route definition to CEQ.
The camel-quarkus-xml-io-dsl extension only supports the following <camelContext> sub-elements:
- routeTemplates
- templatedRoutes
- rests
- routes
- routeConfigurations
As Blueprint XML supports other bean definitions that are not supported by the camel-quarkus-xml-io-dsl extension, you may need to rewrite other bean definitions that are included in your Blueprint XML route definition.
You must define every element (XML IO DSL) in a separate file. For example, this is a simplified example of a Blueprint XML route definition:
You can migrate this Blueprint XML route definition to CEQ using XML IO DSL as defined in the following files:
src/main/resources/routes/camel-rests.xml
src/main/resources/routes/camel-routes.xml
<routes xmlns="http://camel.apache.org/schema/spring">
<route>
<from ..../>
</route>
</routes>
<routes xmlns="http://camel.apache.org/schema/spring">
<route>
<from ..../>
</route>
</routes>
You must use Java DSL to define other elements which are not supported, such as <restConfiguration>. For example, using a route builder defined in a camel-rests.xml file as follows:
src/main/resources/routes/camel-rests.xml
2.2.2. Blueprint XML DSL route migration example Copy linkLink copied to clipboard!
For more information about using the XML IO DSL extension, see the XML IO DSL documentation in the Red Hat build of Apache Camel for Quarkus Extensions.
In this example, you are migrating a content-based route definition from a Fuse application to a new CEQ application by copying the Blueprint XML route definition to a file named camel-routes.xml in your CEQ application.
Procedure
Using the
code.quarkus.redhat.comwebsite, select the following extensions for this example:- camel-quarkus-xml-io-dsl
- camel-quarkus-file
- camel-quarkus-xpath
- Select Generate your application to confirm your choices and display the overlay screen with the download link for the archive that contains your generated project.
- Select Download the ZIP to save the archive with the generated project files to your machine.
- Extract the contents of the archive.
Navigate to the directory where you extracted the generated project files from the previous step:
cd <directory_name>
$ cd <directory_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
Create a file named
camel-routes.xmlin thesrc/main/resources/routes/directory. Copy the
<route>element and sub-elements from the followingblueprint-example.xmlexample to thecamel-routes.xmlfile:blueprint-example.xml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow camel-routes.xml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Modify
application.properties# Camel # camel.context.name = camel-quarkus-xml-io-dsl-example camel.main.routes-include-pattern = file:src/main/resources/routes/camel-routes.xml
# Camel # camel.context.name = camel-quarkus-xml-io-dsl-example camel.main.routes-include-pattern = file:src/main/resources/routes/camel-routes.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow Compile your CEQ application.
mvn clean compile quarkus:dev
mvn clean compile quarkus:devCopy to Clipboard Copied! Toggle word wrap Toggle overflow NoteThis command compiles the project, starts your application, and lets the Quarkus tooling watch for changes in your workspace. Any modifications in your project will automatically take effect in the running application.