[jboss-svn-commits] JBL Code SVN: r25350 - labs/jbossesb/branches/JBESB_4_4_GA_FP/product/rosetta/src/org/jboss/soa/esb/listeners/gateway.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Feb 19 13:10:48 EST 2009


Author: tfennelly
Date: 2009-02-19 13:10:48 -0500 (Thu, 19 Feb 2009)
New Revision: 25350

Modified:
   labs/jbossesb/branches/JBESB_4_4_GA_FP/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/HttpGatewayListener.java
   labs/jbossesb/branches/JBESB_4_4_GA_FP/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/HttpServerDelegate.java
Log:
https://jira.jboss.org/jira/browse/JBESB-2377

Modified: labs/jbossesb/branches/JBESB_4_4_GA_FP/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/HttpGatewayListener.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_4_GA_FP/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/HttpGatewayListener.java	2009-02-19 15:08:07 UTC (rev 25349)
+++ labs/jbossesb/branches/JBESB_4_4_GA_FP/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/HttpGatewayListener.java	2009-02-19 18:10:48 UTC (rev 25350)
@@ -76,7 +76,7 @@
  * <p>This class uses the {@link org.jboss.soa.esb.listeners.gateway.HttpMessageComposer}
  * by default.
  * @see org.jboss.soa.esb.listeners.gateway.HttpMessageComposer
- * @see Torg.jboss.soa.esb.listeners.gateway.HttpDispatchServlet 
+ * @see org.jboss.soa.esb.listeners.gateway.HttpDispatchServlet 
  * @author <a href="mailto:ema at redhat.com">Jim Ma</a>
  */
 public class HttpGatewayListener extends AbstractManagedLifecycle {

Modified: labs/jbossesb/branches/JBESB_4_4_GA_FP/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/HttpServerDelegate.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_4_GA_FP/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/HttpServerDelegate.java	2009-02-19 15:08:07 UTC (rev 25349)
+++ labs/jbossesb/branches/JBESB_4_4_GA_FP/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/HttpServerDelegate.java	2009-02-19 18:10:48 UTC (rev 25350)
@@ -23,6 +23,7 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
 
 import javax.management.Attribute;
 import javax.management.InstanceNotFoundException;
@@ -51,10 +52,10 @@
 	public static final String defaultVHost = "localhost";
 	
 	/**Record the count that the same host name is referenced by other Tomcat listener instance */
-	public static Map<String, Integer> hostReference= new java.util.HashMap<String, Integer>(); 
+	public static Map<String, ReferenceCounter> hostReference= new ConcurrentHashMap<String, ReferenceCounter>();
 	
 	/**Record the count that the same connector/port is referenced by other Tomcat listener instance */
-	public static Map<String, Integer> connectorReference= new java.util.HashMap<String, Integer>(); 
+	public static Map<String, ReferenceCounter> connectorReference= new ConcurrentHashMap<String, ReferenceCounter>();
 	
 	
 	/**JMX domain name for http listener*/
@@ -71,15 +72,15 @@
 	}
 	
 	public static HttpServerDelegate getInstance() {
-		if (instance != null) {
-			return instance;
-		}
-		
-		synchronized(HttpServerDelegate.class) {
-			mbeanServer = MBeanServerLocator.locateJBoss();
-			instance = new HttpServerDelegate();
-			instance.createEngine();
-		}
+		if (instance == null) {
+            synchronized(HttpServerDelegate.class) {
+                if (instance == null) {
+                    mbeanServer = MBeanServerLocator.locateJBoss();
+                    instance = new HttpServerDelegate();
+                    instance.createEngine();
+                }
+            }
+        }
 		return instance;
 		
 	}
@@ -139,7 +140,7 @@
 	 * @throws Exception If there is error occured
 	 */
 	@SuppressWarnings("unchecked")
-	public void createHost(String host) throws Exception {
+	public synchronized void createHost(String host) throws Exception {
 		ObjectName hostName = new ObjectName(DOMAIN_NAME + ":host=" + host + ",type=Host");
 		ObjectName stardardEngineName = new ObjectName(DOMAIN_NAME + ":type=Engine");
 		
@@ -149,12 +150,10 @@
 			StandardHost newHost = new StandardHost();
 			newHost.setName(host);
 			mbeanServer.invoke(stardardEngineName, "addChild", new Object[] { newHost }, new String[] { Container.class .getName() });
-		    synchronized (hostReference) {
-				hostReference.put(host, 1);
-			}
+            hostReference.put(host, new ReferenceCounter());
 
 		} else {
-			updateReference(hostReference, host, 1);
+			updateReferenceCount(hostReference, host, 1);
 			
 		}
 	}
@@ -167,7 +166,7 @@
 	 * @throws Exception when error is occured
 	 */
 	@SuppressWarnings("unchecked")
-	public void createConnector(String address, String port, List<KeyValuePair> properties) throws Exception {
+	public synchronized void createConnector(String address, String port, List<KeyValuePair> properties) throws Exception {
 		ObjectName standardServiceName = new ObjectName(DOMAIN_NAME + ":type=Service");
 		Set connectors = queryObjects(DOMAIN_NAME + ":address=" +  URLEncoder.encode("/" + address).toString() +",port="
 				+ port + ",type=Connector,*");
@@ -185,14 +184,12 @@
 			
 			connector.setAttribute("address", address);
 			mbeanServer.invoke(standardServiceName, "addConnector",
-					new Object[] { connector }, new String[] { Connector.class
-							.getName() });
-		    synchronized (connectorReference) {
-				connectorReference.put(port, 1);
-			}
+					new Object[] { connector }, new String[] { Connector.class.getName() });
+            
+            connectorReference.put(port, new ReferenceCounter());
 
 		} else {			
-			updateReference(connectorReference, port, 1);
+			updateReferenceCount(connectorReference, port, 1);
 		}
 	}
 
@@ -239,8 +236,8 @@
 				new String[] {});
 
 		// Decrese the host and connector reference
-		updateReference(hostReference, host, -1);
-		updateReference(connectorReference, port, -1);
+		updateReferenceCount(hostReference, host, -1);
+		updateReferenceCount(connectorReference, port, -1);
 
 		Object obj = hostReference.get(host);
 
@@ -288,17 +285,21 @@
 	 * @param increment Update value
 	 */
 	@SuppressWarnings("unchecked")
-	public void updateReference(Map refrenceMap, String key , int increment) {
-		synchronized (refrenceMap) {
-			if (refrenceMap.get(key) != null) {
-				int count = (Integer) refrenceMap.get(key);
-				if (count == 0) {
-					return;
-				}
-				refrenceMap.put(key, count + increment);
-			}
-		}
+	public void updateReferenceCount(Map<String, ReferenceCounter> refrenceMap, String key , int increment) {
+        ReferenceCounter counter = refrenceMap.get(key);
+
+        if (counter != null) {
+            synchronized (counter) {
+                if (counter.count == 0) {
+                    return;
+                }
+                counter.count += increment;
+            }
+        }
 	}
+
+    private class ReferenceCounter {
+        private volatile int count = 1;
+    }
 }
 
-




More information about the jboss-svn-commits mailing list