[jboss-svn-commits] JBL Code SVN: r23691 - in labs/jbossesb/workspace/mlittle/legstar/product: rosetta/src/org/jboss/soa/esb/listeners/config/mappers and 2 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Nov 4 03:01:30 EST 2008


Author: jim.ma
Date: 2008-11-04 03:01:30 -0500 (Tue, 04 Nov 2008)
New Revision: 23691

Modified:
   labs/jbossesb/workspace/mlittle/legstar/product/rosetta/src/org/jboss/soa/esb/listeners/config/GatewayGenerator.java
   labs/jbossesb/workspace/mlittle/legstar/product/rosetta/src/org/jboss/soa/esb/listeners/config/mappers/TomcatListenerMapper.java
   labs/jbossesb/workspace/mlittle/legstar/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/TomcatDispatchServlet.java
   labs/jbossesb/workspace/mlittle/legstar/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/TomcatGatewayListener.java
   labs/jbossesb/workspace/mlittle/legstar/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/TomcatMessageComposer.java
   labs/jbossesb/workspace/mlittle/legstar/product/samples/quickstarts/tomcat_listener/jboss-esb.xml
Log:
Added asyn and SSL support for tomcat listener; enable to configure more properties to tomcat listener

Modified: labs/jbossesb/workspace/mlittle/legstar/product/rosetta/src/org/jboss/soa/esb/listeners/config/GatewayGenerator.java
===================================================================
--- labs/jbossesb/workspace/mlittle/legstar/product/rosetta/src/org/jboss/soa/esb/listeners/config/GatewayGenerator.java	2008-11-04 06:58:31 UTC (rev 23690)
+++ labs/jbossesb/workspace/mlittle/legstar/product/rosetta/src/org/jboss/soa/esb/listeners/config/GatewayGenerator.java	2008-11-04 08:01:30 UTC (rev 23691)
@@ -125,7 +125,6 @@
      * @throws ConfigurationException Invalid listener configuration.
      */
     private void addGatewayConfig(Element root, Listener gateway) throws ConfigurationException {
-    	System.out.println("---use new gateway geneartor ----");
         Element listenerConfig;
 
         // Of course we could do the following reflectively if we really want to - TODO perhaps!!

Modified: labs/jbossesb/workspace/mlittle/legstar/product/rosetta/src/org/jboss/soa/esb/listeners/config/mappers/TomcatListenerMapper.java
===================================================================
--- labs/jbossesb/workspace/mlittle/legstar/product/rosetta/src/org/jboss/soa/esb/listeners/config/mappers/TomcatListenerMapper.java	2008-11-04 06:58:31 UTC (rev 23690)
+++ labs/jbossesb/workspace/mlittle/legstar/product/rosetta/src/org/jboss/soa/esb/listeners/config/mappers/TomcatListenerMapper.java	2008-11-04 08:01:30 UTC (rev 23691)
@@ -23,6 +23,7 @@
 import org.jboss.soa.esb.dom.YADOMUtil;
 import org.jboss.soa.esb.listeners.ListenerTagNames;
 import org.jboss.soa.esb.listeners.config.Generator.XMLBeansModel;
+import org.jboss.soa.esb.listeners.config.xbeanmodel.PropertyDocument.Property;
 import org.jboss.soa.esb.listeners.config.xbeanmodel.TomcatBusDocument.TomcatBus;
 import org.jboss.soa.esb.listeners.config.xbeanmodel.TomcatListenerDocument.TomcatListener;
 import org.jboss.soa.esb.listeners.config.xbeanmodel.TomcatProviderDocument.TomcatProvider;
@@ -63,7 +64,16 @@
         // Map the standard listener attributes - common across all listener types...
         MapperUtil.mapDefaultAttributes(listener, listenerNode, model);
         // Map the <property> elements targeted at the listener - from the listener itself.
-        MapperUtil.mapProperties(provider.getPropertyList(), listenerNode);
+        //MapperUtil.mapProperties(provider.getPropertyList(), listenerNode);
+        for(Property property : provider.getPropertyList()) {
+            Element propertyElement = listenerNode.getOwnerDocument().createElement("property");
+            MapperUtil.serialize(property, propertyElement);
+            listenerNode.appendChild(propertyElement);           
+         }
+        
+        
+        
+        
         MapperUtil.mapProperties(bus.getPropertyList(), listenerNode);
         MapperUtil.mapProperties(listener.getPropertyList(), listenerNode);
 

Modified: labs/jbossesb/workspace/mlittle/legstar/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/TomcatDispatchServlet.java
===================================================================
--- labs/jbossesb/workspace/mlittle/legstar/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/TomcatDispatchServlet.java	2008-11-04 06:58:31 UTC (rev 23690)
+++ labs/jbossesb/workspace/mlittle/legstar/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/TomcatDispatchServlet.java	2008-11-04 08:01:30 UTC (rev 23691)
@@ -26,11 +26,13 @@
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import org.jboss.internal.soa.esb.util.StreamUtils;
 import org.jboss.soa.esb.ConfigurationException;
 import org.jboss.soa.esb.couriers.FaultMessageException;
 import org.jboss.soa.esb.helpers.ConfigTree;
 import org.jboss.soa.esb.listeners.message.UncomposedMessageDeliveryAdapter;
 import org.jboss.soa.esb.message.Message;
+import org.jboss.soa.esb.util.ClassUtil;
 
 /**
  * This class is for dispatching the http request to ESB action process pipe
@@ -44,8 +46,11 @@
 
 	/** If this a synchronous invocation * */
 	private boolean synchronous = true;
+	
+	/** asyncResponse file location */
+    private String asyncResponse = null;
 
-	private int serviceTimeout = 2000;
+	private int serviceTimeout = 20000;
 
 	/** ESB message delivery adapter */
 	public UncomposedMessageDeliveryAdapter messageDeliveryAdapter = null;
@@ -59,12 +64,12 @@
 	public void init() throws ServletException {
 		ConfigTree config = (ConfigTree) getServletContext().getAttribute(
 				"config");
-		synchronous = !config.getAttribute("synchronous", "true")
-				.equalsIgnoreCase("false");
+		synchronous = !config.getAttribute("synchronous", "true").equalsIgnoreCase("false");
 
-		serviceTimeout = Integer.parseInt(config.getAttribute("serviceTimeout",
-				"20000"));
+		serviceTimeout = Integer.parseInt(config.getAttribute("serviceTimeout", "20000"));
 
+		asyncResponse = config.getAttribute("asyncResponse");
+				
 		try {
 			messageDeliveryAdapter = UncomposedMessageDeliveryAdapter
 					.getGatewayDeliveryAdapter(config,
@@ -89,14 +94,16 @@
 	 */
 	protected void serveRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 
-		TomcatRequestWrapper wrapper = new TomcatRequestWrapper(request,
-				response);
+		TomcatRequestWrapper wrapper = new TomcatRequestWrapper(request, response);
 
 		try {
 			if (synchronous) {
 				messageDeliveryAdapter.deliverSync(wrapper, serviceTimeout);
 			} else {
 				messageDeliveryAdapter.deliverAsync(wrapper);
+				if (asyncResponse != null) {			       
+					response.getOutputStream().write(StreamUtils.readStream(getClass().getResourceAsStream(asyncResponse)));			        
+				} 
 			}
 		} catch (FaultMessageException fme) {
 			Message faultMessage = fme.getReturnedMessage();

Modified: labs/jbossesb/workspace/mlittle/legstar/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/TomcatGatewayListener.java
===================================================================
--- labs/jbossesb/workspace/mlittle/legstar/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/TomcatGatewayListener.java	2008-11-04 06:58:31 UTC (rev 23690)
+++ labs/jbossesb/workspace/mlittle/legstar/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/TomcatGatewayListener.java	2008-11-04 08:01:30 UTC (rev 23691)
@@ -20,13 +20,17 @@
 package org.jboss.soa.esb.listeners.gateway;
 
 import java.net.URI;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import javax.management.AttributeNotFoundException;
 import javax.management.InstanceNotFoundException;
+import javax.management.MBeanException;
 import javax.management.MBeanServer;
 import javax.management.MalformedObjectNameException;
 import javax.management.ObjectName;
+import javax.management.ReflectionException;
 
 import org.apache.catalina.Container;
 import org.apache.catalina.LifecycleException;
@@ -36,16 +40,19 @@
 import org.apache.catalina.core.StandardWrapper;
 import org.apache.catalina.startup.ContextConfig;
 import org.apache.log4j.Logger;
+import org.apache.tomcat.util.IntrospectionUtils;
 import org.jboss.mx.util.MBeanServerLocator;
 import org.jboss.soa.esb.ConfigurationException;
 import org.jboss.soa.esb.addressing.EPR;
 import org.jboss.soa.esb.helpers.ConfigTree;
+import org.jboss.soa.esb.helpers.KeyValuePair;
 import org.jboss.soa.esb.listeners.ListenerTagNames;
 import org.jboss.soa.esb.listeners.lifecycle.AbstractManagedLifecycle;
 import org.jboss.soa.esb.listeners.lifecycle.ManagedLifecycleException;
 import org.jboss.soa.esb.listeners.message.UncomposedMessageDeliveryAdapter;
 import org.jboss.soa.esb.services.registry.RegistryException;
 import org.jboss.soa.esb.services.registry.RegistryFactory;
+import org.jboss.soa.esb.util.ClassUtil;
 
 /**
  * Tomcat Listener provids the functionality to pass the http request 
@@ -128,6 +135,9 @@
 	/** The default servlet used to dispatch the http request to ESB service*/
 	private String dispatchServletClassName = TomcatDispatchServlet.class.getName();
 	
+	/***Protocol value */
+	private Object protocol = "http";
+	
     
 	/**Constuct the TomcatGatewyListner
 	 * @param config The listener configuration
@@ -145,6 +155,18 @@
 			dispatchServletClassName = config.getAttribute(DISPATCH_SERVLET_CLASS);
 		}
 		
+        boolean synchronous = !config.getAttribute("synchronous", "true").equalsIgnoreCase("false");
+        if (!synchronous) {
+			String asyncResponse = config.getAttribute("asyncResponse");
+			if (asyncResponse != null) {
+				if (ClassUtil.getResourceAsStream(asyncResponse, getClass()) == null) {
+					throw new ConfigurationException("Asynchronous response resource file '" + asyncResponse
+									+ "' not found on classpath.");
+				}
+			}
+		}
+		
+		
 		mbeanServer = MBeanServerLocator.locateJBoss();
 		
 		//Get the jboss web domain name
@@ -231,7 +253,7 @@
 		}
 
 	 	try {
-			endpointReference = new EPR(new URI("http://"+ host + ":" + port + this.httpContext));
+			endpointReference = new EPR(new URI(protocol + "://"+ host + ":" + port + this.httpContext));
 		} catch (Exception e) {
 			throw new ManagedLifecycleException(
 					"Remoting Listener configuration failed.", e);
@@ -286,14 +308,35 @@
 			Connector connector = null;
 			connector = new Connector("org.apache.coyote.http11.Http11Protocol");
 			connector.setPort(Integer.parseInt(port));
+			String maxThreads = getConfig().getAttribute(ListenerTagNames.MAX_THREADS_TAG);
+			if (maxThreads != null) {
+				connector.setProperty("maxThreads", maxThreads);
+			}
+			
+			//Set Property			
+			List<KeyValuePair> properties = getConfig().childPropertyList();
+			for (KeyValuePair property : properties) {	           			
+				boolean effected = IntrospectionUtils.setProperty(connector, property.getKey(), property.getValue());
+				if (!effected) {
+					connector.setProperty(property.getKey(), property.getValue());
+				}
+			}		
 			mbeanServer.invoke(standardServiceName, "addConnector",
 					new Object[] { connector }, new String[] { Connector.class
-							.getName() });			
+							.getName() });
+			protocol = connector.getScheme();
 		    synchronized (connectorReference) {
 				connectorReference.put(port, 1);
 			}
 
 		} else {
+			ObjectName obj = (ObjectName)connectors.iterator().next();
+			try {
+		        protocol = mbeanServer.getAttribute(obj, "schema");
+			} catch (Exception e) {
+                //do nothing and use default http
+				protocol = "http";
+			} 
 			updateReference(connectorReference, port, 1);
 		}
 		

Modified: labs/jbossesb/workspace/mlittle/legstar/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/TomcatMessageComposer.java
===================================================================
--- labs/jbossesb/workspace/mlittle/legstar/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/TomcatMessageComposer.java	2008-11-04 06:58:31 UTC (rev 23690)
+++ labs/jbossesb/workspace/mlittle/legstar/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/TomcatMessageComposer.java	2008-11-04 08:01:30 UTC (rev 23691)
@@ -19,9 +19,7 @@
  */
 package org.jboss.soa.esb.listeners.gateway;
 
-import java.io.ByteArrayOutputStream;
 import java.io.IOException;
-import java.io.InputStream;
 import java.util.Enumeration;
 import java.util.Iterator;
 import java.util.Map;
@@ -30,6 +28,7 @@
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import org.jboss.internal.soa.esb.util.StreamUtils;
 import org.jboss.soa.esb.actions.ActionUtils;
 import org.jboss.soa.esb.helpers.ConfigTree;
 import org.jboss.soa.esb.listeners.message.AbstractMessageComposer;
@@ -95,11 +94,10 @@
 	protected void populateMessage(Message message, T requestWrapper)
 			throws MessageDeliverException {
 		ServletRequest request = requestWrapper.getRequest();
-		Map paraMap = request.getParameterMap();
+		Map paraMap = request.getParameterMap();;
 		byte[] bodyBytes = null;
 		try {
-			InputStream ins = request.getInputStream();
-			bodyBytes = getBytes(ins);
+			bodyBytes = StreamUtils.readStream(request.getInputStream());
 		} catch (IOException e) {
 			throw new MessageDeliverException(
 					"Failed to read body data from http request", e);
@@ -173,21 +171,4 @@
 		return headerMap;
 	}
 
-	/**
-	 * Method for reading the servlet request inputstream 
-	 * @param ins Servlet request InputStream
-	 * @return binary data
-	 * @throws IOException When error occured
-	 */
-	public byte[] getBytes(final InputStream ins) throws IOException {
-
-		byte[] bytes = new byte[2048];
-		int s = 0;
-		ByteArrayOutputStream bout = new ByteArrayOutputStream();
-		while ((s = ins.read(bytes)) != -1) {
-			bout.write(bytes, 0, s);
-		}
-		return bout.toByteArray();
-
-	}
 }

Modified: labs/jbossesb/workspace/mlittle/legstar/product/samples/quickstarts/tomcat_listener/jboss-esb.xml
===================================================================
--- labs/jbossesb/workspace/mlittle/legstar/product/samples/quickstarts/tomcat_listener/jboss-esb.xml	2008-11-04 06:58:31 UTC (rev 23690)
+++ labs/jbossesb/workspace/mlittle/legstar/product/samples/quickstarts/tomcat_listener/jboss-esb.xml	2008-11-04 08:01:30 UTC (rev 23691)
@@ -9,10 +9,15 @@
                       dest-name="queue/quickstart_tomcatlistener_Request_esb"
                   />
               </jms-bus>
-          </jms-provider>
+          </jms-provider>   
           
-          
-         <tomcat-provider name="HTTP" host="localhost" port="8080">
+         <tomcat-provider name="HTTP" host="localhost" port="4443">
+            <!--property name="maxThreads" value="150"/>
+            <property name="scheme" value="https"/>
+            <property name="secure" value="true"/>
+            <property name="SSLEnabled" value="true"/>
+            <property name="Keystore" value="./key/.keystore"/>
+            <property name="Keypass" value="changeit"/-->
             <tomcat-bus busid="HTTP-1" context="/jbossesb/tomcat/listener" />
          </tomcat-provider>
       </providers>
@@ -25,8 +30,12 @@
             <listeners>                
                 <tomcat-listener name="A1-HTTP"
                     busidref="HTTP-1"
-                    maxThreads="1"
-                    is-gateway="true"/>	
+                    maxThreads="100"
+                    is-gateway="true">
+                <!--property name="synchronous" value="false"/>
+                <property name="asyncResponse" value="/response.txt"/-->
+
+               </tomcat-listener>	
                 <jms-listener name="JMS-Gateway"
                 	busidref="quickstartEsbChannel" 
                 	/>    




More information about the jboss-svn-commits mailing list