Chapter 18. Extensions
An extension is a module that extends the core capabilities of JBoss EAP.
You can extend SwitchYard functionality by creating extension modules for JBoss EAP. Use this feature to:
- Support additional binding types through Camel components not included in the distribution.
- Add data formats and other Camel libraries for use within Camel routing services.
- Implement custom gateway bindings as Camel components.
18.1. Create SwitchYard Extension Module in JBoss EAP
Procedure 18.1. Create, Register and Build a SwitchYard Extension Module in JBoss EAP
- An extension is deployed in the
modules
folder of JBoss EAP.Extension modules are placed under themodules/system/layers/soa/org/
directory of your JBoss EAP installation. The jar files that make up the module are placed in themodules/system/layers/soa/org/product/subsystem/modulename/main
directory. Themodule.xml
file contains definition information. For example, in directorymodules/system/layers/soa/org/apache/camel/saxon/main
, themodule.xml
file looks like this:<?xml version="1.0" encoding="UTF-8"?> <module xmlns="urn:jboss:module:1.0" name="org.apache.camel.saxon"> <resources> <resource-root path="camel-saxon-2.10.0.redhat-60024.jar"/> <resource-root path="saxon9he-9.3.0.11.jar"/> </resources> <dependencies> <module name="javax.api"/> <module name="org.slf4j"/> <module name="org.apache.camel.core"/> </dependencies> </module>
Themodule.xml
file contains the following information:- The module name. The module name is comprised of the directory names for the module underneath the
EAP-Home/modules/system/layers/soa
directory. - Resources required. Notice that the files mentioned in the
<resources>
section are in the same directory as themodule.xml
file. - Dependencies for the module.
- In order to make SwitchYard aware of the extension module, add the module name to the list of extensions defined in the SwitchYard subsystem in
standalone.xml
:<subsystem xmlns="urn:jboss:domain:switchyard:1.0"> <modules> <module identifier="org.switchyard.component.bean" implClass="org.switchyard.component.bean.deploy.BeanComponent"/> <module identifier="org.switchyard.component.soap" implClass="org.switchyard.component.soap.deploy.SOAPComponent"> <!-- snip --> </modules> <extensions> <extension identifier="org.apache.camel.mvel"/> <extension identifier="org.apache.camel.ognl"/> <extension identifier="org.apache.camel.jaxb"/> <extension identifier="org.apache.camel.soap"/> <extension identifier="org.apache.camel.saxon"/> </extensions> </subsystem>
- Build the application that will be using the module using the mvn clean install command. If there are problems running the JVM tests step locally, use the
-DskipTests
argument.Update thepom.xml
file for the application. Add the module as a dependency and mark it asprovided
.<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-saxon</artifactId> <version>2.10.0.redhat-60024</version> <scope>provided</scope> </dependency>
- If the module is created from a jar not supplied with JBoss Fuse Service Works, you must ensure that a
jboss-deployment-structure.xml
file exists in theapplication-name/src/main/resources/META-INF
folder of the application that will run it. Thejboss-deployment-structure.xml
file contains information in the following format:<?xml version="1.0" encoding="UTF-8"?> <jboss-deployment-structure> <deployment> <dependencies> <module name="org.apache.camel.saxon" services="import" export="true"> <imports> <include path="META-INF/services/org/apache/camel/component" /> <include path="META-INF/services/org/apache/camel/language" /> </imports> <exports> <include path="META-INF/services/org/apache/camel/component" /> <include path="META-INF/services/org/apache/camel/language" /> </exports> </module> </dependencies> </deployment> </jboss-deployment-structure>
The module name must be the same as the module name defined in step 1 with the same naming rules.
For an example of an extension module and an application, see https://access.redhat.com/solutions/653823.