[jboss-remoting-commits] JBoss Remoting SVN: r4020 - remoting3/trunk/standalone/src/main/java/org/jboss/cx/remoting.

jboss-remoting-commits at lists.jboss.org jboss-remoting-commits at lists.jboss.org
Fri Apr 18 19:29:39 EDT 2008


Author: david.lloyd at jboss.com
Date: 2008-04-18 19:29:39 -0400 (Fri, 18 Apr 2008)
New Revision: 4020

Modified:
   remoting3/trunk/standalone/src/main/java/org/jboss/cx/remoting/Remoting.java
Log:
Add a lifecycle lock for idiot-proofing purposes

Modified: remoting3/trunk/standalone/src/main/java/org/jboss/cx/remoting/Remoting.java
===================================================================
--- remoting3/trunk/standalone/src/main/java/org/jboss/cx/remoting/Remoting.java	2008-04-18 23:04:38 UTC (rev 4019)
+++ remoting3/trunk/standalone/src/main/java/org/jboss/cx/remoting/Remoting.java	2008-04-18 23:29:39 UTC (rev 4020)
@@ -18,77 +18,86 @@
 
     private static final String JRPP_SUPPORT_KEY = "org.jboss.cx.remoting.standalone.jrpp.support";
 
+    // lifecycle lock
+    private static final Object lifecycle = new Object();
+
     public static <I, O> Endpoint createEndpoint(String name, RequestListener<I, O> listener) throws IOException {
-        boolean ok = false;
-        final CoreEndpoint coreEndpoint = new CoreEndpoint();
-        coreEndpoint.setName(name);
-        coreEndpoint.setRootListener(listener);
-        coreEndpoint.create();
-        try {
-            coreEndpoint.start();
+        synchronized (lifecycle) {
+            boolean ok = false;
+            final CoreEndpoint coreEndpoint = new CoreEndpoint();
+            coreEndpoint.setName(name);
+            coreEndpoint.setRootListener(listener);
+            coreEndpoint.create();
             try {
-                LocalProtocolHandlerFactory.addTo(coreEndpoint);
-                final JrppProtocolSupport jrppProtocolSupport = new JrppProtocolSupport();
-                jrppProtocolSupport.setEndpoint(coreEndpoint);
-                jrppProtocolSupport.create();
+                coreEndpoint.start();
                 try {
-                    jrppProtocolSupport.start();
+                    LocalProtocolHandlerFactory.addTo(coreEndpoint);
+                    final JrppProtocolSupport jrppProtocolSupport = new JrppProtocolSupport();
+                    jrppProtocolSupport.setEndpoint(coreEndpoint);
+                    jrppProtocolSupport.create();
                     try {
-                        final ConcurrentMap<Object, Object> attributes = coreEndpoint.getAttributes();
-                        attributes.put(JRPP_SUPPORT_KEY, jrppProtocolSupport);
-                        ok = true;
-                        return coreEndpoint;
+                        jrppProtocolSupport.start();
+                        try {
+                            final ConcurrentMap<Object, Object> attributes = coreEndpoint.getAttributes();
+                            attributes.put(JRPP_SUPPORT_KEY, jrppProtocolSupport);
+                            ok = true;
+                            return coreEndpoint;
+                        } finally {
+                            if (! ok) {
+                                jrppProtocolSupport.stop();
+                            }
+                        }
                     } finally {
                         if (! ok) {
-                            jrppProtocolSupport.stop();
+                            jrppProtocolSupport.destroy();
                         }
                     }
                 } finally {
                     if (! ok) {
-                        jrppProtocolSupport.destroy();
+                        coreEndpoint.stop();
                     }
                 }
             } finally {
                 if (! ok) {
-                    coreEndpoint.stop();
+                    coreEndpoint.destroy();
                 }
             }
-        } finally {
-            if (! ok) {
-                coreEndpoint.destroy();
-            }
         }
     }
 
     public static void closeEndpoint(Endpoint endpoint) {
-        if (endpoint instanceof CoreEndpoint) {
-            final CoreEndpoint coreEndpoint = (CoreEndpoint) endpoint;
-            final ConcurrentMap<Object, Object> attributes = coreEndpoint.getAttributes();
-            final JrppProtocolSupport jrppProtocolSupport = (JrppProtocolSupport) attributes.remove(JRPP_SUPPORT_KEY);
-            coreEndpoint.stop();
-            coreEndpoint.destroy();
-            if (jrppProtocolSupport != null) {
-                jrppProtocolSupport.stop();
-                jrppProtocolSupport.destroy();
+        synchronized (lifecycle) {
+            if (endpoint instanceof CoreEndpoint) {
+                final CoreEndpoint coreEndpoint = (CoreEndpoint) endpoint;
+                final ConcurrentMap<Object, Object> attributes = coreEndpoint.getAttributes();
+                final JrppProtocolSupport jrppProtocolSupport = (JrppProtocolSupport) attributes.remove(JRPP_SUPPORT_KEY);
+                coreEndpoint.stop();
+                coreEndpoint.destroy();
+                if (jrppProtocolSupport != null) {
+                    jrppProtocolSupport.stop();
+                    jrppProtocolSupport.destroy();
+                }
             }
         }
     }
 
     public static JrppServer addJrppServer(Endpoint endpoint, SocketAddress address, AttributeMap attributeMap) throws IOException {
-        boolean ok = false;
-        final JrppServer jrppServer = new JrppServer();
-        jrppServer.setProtocolSupport((JrppProtocolSupport) endpoint.getAttributes().get(JRPP_SUPPORT_KEY));
-        jrppServer.setSocketAddress(address);
-        jrppServer.setAttributeMap(attributeMap);
-        jrppServer.setEndpoint(endpoint);
-        jrppServer.create();
-        try {
-            jrppServer.start();
-            ok = true;
-            return jrppServer;
-        } finally {
-            if (! ok) {
-                jrppServer.destroy();
+        synchronized (lifecycle) {
+            boolean ok = false;
+            final JrppServer jrppServer = new JrppServer();
+            jrppServer.setProtocolSupport((JrppProtocolSupport) endpoint.getAttributes().get(JRPP_SUPPORT_KEY));
+            jrppServer.setSocketAddress(address);
+            jrppServer.setAttributeMap(attributeMap);
+            jrppServer.setEndpoint(endpoint);
+            jrppServer.create();
+            try {
+                jrppServer.start();
+                ok = true;
+                return jrppServer;
+            } finally {
+                if (! ok) {
+                    jrppServer.destroy();
+                }
             }
         }
     }




More information about the jboss-remoting-commits mailing list