A JMS synchronous invocation takes place when a JMS producer receives a response to a JMS request produced by it when invoked. WSO2 ESB The ESB Profile of WSO2 Enterprise Integrator (WSO2 EI) uses an internal JMS correlation ID to correlate the request and the response. See JMS Request/Reply Example for more information.
...
When the proxy service named SMSSenderProxy
receives an HTTP request, it publishes that request in a JMS queue named SMSStore
. Another proxy service named SMSForwardProxy
subscribes to messages published in this queue and forwards them to a back-end service named SimpleStockQuoteService
. When this back-end service returns an HTTP response, internal ESB logic is used to save that message as a JMS message in a JMS queue named SMSReceiveNotification
. Then this response is taken from the SMSReceiveNotification
queue and delivered to the client as an HTTP message using internal ESB logic.
The following sub sections explain how to execute this use case. WSO2 Here, the Message Broker is Profile of WSO2 EI is used as the JMS broker.
Table of Contents | ||||
---|---|---|---|---|
|
Prerequisites
Before executing this use case, the following steps need to be carried out. See Integrating WSO2 ESB in MB Documentation for detailed instructions.
...
Follow the steps below to configure the ESB Profile so that it can use the Broker Profile as the message broker.
Open the
<EI_HOME>/conf/jndi.properties
file for this use case are file and update the connection factories and queues as follows.:Item Value Queue queue.SMSStore=SMSStore
Queue queue.SMSReceiveNotificationStore=SMSReceiveNotificationStore
Connection Factory
5673'Code Block # register some connection factories # connectionfactory.[jndiname] = [ConnectionURL] connectionfactory.QueueConnectionFactory = amqp://admin:admin@clientID/carbon?brokerlist='tcp://localhost:
5675' # register some queues in JNDI using the form # queue.[jndiName] = [physicalName] queue.SMSStore=SMSStore queue.SMSReceiveNotificationStore=SMSReceiveNotificationStore
- Copy the following JARs from the
<EI_HOME>/wso2/broker/client-lib
folder to the<EI_HOME>/lib
folder.andes-client-3.2.13.jar
geronimo-jms_1.1_spec-1.1.0.wso2v1.jar
org.wso2.securevault-1.0.0-wso2v2.jar
Configuring the JMS publisher
Configure a proxy service named SMSSenderProxy
as shown below to accept messages sent via the HTTP transport, and to place those messages in the SMSStore
queue in WSO2 MB.follows:
Code Block | ||||
---|---|---|---|---|
| ||||
<proxy xmlns="http://ws.apache.org/ns/synapse" name="SMSSenderProxy" transports="https,http" statistics="disable" trace="disable" startOnLoad="true"> <target> <inSequence> <property name="transport.jms.ContentTypeProperty" value="Content-Type" scope="axis2"/> </inSequence> <outSequence> <property name="TRANSPORT_HEADERS" scope="axis2" action="remove"/> <send/> </outSequence> <endpoint> <address uri="jms:/SMSStore?transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory&java.naming.factory.initial=org.wso2.andes.jndi.PropertiesFileInitialContextFactory&java.naming.provider.url=repository/conf/jndi.properties&transport.jms.DestinationType=queue&transport.jms.ReplyDestination=SMSReceiveNotificationStore"/> </endpoint> </target> <description/> </proxy> |
This proxy service accepts messages sent via the HTTP transport, and stores the messages in the SMSStore
queue in the Broker Profile of WSO2 EI.
The endpoint of this proxy service uses the following properties to map the proxy service with WSO2 MBBroker Profile.
Property | Value for this use case | Description |
---|---|---|
address uri | jms:/SMSStore | The destination in which the request received by the proxy service is stored. |
java.naming.factory.initial | org.wso2.andes.jndi.PropertiesFileInitialContextFactory | This property specifies the initial context factory to use. The value specified here should be the same as that specified in |
java.naming.provider.url | repository/conf/jndi.properties | The location of the JNDI service provider. |
transport.jms.DestinationType | queue | The destination type of the JMS message that will be generated by the proxy service. |
transport.jms.ReplyDestination | SMSReceiveNotificationStore | The destination in which the response generated by the back-end service is stored. |
Since this is a two-way invocation, the OUT_ONLY property is not set in the In sequence.
...
Configure a proxy service named SMSForwardProxy
to consume messages from the SMSStore
queue in WSO2 MB of the Message Broker Profile, and forward them the messages to the back-end service.
Code Block | ||
---|---|---|
| ||
<proxy xmlns="http://ws.apache.org/ns/synapse" name="SMSForwardProxy" transports="jms" statistics="disable" trace="disable" startOnLoad="true"> <target> <inSequence> <send> <endpoint> <address uri="http://localhost:9000/services/SimpleStockQuoteService"/> </endpoint> </send> </inSequence> <outSequence> <send/> </outSequence> </target> <parameter name="transport.jms.ContentType"> <rules> <jmsProperty>contentType</jmsProperty> <default>text/xml</default> </rules> </parameter> <parameter name="transport.jms.ConnectionFactory">myQueueConnectionFactory</parameter> <parameter name="transport.jms.DestinationType">queue</parameter> <parameter name="transport.jms.Destination">SMSStore</parameter> <description/> </proxy> |
The transport.jms.ConnectionFactory
, transport.jms.DestinationType
parameter and the transport.jms.Destination properties
parameter map this the proxy service to the SMSStore
queue.
The SimpleStockQuoteService
sample shipped with WSO2 ESB EI is used as the back-end service in this example. To invoke this service, the address URI of this proxy service is defined as http://localhost:9000/services/SimpleStockQuoteServic
e.
...
Deploying the sample back-end service
In this example, the SimpleStockQuoteService
serving serves as the back-end service and receives the message from the SMSForwardProxy
proxy service via the JMS transport. The response is sent by by the SimpleStockQuoteService
is published in the SMSReceiveNotificationStore
queue which was that is set as the value for of the transport.jms.ReplyDestination
parameter of the SMSSenderProxy
proxy service. This allows the SMSSenderProx
y to pick the response and deliver it to the client.
The back-end service is started as follows.
...
Follow the steps below to build and deploy the SimpleStockQuoteService
:
- Open a command prompt (or a shell in Linux) and go to the
<EI_HOME>/samples/axis2Server
directory/src/SimpleStockQuoteService
directory.For Windows:axis2server.bat
For Linux:axis2server.sh
Execute theant
command from <ESB Run
ant
.
Starting the Axis2 server
Follow the steps below to start the Axis2 server:
- Open a command prompt (or a shell in Linux) and go to the
<EI_HOME>/samples/axis2Server/src/SimpleStockQuoteService
directory.
...
- directory.
- Execute one of the following commands
- On Windows:
axis2server.bat
- On Linux/Solaris:
./axis2server.sh
- On Windows:
Invoking the JMS publisher
Execute the following command from the <ESBthe <EI_HOME>/samplesamples/axis2Client
directory to directory to invoke the SMSSenderProxy
proxy service that you defined as the JMS publisher.:
Code Block |
---|
ant stockquote -Daddurl=http://localhost:8280/services/SMSSenderProxy -Dsymbol=IBM |
You will get see the following response.:
Code Block |
---|
Standard :: Stock price = $149.43669233447662 |