[jboss-svn-commits] JBL Code SVN: r32943 - in labs/jbossesb/workspace/dward/JBESB_4_8_Camel/product: samples/quickstarts/helloworld_camel and 1 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue May 18 18:00:46 EDT 2010


Author: dward
Date: 2010-05-18 18:00:46 -0400 (Tue, 18 May 2010)
New Revision: 32943

Modified:
   labs/jbossesb/workspace/dward/JBESB_4_8_Camel/product/rosetta/src/org/jboss/soa/esb/camel/JBossESBProcessor.java
   labs/jbossesb/workspace/dward/JBESB_4_8_Camel/product/rosetta/src/org/jboss/soa/esb/camel/ServiceProcessor.java
   labs/jbossesb/workspace/dward/JBESB_4_8_Camel/product/samples/quickstarts/helloworld_camel/jboss-esb.xml
   labs/jbossesb/workspace/dward/JBESB_4_8_Camel/product/samples/quickstarts/helloworld_camel/src/org/jboss/soa/esb/samples/quickstart/helloworld_camel/HelloWorldRouteBuilder.java
Log:
getting closer to synchronicity


Modified: labs/jbossesb/workspace/dward/JBESB_4_8_Camel/product/rosetta/src/org/jboss/soa/esb/camel/JBossESBProcessor.java
===================================================================
--- labs/jbossesb/workspace/dward/JBESB_4_8_Camel/product/rosetta/src/org/jboss/soa/esb/camel/JBossESBProcessor.java	2010-05-18 19:19:41 UTC (rev 32942)
+++ labs/jbossesb/workspace/dward/JBESB_4_8_Camel/product/rosetta/src/org/jboss/soa/esb/camel/JBossESBProcessor.java	2010-05-18 22:00:46 UTC (rev 32943)
@@ -19,12 +19,20 @@
  */
 package org.jboss.soa.esb.camel;
 
+import java.io.Serializable;
+import java.net.URI;
 import java.util.Map;
+import java.util.Map.Entry;
 
+import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
+import org.jboss.soa.esb.addressing.Call;
+import org.jboss.soa.esb.addressing.eprs.InVMEpr;
 import org.jboss.soa.esb.message.Message;
 import org.jboss.soa.esb.message.Properties;
 import org.jboss.soa.esb.message.format.MessageFactory;
+import org.jboss.soa.esb.message.format.MessageType;
+import org.jboss.soa.esb.util.Util;
 
 /**
  * JBossESBProcessor.
@@ -34,19 +42,37 @@
 public abstract class JBossESBProcessor implements Processor
 {
 	
-	protected Message convert(org.apache.camel.Message camelMessage)
+	protected Message convertCamelToESB(Exchange exchange, org.apache.camel.Message camelMessage) throws Exception
 	{
-		Message esbMessage = MessageFactory.getInstance().getMessage();
+		Message esbMessage;
+		Serializable serial = camelMessage.getHeader(Message.class.getName(), Serializable.class);
+		if (serial != null)
+		{
+			esbMessage = Util.deserialize(serial);
+		}
+		else
+		{
+			esbMessage = MessageFactory.getInstance().getMessage(MessageType.JBOSS_XML);
+			// maintain message id (both JBossESB and Camel use UUID.randomUUID(), so we can just reuse)
+			esbMessage.getHeader().getCall().setMessageID(new URI(camelMessage.getMessageId()));
+		}
 		
-		// camel headers --> esb properties
+		// maintain correlation
+		setRelatesTo(exchange, esbMessage);
+		
+		// update esb properties from camel headers
 		Properties properties = esbMessage.getProperties();
 		Map<String,Object> headers = camelMessage.getHeaders();
-		for (String name : headers.keySet())
+		for (Entry<String, Object> entry : headers.entrySet())
 		{
-			properties.setProperty(name, headers.get(name));
+			String key = entry.getKey();
+			if (!key.equals(Message.class.getName()))
+			{
+				properties.setProperty(key, entry.getValue());
+			}
 		}
 		
-		// body
+		// update esb body from camel body
 		String body = camelMessage.getBody(String.class);
 		if (body != null)
 		{
@@ -56,18 +82,26 @@
 		return esbMessage;
 	}
 	
-	protected org.apache.camel.Message convert(Message esbMessage)
+	protected org.apache.camel.Message convertESBToCamel(Exchange exchange, Message esbMessage) throws Exception
 	{
 		org.apache.camel.Message camelMessage = new org.apache.camel.impl.DefaultMessage();
 		
-		// esb properties --> camel headers
+		camelMessage.setHeader(Message.class.getName(), Util.serialize(esbMessage));
+		
+		// maintain message id (both JBossESB and Camel use UUID.randomUUID(), so we can just reuse)
+		camelMessage.setMessageId(esbMessage.getHeader().getCall().getMessageID().toString());
+		
+		// maintain correlation
+		setRelatesTo(exchange, esbMessage);
+		
+		// set camel headers from esb properties
 		Properties properties = esbMessage.getProperties();
 		for (String name : properties.getNames())
 		{
 			camelMessage.setHeader(name, properties.getProperty(name));
 		}
 		
-		// body
+		// set camel body from esb body
 		Object body = esbMessage.getBody().get();
 		if (body != null)
 		{
@@ -77,4 +111,15 @@
 		return camelMessage;
 	}
 	
+	private void setRelatesTo(Exchange exchange, Message esbMessage) throws Exception
+	{
+		Call call = esbMessage.getHeader().getCall();
+		URI relatesTo = call.getRelatesTo();
+		if (relatesTo == null)
+		{
+			relatesTo = new URI(InVMEpr.INVM_PROTOCOL, "correlationID", exchange.getExchangeId());
+			call.setRelatesTo(relatesTo);
+		}
+	}
+	
 }

Modified: labs/jbossesb/workspace/dward/JBESB_4_8_Camel/product/rosetta/src/org/jboss/soa/esb/camel/ServiceProcessor.java
===================================================================
--- labs/jbossesb/workspace/dward/JBESB_4_8_Camel/product/rosetta/src/org/jboss/soa/esb/camel/ServiceProcessor.java	2010-05-18 19:19:41 UTC (rev 32942)
+++ labs/jbossesb/workspace/dward/JBESB_4_8_Camel/product/rosetta/src/org/jboss/soa/esb/camel/ServiceProcessor.java	2010-05-18 22:00:46 UTC (rev 32943)
@@ -45,17 +45,18 @@
 	
 	public void process(Exchange exchange) throws Exception
 	{
-		Message in = convert(exchange.getIn());
+		org.apache.camel.Message camelMessageIn = exchange.getIn();
+		Message esbMessageIn = convertCamelToESB(exchange, camelMessageIn);
 		ServiceInvoker invoker = new ServiceInvoker(service);
 		if (async)
 		{
-			invoker.deliverAsync(in);
-			exchange.setOut(convert(in));
+			invoker.deliverAsync(esbMessageIn);
 		}
 		else
 		{
-			Message out = invoker.deliverSync(in, timeout);
-			exchange.setOut(convert(out));
+			Message esbMessageOut = invoker.deliverSync(esbMessageIn, timeout);
+			org.apache.camel.Message camelMessageOut = convertESBToCamel(exchange, esbMessageOut);
+			exchange.setOut(camelMessageOut);
 		}
 	}
 

Modified: labs/jbossesb/workspace/dward/JBESB_4_8_Camel/product/samples/quickstarts/helloworld_camel/jboss-esb.xml
===================================================================
--- labs/jbossesb/workspace/dward/JBESB_4_8_Camel/product/samples/quickstarts/helloworld_camel/jboss-esb.xml	2010-05-18 19:19:41 UTC (rev 32942)
+++ labs/jbossesb/workspace/dward/JBESB_4_8_Camel/product/samples/quickstarts/helloworld_camel/jboss-esb.xml	2010-05-18 22:00:46 UTC (rev 32943)
@@ -10,7 +10,10 @@
 	<services>
 		<service category="helloworld_camel" name="service1" description="Hello World" invmScope="GLOBAL">
 			<actions mep="OneWay">
-				<action name="action1" class="org.jboss.soa.esb.actions.SystemPrintln"/>
+				<action name="action1" class="org.jboss.soa.esb.actions.SystemPrintln">
+					<property name="message" value="JBossESB Message"/>
+					<property name="printfull" value="true"/>
+				</action>
 			</actions>
 		</service>
 	</services>

Modified: labs/jbossesb/workspace/dward/JBESB_4_8_Camel/product/samples/quickstarts/helloworld_camel/src/org/jboss/soa/esb/samples/quickstart/helloworld_camel/HelloWorldRouteBuilder.java
===================================================================
--- labs/jbossesb/workspace/dward/JBESB_4_8_Camel/product/samples/quickstarts/helloworld_camel/src/org/jboss/soa/esb/samples/quickstart/helloworld_camel/HelloWorldRouteBuilder.java	2010-05-18 19:19:41 UTC (rev 32942)
+++ labs/jbossesb/workspace/dward/JBESB_4_8_Camel/product/samples/quickstarts/helloworld_camel/src/org/jboss/soa/esb/samples/quickstart/helloworld_camel/HelloWorldRouteBuilder.java	2010-05-18 22:00:46 UTC (rev 32943)
@@ -31,23 +31,17 @@
 public class HelloWorldRouteBuilder extends RouteBuilder
 {
 	
-	private final String fromUri;
-	private final String toUri;
+	// quickstart setup
+	private static final File DIR = new File(System.getProperty("java.io.tmpdir"), "helloworld_camel");
+	static { DIR.mkdirs(); DIR.deleteOnExit(); }
 	
-	public HelloWorldRouteBuilder()
-	{
-		super();
-		
-		File fromDir = new File(System.getProperty("java.io.tmpdir"), "helloworld_camel");
-		fromDir.mkdirs();
-		fromUri = "file://" + fromDir.getAbsolutePath() + "?delete=true";
-		
-		toUri = "jbossesb://service?category=helloworld_camel&name=service1";
-	}
-	
 	public void configure() throws Exception
 	{
-		from(fromUri).to(toUri);
+		// Camel Java DSL
+		from(DIR.toURI() + "?delete=true")
+		.to("log://CAMEL_BEFORE_JBOSSESB?showAll=true&multiline=true")
+		.to("jbossesb://service?category=helloworld_camel&name=service1&async=true")
+		.to("log://CAMEL_AFTER_JBOSSESB?showAll=true&multiline=true");
 	}
 	
 }



More information about the jboss-svn-commits mailing list