WebSphere® ESB supports re-routing of messages, by dynamic
override of statically-defined endpoints or dynamic invocation using
a target import.
When a mediation module is developed and deployed, the flow of messages through the module uses static information. You can enter fixed values describing the imports, bindings and targets using WebSphere Integration Developer. Messages passing through the mediation module use these values.
For some applications, you can override or change some of these static values at runtime. You might do this dynamically by overriding a value specified for an endpoint address. Alternatively, you can select a new target import. In each case, the message flow changes according to the information in the message. For example, you can use WebSphere Integration Developer to create bindings that contain endpoint information specifying the location of a remote service. This static endpoint information can be overridden dynamically by information carried in the message. The dynamic information might specify a different endpoint for the message. You can access the endpoint using one of several supported bindings, including Web service, HTTP, Java™ Message Service (JMS), and WebSphere MQ.
Rerouting a message dynamically allows you to:
import com.ibm.websphere.sca.*;
import com.ibm.websphere.sca.addressing.EndpointReference;
import com.ibm.websphere.sca.addressing.EndpointReferenceFactory;
import commonj.sdo.DataObject;
jca:jndi:dynamicTestJNDI
This URI tells the EIS Import handler to look for a Connection Factory defined in JNDI as dynamicTestJNDI.
When a mediation module is developed and deployed, the flow of messages through the module uses static information. You can enter fixed values describing the imports, bindings and targets using WebSphere Integration Developer. Messages passing through the mediation module use these values.
For some applications, you can override or change some of these static values at runtime. You might do this dynamically by overriding a value specified for an endpoint address. Alternatively, you can select a new target import. In each case, the message flow changes according to the information in the message. For example, you can use WebSphere Integration Developer to create bindings that contain endpoint information specifying the location of a remote service. This static endpoint information can be overridden dynamically by information carried in the message. The dynamic information might specify a different endpoint for the message. You can access the endpoint using one of several supported bindings, including Web service, HTTP, Java™ Message Service (JMS), and WebSphere MQ.
Rerouting a message dynamically allows you to:
- Route the message to a local endpoint within a mediation module.
- Route the message to a remote endpoint, through a wired reference.
- Route the message to a remote endpoint, through an unwired reference.
- Route the message to a remote endpoint, through a named
import within the mediation module.
Scenario:-
To know the concept of dynamic
invocation I took the simple scenario.This scenario aims take Customer details from source system in XML format send those customer
details to External System(WMQ,Webservice,FTP,......).Based on customer country we need to send the customer details to
particular Queue.
For example:
If the country is USA then send details to LQ2 in
QMG2.
If the country is IND then send details to LQ3 in
QMG3.
otherwise send details to LQ1 in QMGR3.
Simply we are choosing the target
queue/Queue Manager based on the input(Customer Country).
To achieve the above scenario I
followed the below steps.
First Create the Module with name
(MP_Dynamicinvoke_MQ).
Business Object:-(Customer)
- First create the simple BO with following fields as shown in below figure
Interface:-(IF_Customer):
2)Then
create the simple interface with one way operation
Here
is simple Assembly Diagram:-
Here
I took the import component and Added the interface which we created
earlier.Configured as shown below.
Dynamic invocation with wired MQ
import
If you observe the
below mediation flow . There no service invoke /call-out primitives
but we can call the external system using simple java code in custom
mediation.
DataObject customerBO=smo.getDataObject("body").getDataObject("getCustomer").getDataObject("input").getDataObject("customer");
java.lang.String
ccountry =
smo.getDataObject("body").getDataObject("getCustomer").getDataObject("input").getString("ccountry");
String
uri=null;
if
(ccountry.equals("USA"))
uri="wmq:/msg/queue/LQ2@QMGR2";
else
if(ccountry.equals("IND"))
uri="wmq:/msg/queue/LQ3@QMGR3";
else
uri="wmq:/msg/queue/LQ1@QMGR3";
EndpointReference
epr =EndpointReferenceFactory.INSTANCE.createEndpointReference();
epr.setAddress(uri);
epr.setBindingType(EndpointReference.BINDING_TYPE_MQ);
Service
dynamicService =
(Service)ServiceManager.INSTANCE.getService("IF_CustomerPartner",
epr);
dynamicService.invoke("getcustomer",customerBO);
Add the following imports to the java imports section in properties tab of custom mediation primitive:-
import com.ibm.websphere.sca.addressing.EndpointReference;
import com.ibm.websphere.sca.addressing.EndpointReferenceFactory;
import commonj.sdo.DataObject;
Dynamic
invocation with out wired MQ import:-
we
have to set the import name which you want call .
setImport(“importname”) like that we can set the port values also
setPorttype(“”),setPort();
Assembly
diagram as follows:
In
the Same way we can also call the External
systems(EIS),webservies,HTTP
Each
external system having the uri format so we need to follow that
format
In
the Adapter case we need to use the below uri format:-
>>-scheme--:--jca-variant--:--jndiName-------------------------><
- scheme
- The scheme for JCA URI is always jca.
- jca-variant
- The jca-variant provides more information about the JCA connection, and is always jndi.
- jndiName
- This identifies the JCA Connection Factory providing the dynamic target address for a message.
jca:jndi:dynamicTestJNDI
This URI tells the EIS Import handler to look for a Connection Factory defined in JNDI as dynamicTestJNDI.
Test
the scenario by giving the different country
names(USA,IND,.....).And Observe the output in the Queues.
No comments:
Post a Comment