diff options
Diffstat (limited to 'java/broker/src/main/java/org/apache/qpid/server/plugins/PluginManager.java')
-rw-r--r-- | java/broker/src/main/java/org/apache/qpid/server/plugins/PluginManager.java | 51 |
1 files changed, 41 insertions, 10 deletions
diff --git a/java/broker/src/main/java/org/apache/qpid/server/plugins/PluginManager.java b/java/broker/src/main/java/org/apache/qpid/server/plugins/PluginManager.java index 9191ecf6ed..dbfcefb6ab 100644 --- a/java/broker/src/main/java/org/apache/qpid/server/plugins/PluginManager.java +++ b/java/broker/src/main/java/org/apache/qpid/server/plugins/PluginManager.java @@ -30,6 +30,13 @@ import org.apache.felix.framework.cache.BundleCache; import org.apache.felix.framework.util.FelixConstants; import org.apache.felix.framework.util.StringMap; import org.apache.qpid.server.exchange.ExchangeType; +import org.apache.qpid.server.security.access.ACLPlugin; +import org.apache.qpid.server.security.access.ACLPluginFactory; +import org.apache.qpid.server.security.access.plugins.AllowAll; +import org.apache.qpid.server.security.access.plugins.DenyAll; +import org.apache.qpid.server.security.access.plugins.LegacyAccessPlugin; +import org.apache.qpid.server.security.access.plugins.SimpleXML; +import org.apache.qpid.server.security.access.plugins.network.FirewallPlugin; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleException; import org.osgi.util.tracker.ServiceTracker; @@ -46,8 +53,10 @@ public class PluginManager private Felix _felix = null; private ServiceTracker _exchangeTracker = null; + private ServiceTracker _securityTracker = null; private Activator _activator = null; private boolean _empty; + private Map<String, ACLPluginFactory> _securityPlugins; public PluginManager(String plugindir) throws Exception { @@ -115,8 +124,13 @@ public class PluginManager try { _felix.start(); + _exchangeTracker = new ServiceTracker(_activator.getContext(), ExchangeType.class.getName(), null); _exchangeTracker.open(); + + _securityTracker = new ServiceTracker(_activator.getContext(), ACLPlugin.class.getName(), null); + _exchangeTracker.open(); + } catch (BundleException e) { @@ -124,22 +138,39 @@ public class PluginManager } } - public Map<String, ExchangeType<?>> getExchanges() - { - if (_empty) - { - return null; - } - Map<String, ExchangeType<?>>exchanges = new HashMap<String, ExchangeType<?>>(); - for (Object service : _exchangeTracker.getServices()) + private <type> Map<String, type> getServices(ServiceTracker tracker) + { + Map<String, type>exchanges = new HashMap<String, type>(); + + if (tracker != null) { - if (service instanceof ExchangeType<?>) + for (Object service : tracker.getServices()) { - exchanges.put(service.getClass().getName(), (ExchangeType<?>) service); + exchanges.put(service.getClass().getName(), (type) service); } } return exchanges; } + + public Map<String, ExchangeType<?>> getExchanges() + { + return getServices(_exchangeTracker); + } + + public Map<String, ACLPluginFactory> getSecurityPlugins() + { + if (_securityPlugins == null) + { + _securityPlugins = getServices(_securityTracker); + // A little gross that we have to add them here, but not all the plugins are OSGIfied + _securityPlugins.put(SimpleXML.class.getName(), SimpleXML.FACTORY); + _securityPlugins.put(AllowAll.class.getName(), AllowAll.FACTORY); + _securityPlugins.put(DenyAll.class.getName(), DenyAll.FACTORY); + _securityPlugins.put(LegacyAccessPlugin.class.getName(), LegacyAccessPlugin.FACTORY); + _securityPlugins.put(FirewallPlugin.class.getName(), FirewallPlugin.FACTORY); + } + return _securityPlugins; + } } |