Author: ron.sigal(a)jboss.com
Date: 2010-11-13 11:24:35 -0500 (Sat, 13 Nov 2010)
New Revision: 6144
Modified:
remoting3/trunk/jboss-remoting/src/main/java/org/jboss/remoting3/Remoting.java
Log:
JBREM-1256: (1) Added getConfiguredEndpoint(OptionMap optionMap); (2) keeps a map from
OptionMap to created EndPoints.
Modified: remoting3/trunk/jboss-remoting/src/main/java/org/jboss/remoting3/Remoting.java
===================================================================
---
remoting3/trunk/jboss-remoting/src/main/java/org/jboss/remoting3/Remoting.java 2010-11-13
00:55:53 UTC (rev 6143)
+++
remoting3/trunk/jboss-remoting/src/main/java/org/jboss/remoting3/Remoting.java 2010-11-13
16:24:35 UTC (rev 6144)
@@ -30,6 +30,7 @@
import java.security.PrivilegedAction;
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Properties;
@@ -65,8 +66,8 @@
private static final Logger log = Logger.getLogger("org.jboss.remoting");
- private static Endpoint configuredEndpoint;
private static final Object lock = new Object();
+ private static final Map<OptionMap, Endpoint> configuredEndpoints = new
HashMap<OptionMap, Endpoint>();
private static final RemotingPermission CREATE_ENDPOINT_PERM = new
RemotingPermission("createEndpoint");
private static final RemotingPermission GET_CONFIGURED_ENDPOINT_PERM = new
RemotingPermission("getConfiguredEndpoint");
@@ -92,20 +93,29 @@
};
public static Endpoint getConfiguredEndpoint() throws IOException {
- final SecurityManager sm = System.getSecurityManager();
- if (sm != null) {
- sm.checkPermission(GET_CONFIGURED_ENDPOINT_PERM);
- }
- synchronized (lock) {
- final Endpoint endpoint = configuredEndpoint;
- if (endpoint != null) {
- return endpoint;
- }
- return configuredEndpoint = createConfigured();
- }
+ return getConfiguredEndpoint(OptionMap.EMPTY);
}
+
+ public static Endpoint getConfiguredEndpoint(OptionMap optionMap) throws IOException
{
+ if (optionMap == null) {
+ throw new NullPointerException("map is null");
+ }
+ final SecurityManager sm = System.getSecurityManager();
+ if (sm != null) {
+ sm.checkPermission(GET_CONFIGURED_ENDPOINT_PERM);
+ }
+ synchronized (lock) {
+ final Endpoint endpoint = configuredEndpoints.get(optionMap);
+ if (endpoint != null) {
+ return endpoint;
+ }
+ Endpoint configuredEndpoint = createConfigured(optionMap);
+ configuredEndpoints.put(optionMap, configuredEndpoint);
+ return configuredEndpoint;
+ }
+ }
- private static Endpoint createConfigured() throws IOException {
+ private static Endpoint createConfigured(final OptionMap optionMap) throws
IOException {
try {
return AccessController.doPrivileged(new PrivilegedAction<Endpoint>()
{
public Endpoint run() {
@@ -132,6 +142,10 @@
} catch (IOException e) {
throw new RuntimeException(e);
}
+ for (Iterator<Option<?>> it = optionMap.iterator();
it.hasNext();) {
+ Option<?> key = it.next();
+ props.put(key.getName(), optionMap.get(key));
+ }
final ThreadPoolExecutor executor = new ThreadPoolExecutor(
Integer.parseInt(props.getProperty("endpoint.threadpool.coresize",
"8")),
Integer.parseInt(props.getProperty("endpoint.threadpool.maxsize",
"64")),