You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@synapse.apache.org by ru...@apache.org on 2009/08/01 12:16:56 UTC

svn commit: r799821 - in /synapse/trunk/java: modules/samples/src/main/java/samples/userguide/GenericJMSClient.java src/site/xdoc/Synapse_Samples.xml

Author: ruwan
Date: Sat Aug  1 10:16:55 2009
New Revision: 799821

URL: http://svn.apache.org/viewvc?rev=799821&view=rev
Log:
Applying the patch from Rajika for https://issues.apache.org/jira/browse/SYNAPSE-564

Modified:
    synapse/trunk/java/modules/samples/src/main/java/samples/userguide/GenericJMSClient.java
    synapse/trunk/java/src/site/xdoc/Synapse_Samples.xml

Modified: synapse/trunk/java/modules/samples/src/main/java/samples/userguide/GenericJMSClient.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/samples/src/main/java/samples/userguide/GenericJMSClient.java?rev=799821&r1=799820&r2=799821&view=diff
==============================================================================
--- synapse/trunk/java/modules/samples/src/main/java/samples/userguide/GenericJMSClient.java (original)
+++ synapse/trunk/java/modules/samples/src/main/java/samples/userguide/GenericJMSClient.java Sat Aug  1 10:16:55 2009
@@ -19,20 +19,13 @@
 
 package samples.userguide;
 
-import javax.jms.BytesMessage;
-import javax.jms.Queue;
-import javax.jms.QueueConnection;
-import javax.jms.QueueConnectionFactory;
-import javax.jms.QueueSender;
-import javax.jms.QueueSession;
-import javax.jms.TextMessage;
+import javax.jms.*;
 import javax.naming.InitialContext;
-import javax.naming.NamingException;
-import java.util.Properties;
 import java.io.File;
 import java.io.FileInputStream;
-import java.io.InputStream;
 import java.io.IOException;
+import java.io.InputStream;
+import java.util.Properties;
 
 public class GenericJMSClient {
     private QueueConnection connection;
@@ -84,7 +77,12 @@
     }
 
     private void connect(String destName) throws Exception {
+
         Properties env = new Properties();
+        String factoryURL = System.getProperty("java.naming.factory.url.pkgs");
+        String connectionFactoryName
+                = getProperty("transport.jms.ConnectionFactoryJNDIName", "ConnectionFactory");
+
         if (System.getProperty("java.naming.provider.url") == null) {
             env.put("java.naming.provider.url", "tcp://localhost:61616");
         }
@@ -92,6 +90,13 @@
             env.put("java.naming.factory.initial",
                 "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
         }
+        if (connectionFactoryName != null) {
+            env.put("transport.jms.ConnectionFactoryJNDIName", connectionFactoryName);
+        }
+        if (factoryURL != null) {
+            env.put("java.naming.factory.url.pkgs", factoryURL);
+        }
+        
         InitialContext ic = new InitialContext(env);
         QueueConnectionFactory confac = (QueueConnectionFactory) ic.lookup("ConnectionFactory");
         connection = confac.createQueueConnection();

Modified: synapse/trunk/java/src/site/xdoc/Synapse_Samples.xml
URL: http://svn.apache.org/viewvc/synapse/trunk/java/src/site/xdoc/Synapse_Samples.xml?rev=799821&r1=799820&r2=799821&view=diff
==============================================================================
--- synapse/trunk/java/src/site/xdoc/Synapse_Samples.xml (original)
+++ synapse/trunk/java/src/site/xdoc/Synapse_Samples.xml Sat Aug  1 10:16:55 2009
@@ -218,7 +218,9 @@
 <li>
 <a href="#Sample261">Sample 261: Switch between FIX versions </a></li>
 <li>
-<a href="#Sample262">Sample 262: CBR of FIX messages </a></li></ul></li>
+<a href="#Sample262">Sample 262: CBR of FIX messages </a></li>
+<li>
+<a href="#Sample263">Sample 263: Transport switching - JMS to http/s using JBoss Messaging(JBM) </a></li></ul></li>
 <li>
 <a href="#Task">Introduction to Synapse tasks</a>
 <ul>
@@ -2757,6 +2759,80 @@
 <p>Synapse will not forward the orders with other symbols to any endpoint. (default case has kept blank in the configuration)</p>
 <p>To get an idea about the various transport parameters being used in this sample see 
 <a href="Synapse_Samples_Setup.html#fixparameters">FIX Transport Parameters </a>. </p>
+
+<h2>
+<a name="Sample263" id="Sample263">Sample 263: Transport switching - JMS to http/s using JBoss Messaging(JBM) </a></h2>
+<pre xml:space="preserve"><![CDATA[<definitions xmlns="http://ws.apache.org/ns/synapse">
+
+    <proxy name="StockQuoteProxy" transports="jms">
+        <target>
+            <inSequence>
+                <property action="set" name="OUT_ONLY" value="true"/>
+            </inSequence>
+            <endpoint>
+                <address uri="http://localhost:9000/services/SimpleStockQuoteService"/>
+            </endpoint>
+            <outSequence>
+                <send/>
+            </outSequence>
+        </target>
+        <publishWSDL uri="file:repository/conf/sample/resources/proxy/sample_proxy_1.wsdl"/>
+        <parameter name="transport.jms.ContentType">
+            <rules>
+                <jmsProperty>contentType</jmsProperty>
+                <default>application/xml</default>
+            </rules>
+        </parameter>
+    </proxy>
+
+</definitions>]]></pre>
+<p>
+<strong>Objective: Introduction to switching transports with proxy services. The JMS provider will be <a href="http://jboss.org/jbossmessaging/">JBoss Messaging(JBM).</a></strong> </p>
+<p>
+<strong>Prerequisites:</strong>
+<br></br> Start the Axis2 server and deploy the SimpleStockQuoteService (Refer steps above)
+<br></br> <a href="http://jboss.org/jbossmessaging/">Download</a>, install and start JBM server, and configure Synapse to listen on JBM (refer notes below)
+<br></br> Start the Synapse configuration numbered 250: i.e. synapse -sample 250
+<br></br> We need to configure the required queues in JBM. Add the following entry to JBM jms configuration inside file-config/stand-alone/non-clustered/jbm-jms.xml.
+    Once JBM is installed and started you should get a message as follows: </p>
+<pre xml:space="preserve">
+&lt;queue name=&quot;StockQuoteProxy&quot;&gt;
+    &lt;entry name=&quot;StockQuoteProxy&quot;/&gt;
+&lt;/queue&gt;
+</pre>
+<p>Once you started the JBM server with the above changes you'll be able to see the following on STDOUT.</p>
+<pre xml:space="preserve">10:18:02,673 INFO [org.jboss.messaging.core.server.impl.MessagingServerImpl]  JBoss Messaging Server version 2.0.0.BETA3 (maggot, 104) started </pre>
+<p>You will now need to configure the Axis2 instance used by Synapse (not the sample Axis2 server) to enable JMS support using the above provider. Refer to the Axis2 documentation on setting up JMS for more details (http://ws.apache.org/axis2/1_1/jms-transport.html). You will also need to copy the jbm-core-client.jar, jbm-jms-client.jar, jnp-client.jar(these jars are inside client folder ) and
+    jbm-transports.jar, netty.jar(these jars are from lib folder) jars from JBM into the lib directory to allow Synapse to connect to the JBM JMS provider. This was tested with JBM 2.0.0.BETA3 </p>
+
+<p>You need to add the following configuration for Axis2 transport listener in axis2.xml found at repository/conf/axis2.xml.</p>
+<pre xml:space="preserve">
+&lt;transportReceiver name=&quot;jms&quot; class=&quot;org.apache.axis2.transport.jms.JMSListener&quot;&gt;
+    &lt;parameter name=&quot;java.naming.factory.initial&quot;&gt;org.jnp.interfaces.NamingContextFactory&lt;/parameter&gt;
+    &lt;parameter name=&quot;java.naming.provider.url&quot;&gt;jnp://localhost:1099&lt;/parameter&gt;
+    &lt;parameter name=&quot;java.naming.factory.url.pkgs&quot;&gt;org.jboss.naming:org.jnp.interfaces&lt;/parameter&gt;
+    &lt;parameter name=&quot;transport.jms.ConnectionFactoryJNDIName&quot;&gt;ConnectionFactory&lt;/parameter&gt;
+&lt;/transportReceiver&gt;
+</pre>
+<p>And also uncomment the section for JMS transport sender.</p>
+<p>Once you start the Synapse configuration and request for the WSDL of the proxy service (http://localhost:8280/services/StockQuoteProxy?wsdl) you will notice that its exposed only on the JMS transport. This is because the configuration specified this requirement in the proxy service definition. </p>
+<p>Now lets send a stock quote request on JMS, using the dumb stock quote client as follows: </p>
+<pre xml:space="preserve">ant jmsclient -Djms_type=pox -Djms_dest=StockQuoteProxy -Djms_payload=MSFT -Djava.naming.provider.url=jnp://localhost:1099 -Djava.naming.factory.initial=org.jnp.interfaces.NamingContextFactory -D=java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces</pre>
+<p>On the Synapse debug log you will notice that the JMS listener received the request message as: </p>
+<pre xml:space="preserve">[JMSWorker-1] DEBUG ProxyServiceMessageReceiver -Proxy Service StockQuoteProxy received a new message...</pre>
+<p>Now if you examine the console running the sample Axis2 server, you will see a message indicating that the server has accepted an order as follows: </p>
+<pre xml:space="preserve">Accepted order for : 16517 stocks of MSFT at $ 169.14622538721846</pre>
+<p>In this sample, the client sends the request message to the proxy service exposed over JMS in Synsape. Synapse forwards this message to the HTTP EPR of the simple stock quote service hosted on the sample Axis2 server.
+Note that the operation is out-only and no response is sent back to the client. The transport.jms.ContentType property
+is necessary to allow the JMS transport to determine the content type of incoming messages. With the given configuration
+it will first try to read the content type from the 'contentType' message property and fall back to 'application/xml'
+(i.e. POX) if this property is not set. Note that the JMS client used in this example doesn't send any content type information.</p>
+<p>Note: It is possible to instruct a JMS proxy service to listen to an already existing destination without creating a new one. To do this, use the parameter elements on the proxy service definition to specify the destination and connection factory etc. </p>
+<p>e.g. </p>
+<pre xml:space="preserve">&lt;parameter name=&quot;transport.jms.Destination&quot;&gt;dynamicTopics/something.TestTopic&lt;/parameter&gt;</pre>
+
+
+
 <h1>
 <a name="Task" id="Task">Introduction to Synapse Tasks</a> </h1>
 <h2>