[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