This module contains the logic for working with supported fuse products on both local machine
and OpenShift
.
For each product there are two main areas covered:
- deployment - deploying and undeploying product (where applicable)
- integrations - creating, starting, stopping of integrations
The integration code is generated from a "meta" Integration Builder class and 0..x Customizers for given system-x services using the javaparser framework. See RouteBuilders guide for more details.
In order to deploy the integration in Openshift, it is possible to implement a specific strategy listed in
OpenshiftDeployStrategyType
enum and instantiated by OpenshiftDeployStrategyFactory
searching for OpenshiftDeployStrategy classes.
The implementation class must be a OpenshiftDeployer
in order to execute all deployment phases.
You can run the deployment strategy via property openshift.deploy.strategy
There are several integration builder classes to use dependending on the use-case:
- AbstractIntegrationBuilder serves as a base
for creating integrations on all products (so there are methods related to every product only)
- it is possible to instantiate it via IntegrationBuilder class
- AbstractGitIntegrationBuilder
- AbstractMavenGitIntegrationBuilder
- CamelKIntegrationBuilder
that extends
AbstractIntegrationBuilder
and adds methods related to camel-k only - SpringBootIntegrationBuilder
that extends
AbstractIntegrationBuilder
and adds methods related to camel on springboot only
Customizers are used when the integration should run on all products, but the configuration differs between products. In that case, you need to use a customizer, where you have access to the IntegrationBuilder and all its methods.
Again, there are multiple customizers you can use:
- ProductsCustomizer - when you want to do modifications for two or more products
- SpringBootCustomizer, QuarkusCustomizer, CamelKCustomizer to do the change only for specific product
Instead of creating new SpringBoot|Quarkus|CamelK customizers
, you can use
Customizers enum, for example:
Customizers.CAMELK.customize(ib -> ...)
There are also customizer implementations for common modifications needed for a given product. You can check them out in customizer
sub-package
inside the product's package.
The integrations are created differently for each product:
camel on springboot
:- an application skeleton is generated from the archetype
- the
integration code
is dumped as ajava file
in the app skeleton
camel quarkus
:- an application skeleton is generated from the
io.quarkus:quarkus-maven-plugin:<version>:create
maven plugin - the
integration code
is dumped as ajava file
in the app skeleton
- an application skeleton is generated from the
camel-k
:- the
integration code
is dumped as aString
and the integration is created as theIntegration
object in OpenShift
- the
All products are implementing JUnit 5 extensions so creating a fuse product in your test is as simple as adding following piece of code:
@RegisterExtension
public static Product product = ProductFactory.create();
In this case a correct product instance is determined based on system property fuse.product
(camelspringboot, camelquarkus, camelk)
and based on openshift.url
property presence (determines if the deployment is local or openshift)
If you want a specific instance of a given fuse product, you can use:
@RegisterExtension
public static CamelK camelk = ProductFactory.create(CamelK.class);
for example to test features specific to Camel-K only.