Chapter 2. Dependency Injection Frameworks
Abstract
Red Hat JBoss Fuse supports two alternative dependency injection frameworks: Spring and OSGi blueprint. These frameworks are fully integrated with the Red Hat JBoss Fuse container, so that Spring XML files and blueprint XML files are automatically activated at the same time the corresponding bundle is activated.
2.1. Spring and Blueprint Frameworks
Overview
The OSGi framework allows third-party frameworks to be piggybacked on top of it. In particular, Red Hat JBoss Fuse enables the Spring framework and the blueprint framework, by default. In the case of the Spring framework, OSGi automatically activates any Spring XML files under the
META-INF/spring/
directory in a JAR, and Spring XML files can also be hot-deployed to the ESBInstallDir/deploy
directory. In the case of the blueprint framework, OSGi automatically activates any blueprint XML files under the OSGI-INF/blueprint/
directory in a JAR, and blueprint XML files can also be hot-deployed to the ESBInstallDir/deploy
directory.
Prefer Blueprint over Spring-DM
The Blueprint container is now the preferred framework for instantiating, registering, and referencing OSGi services, because this container has now been adopted as an OSGi standard. This ensures greater portability for your OSGi service definitions in the future.
Spring Dynamic Modules (Spring-DM) provided much of the original impetus for the definition of the Blueprint standard, but should now be regarded as obsolescent. Using the Blueprint container does not prevent you from using the Spring framework: the latest version of Spring is compatible with Blueprint.
Configuration files
There are two kinds of file that you can use to configure your project:
- Spring configuration—in the standard Maven directory layout, Spring XML configuration files are located under
ProjectDir/src/main/resources/META-INF/spring
. - Blueprint configuration—in the standard Maven directory layout, blueprint XML configuration files are located under
ProjectDir/src/main/resources/OSGI-INF/blueprint
.
If you decide to use the blueprint configuration, you can embed
camelContext
elements in the blueprint file, as described in the section called “Blueprint configuration file”.
Prerequisites for blueprint configuration
If you decide to configure your Apache Camel application using blueprint, you must ensure that the
camel-blueprint
feature is installed. If necessary, install it by entering the following console command:
JBossFuse:karaf@root> features:install camel-blueprint
Spring configuration file
You can deploy a
camelContext
using a Spring configuration file, where the root element is a Spring beans
element and the camelContext
element is a child of the beans
element. In this case, the camelContext
namespace must be http://camel.apache.org/schema/spring
.
For example, the following Spring configuration defines a route that generates timer messages every two seconds, sending the messages to the
ExampleRouter
log (which get incorporated into the console log file, InstallDir/data/log/servicemix.log
):
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > <camelContext xmlns="http://camel.apache.org/schema/spring"> <route> <from uri="timer://myTimer?fixedRate=true&period=2000"/> <to uri="log:ExampleRouter"/> </route> </camelContext> </beans>
It is not necessary to specify schema locations in the configuration. But if you are editing the configuration file with an XML editor, you might want to add the schema locations in order to support schema validation and content completion in the editor. For the preceding example, you could specify the schema locations as follows:
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd"> ...
Blueprint configuration file
Before deploying routes in a blueprint configuration file, check that the camel-blueprint feature is already installed.
You can deploy a
camelContext
using a blueprint configuration file, where the root element is blueprint
and the camelContext
element is a child of the blueprint
element. In this case, the camelContext
namespace must be http://camel.apache.org/schema/blueprint
.
For example, the following blueprint configuration defines a route that generates timer messages every two seconds, sending the messages to the
ExampleRouter
log (which get incorporated into the console log file, InstallDir/data/log/servicemix.log
):
<?xml version="1.0" encoding="UTF-8"?> <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > <camelContext xmlns="http://camel.apache.org/schema/blueprint"> <route> <from uri="timer://myTimer?fixedRate=true&period=2000"/> <to uri="log:ExampleRouter"/> </route> </camelContext> </blueprint>
Note
Blueprint is a dependency injection framework, defined by the OSGi standard, which is similar to Spring in many respects. For more details about blueprint, see Section 16.1, “The Blueprint Container”.