You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by cl...@apache.org on 2015/06/17 20:00:13 UTC

[2/2] activemq-artemis git commit: ARTEMIS-90 add acceptor factory to service registry

ARTEMIS-90 add acceptor factory to service registry


Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/f60950cd
Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/f60950cd
Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/f60950cd

Branch: refs/heads/master
Commit: f60950cd3db9ada2199846f6128f844da678e5b8
Parents: 61bd181
Author: jbertram <jb...@apache.org>
Authored: Wed Jun 17 10:37:07 2015 -0500
Committer: Clebert Suconic <cl...@apache.org>
Committed: Wed Jun 17 13:59:51 2015 -0400

----------------------------------------------------------------------
 .../server/impl/RemotingServiceImpl.java        |  6 +---
 .../artemis/core/server/ServiceRegistry.java    |  5 +++
 .../core/server/impl/ServiceRegistryImpl.java   | 34 ++++++++++++++++++++
 3 files changed, 40 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/f60950cd/artemis-server/src/main/java/org/apache/activemq/artemis/core/remoting/server/impl/RemotingServiceImpl.java
----------------------------------------------------------------------
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/remoting/server/impl/RemotingServiceImpl.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/remoting/server/impl/RemotingServiceImpl.java
index c5680ee..b7fca3f 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/remoting/server/impl/RemotingServiceImpl.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/remoting/server/impl/RemotingServiceImpl.java
@@ -229,15 +229,11 @@ public class RemotingServiceImpl implements RemotingService, ConnectionLifeCycle
 
       threadPool = Executors.newCachedThreadPool(tFactory);
 
-      ClassLoader loader = Thread.currentThread().getContextClassLoader();
-
       for (TransportConfiguration info : acceptorsConfig)
       {
          try
          {
-            Class<?> clazz = loader.loadClass(info.getFactoryClassName());
-
-            AcceptorFactory factory = (AcceptorFactory) clazz.newInstance();
+            AcceptorFactory factory = server.getServiceRegistry().getAcceptorFactory(info.getName(), info.getFactoryClassName());
 
             Map<String, ProtocolManager> supportedProtocols = new ConcurrentHashMap();
 

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/f60950cd/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ServiceRegistry.java
----------------------------------------------------------------------
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ServiceRegistry.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ServiceRegistry.java
index 41dd06d..f6a4cfa 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ServiceRegistry.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ServiceRegistry.java
@@ -20,6 +20,7 @@ import org.apache.activemq.artemis.api.core.Interceptor;
 import org.apache.activemq.artemis.api.core.Pair;
 import org.apache.activemq.artemis.core.config.ConnectorServiceConfiguration;
 import org.apache.activemq.artemis.core.server.cluster.Transformer;
+import org.apache.activemq.artemis.spi.core.remoting.AcceptorFactory;
 
 import java.util.Collection;
 import java.util.concurrent.ExecutorService;
@@ -63,4 +64,8 @@ public interface ServiceRegistry
    Transformer getDivertTransformer(String name);
 
    Transformer getBridgeTransformer(String name);
+
+   AcceptorFactory getAcceptorFactory(String name, String className);
+
+   void addAcceptorFactory(String name, AcceptorFactory acceptorFactory);
 }

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/f60950cd/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ServiceRegistryImpl.java
----------------------------------------------------------------------
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ServiceRegistryImpl.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ServiceRegistryImpl.java
index f0825dc..26ee8d9 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ServiceRegistryImpl.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ServiceRegistryImpl.java
@@ -16,6 +16,8 @@
  */
 package org.apache.activemq.artemis.core.server.impl;
 
+import java.security.AccessController;
+import java.security.PrivilegedAction;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Map;
@@ -29,6 +31,8 @@ import org.apache.activemq.artemis.core.config.ConnectorServiceConfiguration;
 import org.apache.activemq.artemis.core.server.ConnectorServiceFactory;
 import org.apache.activemq.artemis.core.server.ServiceRegistry;
 import org.apache.activemq.artemis.core.server.cluster.Transformer;
+import org.apache.activemq.artemis.spi.core.remoting.AcceptorFactory;
+import org.apache.activemq.artemis.utils.ClassloadingUtil;
 
 public class ServiceRegistryImpl implements ServiceRegistry
 {
@@ -47,6 +51,8 @@ public class ServiceRegistryImpl implements ServiceRegistry
 
    private Map<String, Transformer> bridgeTransformers;
 
+   private Map<String, AcceptorFactory> acceptorFactories;
+
    private Map<String, Pair<ConnectorServiceFactory, ConnectorServiceConfiguration>> connectorServices;
 
    public ServiceRegistryImpl()
@@ -56,6 +62,7 @@ public class ServiceRegistryImpl implements ServiceRegistry
       this.connectorServices = new ConcurrentHashMap<>();
       this.divertTransformers = new ConcurrentHashMap<>();
       this.bridgeTransformers = new ConcurrentHashMap<>();
+      this.acceptorFactories = new ConcurrentHashMap<>();
    }
 
    public ExecutorService getExecutorService()
@@ -153,4 +160,31 @@ public class ServiceRegistryImpl implements ServiceRegistry
    {
       return bridgeTransformers.get(name);
    }
+
+   @Override
+   public AcceptorFactory getAcceptorFactory(String name, final String className)
+   {
+      AcceptorFactory factory = acceptorFactories.get(name);
+
+      if (factory == null)
+      {
+         factory = AccessController.doPrivileged(new PrivilegedAction<AcceptorFactory>()
+         {
+            public AcceptorFactory run()
+            {
+               return (AcceptorFactory) ClassloadingUtil.newInstanceFromClassLoader(className);
+            }
+         });
+
+         addAcceptorFactory(name, factory);
+      }
+
+      return factory;
+   }
+
+   @Override
+   public void addAcceptorFactory(String name, AcceptorFactory acceptorFactory)
+   {
+      acceptorFactories.put(name, acceptorFactory);
+   }
 }