-
Language:
English
-
Language:
English
Red Hat Training
A Red Hat training course is available for Red Hat Fuse
12.2. Injecting Properties Into Service Implementation
Implementation properties allow you to inject one or more property values into a service implementation. This is based on the property support in the SCA assembly specification. Since the property is injected into service implementation logic, the injection mechanism itself is unique to each implementation type. Here are the details for each implementation type:
- Java: Injected using @Property into a CDI bean
- Camel: Wired into Camel properties component and accessible in a Camel route using Camel’s own varName property notation
- BPEL: Mapped into process variables using <assign> with using
resolveProperty()
XPath custom function - BPMN 2: Inserted into process variables by data input associations
- Drools: Available in a global map
12.2.1. Injecting Properties in Java Bean Implementations
Implementation properties represent environmental properties that you have defined in the SwitchYard application descriptor (
switchyard.xml
) for your bean implementation. Implementation properties in SwitchYard are the properties that you can configure on a specific service implementation. That is, you can make the property value available to service logic executing inside an implementation container. Here is an example:
<sca:component name="SimpleServiceBean"> <bean:implementation.bean class="com.example.switchyard.switchyard_example.SimpleServiceBean"/> <sca:service name="SimpleService"> <sca:interface.java interface="com.example.switchyard.switchyard_example.SimpleService"> <properties> <property name="userName" value="${user.name}"/> </properties> </sca:interface.java> </sca:service> </sca:component>
To access the Implementation Properties, add an @Property annotation to your bean class identifying the property you want to inject:
@Service(SimpleService.class) public class SimpleServiceBean implements SimpleService { @Property(name="userName") private String name; @Override public String sayHello(String message) { return "Hello " + name + ", I got a message: " + message; } }
12.2.2. Injecting Implementation Properties in Camel Routes
SwitchYard integrates with the Properties Component in Camel to make system and application properties available inside your route definitions. You can inject properties into your camel route using
{{propertyname}}
expression, where propertyName is the name of the property. For example, the following camel route expects the user.name property to be injected in the last <Log> statement:
<route xmlns="http://camel.apache.org/schema/spring" id="CamelTestRoute"> <log message="ItemId [${body}]"/> <to uri="switchyard://WarehouseService?operationName=hasItem"/> <log message="Title Name [${body}]"/> <log message="Properties [{{user.name}}]"/> </route>
12.2.3. Injecting Implementation Properties in BPEL
You can inject properties into your BPEL process definition with using
SwitchYardPropertyFunction.resolveProperty()
XPath custom function. In the example below, bpel:copy
section copies Greeting property value into the ReplySayHelloVar
variable:
<bpel:copy> <bpel:from xmlns:property="java:org.switchyard.component.bpel.riftsaw.SwitchYardPropertyFunction" expressionLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath2.0"> <![CDATA[concat(property:resolveProperty('Greeting'), $ReceiveSayHelloVar.parameters/tns:input)]]> <bpel:from> <bpel:to part="parameters" variable="ReplySayHelloVar"> <bpel:query queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0"> <![CDATA[tns:result]]> </bpel:query> </bpel:to> </bpel:copy>