Features
The services provided by the EIP components are integration logic functionalities. The component acts as a proxy, as it receives one or more messages from consumers, and forward them to other services, depending on the integration pattern rule used. The provided integration patterns are :
|
Component Configuration
The component can be extended to provide more integration patterns.
To add a new pattern, provide a Java class implementing org.ow2.petals.se.eip.patterns.Pattern :
/** * The pattern interface * * @author Adrien Louis * @author Christophe Hamerling * @author Frederic Gardes */ public interface Pattern { /** * Initialize the pattern * */ void init(); /** * Process the Pattern. * * @param exchange * The exchange to process * @param context * The context of the exchange */ boolean processPattern(Exchange exchange, ExchangeContext context); /** * Process an exchange for an asynchronous pattern. * * @param exchange * The exchange to process * @param context * The context of the exchange * @param asyncContext * The EIP asynchronous context * @param expired * true if the asynchronous exchange is expired, false else */ boolean processAsyncPattern(Exchange exchange, ExchangeContext context, EIPAsyncContext asyncContext, boolean expired); /** * Get the pattern name. * * @return The name */ String getName(); }
Use the ExchangeContext to help you processing your orchestration :
/** * The exchange context. * * @author Adrien Louis * @author Frederic Gardes */ public interface ExchangeContext { /** * Get the logger * * @return the logger */ public Logger getLogger(); /** * get the Consumes for an endpoint * * @param endpoint * The endpoint * @return The Consumes of the endpoint */ public List<Consumes> getSUConsumes(ServiceEndpoint endpoint); /** * Send synchronously an exchange. The response will be provided into the * same exchange * * @param exchange * The exchange to send * @return true if the exchange was sent, false else (reached timeout, * technical error,...) * @throws MessagingException */ public boolean sendSync(final Exchange exchange) throws MessagingException; /** * Send asynchronously an exchange. The response will be provided as an * asynchronous exchange * * @param exchange * The exchange to send * @param asyncContext * The asynchronous context, provided on the response * @throws MessagingException */ public void sendAsync(final Exchange exchange, AsyncContext asyncContext) throws MessagingException; /** * Send asynchronously an exchange. The response will be provided as a * synchronous exchange * * @param exchange * The exchange to send * @throws MessagingException */ public void send(final Exchange exchange) throws MessagingException; /** * Create an exchange from a Consumes * * @param consumes * The Consumes used as JBI Consumer of the exchange * @return The exchange created * @throws MessagingException * @throws PEtALSCDKException */ public Exchange createConsumeExchange(Consumes consumes) throws MessagingException, PEtALSCDKException; /** * Get the extensions * * @return The extensions */ public ConfigurationExtensions getExtensions(); }
Extends the JBI.xml file of the component to reference your pattern :
<?xml version="1.0" encoding="UTF-8"?> <jbi version="1.0" xmlns="http://java.sun.com/xml/ns/jbi" xmlns:petalsCDK="http://petals.ow2.org/components/extensions/version-5" xmlns:eip="http://petals.ow2.org/components/eip/version-2"> <component type="service-engine" component-class-loader-delegation="parent-first"> <identification> <name>petals-se-eip</name> <description>EIP Service engine</description> </identification> <component-class-name>org.ow2.petals.se.eip.EIPComponent</component-class-name> <component-class-path> <path-element /> </component-class-path> <bootstrap-class-name>org.ow2.petals.component.framework.DefaultBootstrap</bootstrap-class-name> <bootstrap-class-path> <path-element></path-element> </bootstrap-class-path> <petalsCDK:acceptor-pool-size>5</petalsCDK:acceptor-pool-size> <petalsCDK:processor-pool-size>10</petalsCDK:processor-pool-size> <petalsCDK:ignored-status>NOTHING_IGNORED</petalsCDK:ignored-status> <petalsCDK:notifications>false</petalsCDK:notifications> <petalsCDK:jbi-listener-class-name>org.ow2.petals.se.eip.listener.JBIListener</petalsCDK:jbilistener-class-name> <petalsCDK:properties-file /> <!-- Declaring the supported patterns --> <eip:aggregator>org.ow2.petals.se.eip.patterns.Aggregator</eip:aggregator> <eip:router>org.ow2.petals.se.eip.patterns.Router</eip:router> <eip:dynamic-router>org.ow2.petals.se.eip.patterns.DynamicRouter</eip:dynamic-router> <eip:dispatcher>org.ow2.petals.se.eip.patterns.Dispatcher</eip:dispatcher> <eip:routing-slip>org.ow2.petals.se.eip.patterns.RoutingSlip</eip:routing-slip> <eip:bridge>org.ow2.petals.se.eip.patterns.Bridge</eip:bridge> <eip:wire-tap>org.ow2.petals.se.eip.patterns.WireTap</eip:wire-tap> <eip:scatter-gather>org.ow2.petals.se.eip.patterns.ScatterGather</eip:scatter-gather> <eip:splitter>org.ow2.petals.se.eip.patterns.Splitter</eip:splitter> </component> </jbi>
Configuration of the component (EIP)
Parameter | Description | Default | Required |
---|---|---|---|
your-pattern-name | Name of the java class implementing your pattern. The name of the pattern at runtime will be the one you give as parameter name | - | No |
Service Configuration
Service Unit descriptor
<?xml version="1.0" encoding="UTF-8"?> <jbi:jbi version="1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jbi="http://java.sun.com/xml/ns/jbi" xmlns:petalsCDK="http://petals.ow2.org/components/extensions/version-5" xmlns:eip="http://petals.ow2.org/components/eip/version-2" xmlns:sample="http://petals.ow2.org/sample"> <jbi:services binding-component="false"> <!-- The Provides --> <jbi:provides interface-name="sample:interface" service-name="sample:service" endpoint-name="endpoint"> <petalsCDK:wsdl xsi:nil="true" /> <eip:eip>pattern</eip:eip> </jbi:provides> <!-- The first Consumes --> <jbi:consumes interface-name="sample:calledInterface1" service-name="sample:calledService1" endpoint-name="calledEndpoint1"> <petalsCDK:mep xsi:nil="true" /> </jbi:consumes> <!-- The second Consumes --> <jbi:consumes interface-name="sample:calledInterface2" service-name="sample:calledService2" endpoint-name="calledEndpoint2"> <petalsCDK:mep xsi:nil="true" /> </jbi:consumes> </jbi:services> </jbi:jbi>