You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@qpid.apache.org by Marnie McCormack <ma...@googlemail.com> on 2010/05/09 21:44:40 UTC

Re: svn commit: r942114 - in /qpid/trunk/qpid/java: broker/etc/config.xml broker/src/main/java/org/apache/qpid/server/plugins/PluginManager.java build.deps lib/org.apache.felix.framework-1.0.0.jar lib/org.apache.felix.framework-2.0.5.jar

Hi,

Just wanted to query the hardcoded ? version adding in the ConfigMap - am I
missing some generation for those strings or can it otherwise be coded to
pick up the current Qpid version from the build system ?

Marnie

On Fri, May 7, 2010 at 4:13 PM, <ri...@apache.org> wrote:

> Author: ritchiem
> Date: Fri May  7 15:13:44 2010
> New Revision: 942114
>
> URL: http://svn.apache.org/viewvc?rev=942114&view=rev
> Log:
> QPID-2585 : Upgrade to Felix 2.0.5
>
> Added:
>    qpid/trunk/qpid/java/lib/org.apache.felix.framework-2.0.5.jar
> Removed:
>    qpid/trunk/qpid/java/lib/org.apache.felix.framework-1.0.0.jar
> Modified:
>    qpid/trunk/qpid/java/broker/etc/config.xml
>
>  qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/plugins/PluginManager.java
>    qpid/trunk/qpid/java/build.deps
>
> Modified: qpid/trunk/qpid/java/broker/etc/config.xml
> URL:
> http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/etc/config.xml?rev=942114&r1=942113&r2=942114&view=diff
>
> ==============================================================================
> --- qpid/trunk/qpid/java/broker/etc/config.xml (original)
> +++ qpid/trunk/qpid/java/broker/etc/config.xml Fri May  7 15:13:44 2010
> @@ -23,6 +23,8 @@
>     <prefix>${QPID_HOME}</prefix>
>     <work>${QPID_WORK}</work>
>     <conf>${prefix}/etc</conf>
> +
> +    <plugin-directory>${QPID_HOME}/lib/plugins</plugin-directory>
>
>     <connector>
>         <!-- To enable SSL edit the keystorePath and keystorePassword
>
> Modified:
> qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/plugins/PluginManager.java
> URL:
> http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/plugins/PluginManager.java?rev=942114&r1=942113&r2=942114&view=diff
>
> ==============================================================================
> ---
> qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/plugins/PluginManager.java
> (original)
> +++
> qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/plugins/PluginManager.java
> Fri May  7 15:13:44 2010
> @@ -19,16 +19,12 @@
>
>  package org.apache.qpid.server.plugins;
>
> -import java.io.File;
> -import java.util.ArrayList;
> -import java.util.HashMap;
> -import java.util.List;
> -import java.util.Map;
> -
> +import org.apache.commons.configuration.ConfigurationException;
>  import org.apache.felix.framework.Felix;
>  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.configuration.plugin.ConfigurationPluginFactory;
>  import org.apache.qpid.server.exchange.ExchangeType;
>  import org.apache.qpid.server.security.access.ACLPlugin;
>  import org.apache.qpid.server.security.access.ACLPluginFactory;
> @@ -37,155 +33,266 @@ import org.apache.qpid.server.security.a
>  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.apache.qpid.server.virtualhost.plugin.VirtualHostPluginFactory;
>  import org.osgi.framework.BundleActivator;
>  import org.osgi.framework.BundleException;
>  import org.osgi.util.tracker.ServiceTracker;
>
> +import java.io.File;
> +import java.util.ArrayList;
> +import java.util.HashMap;
> +import java.util.List;
> +import java.util.Map;
> +
>  /**
> - *
>  * @author aidan
> - *
> - * Provides access to pluggable elements, such as exchanges
> + *
> + *         Provides access to pluggable elements, such as exchanges
>  */
>
>  public class PluginManager
>  {
> -    private Felix _felix = null;
>     private ServiceTracker _exchangeTracker = null;
>     private ServiceTracker _securityTracker = null;
> -    private Activator _activator = null;
> -    private boolean _empty;
> +    private ServiceTracker _configTracker = null;
> +    private ServiceTracker _virtualHostTracker = null;
> +
> +    private Felix _felix;
> +
> +    Activator _activator;
> +
>     private Map<String, ACLPluginFactory> _securityPlugins;
> +    private static final int FELIX_STOP_TIMEOUT = 30000;
>
>     public PluginManager(String plugindir) throws Exception
>     {
>         StringMap configMap = new StringMap(false);
>
> -        // Tell felix it's being embedded
> -        configMap.put(FelixConstants.EMBEDDED_EXECUTION_PROP, "true");
>         // Add the bundle provided service interface package and the core
> OSGi
>         // packages to be exported from the class path via the system
> bundle.
> -        configMap.put(FelixConstants.FRAMEWORK_SYSTEMPACKAGES,
> "org.osgi.framework; version=1.3.0,"
> -                + "org.osgi.service.packageadmin; version=1.2.0," +
> -                "org.osgi.service.startlevel; version=1.0.0," +
> -                "org.osgi.service.url; version=1.0.0," +
> -                "org.osgi.util.tracker; version=1.0.0,"+
> -                "org.apache.qpid.junit.extensions.util; version=0.7," +
> -                "org.apache.qpid; version=0.7," +
> -                "org.apache.qpid.framing; version=0.7," +
> -                "org.apache.qpid.protocol; version=0.7," +
> -                "org.apache.qpid.server.exchange; version=0.7," +
> -                "org.apache.qpid.server.management; version=0.7,"+
> -                "org.apache.qpid.server.protocol; version=0.7,"+
> -                "org.apache.qpid.server.virtualhost; version=0.7," +
> -                "org.apache.qpid.server.registry; version=0.7," +
> -                "org.apache.qpid.server.queue; version=0.7," +
> -                "org.apache.qpid.server.binding; version=0.7," +
> -                "org.apache.qpid.server.configuration; version=0.7," +
> -                "org.apache.qpid.server.configuration.management;
> version=0.7," +
> -                "org.apache.qpid.server.persistent; version=0.7," +
> -                "org.apache.qpid.server.plugins; version=0.7," +
> -                "org.apache.qpid.server.queue; version=0.7," +
> -                "org.apache.qpid.server.security; version=0.7," +
> -                "org.apache.qpid.framing.AMQShortString; version=0.7," +
> -                "org.apache.qpid.server.queue.AMQQueue; version=0.7," +
> -                "org.apache.qpid.server.security.access; version=0.7,"+
> -                "org.apache.commons.configuration; version=0.7," +
> -                "javax.management.openmbean; version=1.0.0,"+
> -                "javax.management; version=1.0.0,"
> -                );
> -
> +        configMap.put(FelixConstants.FRAMEWORK_SYSTEMPACKAGES,
> +                      "org.osgi.framework; version=1.3.0," +
> +                      "org.osgi.service.packageadmin; version=1.2.0," +
> +                      "org.osgi.service.startlevel; version=1.0.0," +
> +                      "org.osgi.service.url; version=1.0.0," +
> +                      "org.osgi.util.tracker; version=1.0.0," +
> +                      "org.apache.qpid.junit.extensions.util;
> version=0.7," +
> +                      "org.apache.qpid; version=0.7," +
> +                      "org.apache.qpid.framing; version=0.7," +
> +                      "org.apache.qpid.protocol; version=0.7," +
> +                      "org.apache.qpid.server.exchange; version=0.7," +
> +                      "org.apache.qpid.server.management; version=0.7," +
> +                      "org.apache.qpid.server.protocol; version=0.7," +
> +                      "org.apache.qpid.server.virtualhost; version=0.7," +
> +                      "org.apache.qpid.server.virtualhost.plugin;
> version=0.7," +
> +                      "org.apache.qpid.server.registry; version=0.7," +
> +                      "org.apache.qpid.server.queue; version=0.7," +
> +                      "org.apache.qpid.server.binding; version=0.7," +
> +                      "org.apache.qpid.server.configuration; version=0.7,"
> +
> +                      "org.apache.qpid.server.configuration.plugin;
> version=0.7," +
> +                      "org.apache.qpid.server.configuration.management;
> version=0.7," +
> +                      "org.apache.qpid.server.persistent; version=0.7," +
> +                      "org.apache.qpid.server.plugins; version=0.7," +
> +                      "org.apache.qpid.server.queue; version=0.7," +
> +                      "org.apache.qpid.server.security; version=0.7," +
> +                      "org.apache.qpid.framing.AMQShortString;
> version=0.7," +
> +                      "org.apache.qpid.server.queue.AMQQueue;
> version=0.7," +
> +                      "org.apache.qpid.server.security.access;
> version=0.7," +
> +                      "org.apache.commons.configuration; version=0.7," +
> +                      "org.apache.log4j; version=1.2.12," +
> +                      "javax.management.openmbean; version=1.0.0," +
> +                      "javax.management; version=1.0.0,"
> +        );
> +
>         if (plugindir == null)
>         {
> -               _empty = true;
>             return;
>         }
> -
> +
>         // Set the list of bundles to load
>         File dir = new File(plugindir);
>         if (!dir.exists())
> -        {
> -               _empty = true;
> +        {
>             return;
> -        }
> -
> +        }
> +
>         StringBuffer pluginJars = new StringBuffer();
> -
> +
>         if (dir.isDirectory())
>         {
>             for (String child : dir.list())
>             {
>                 if (child.endsWith("jar"))
>                 {
> -                    pluginJars.append(String.format(" file:%s%s%s",
> plugindir,File.separator,child));
> +                    pluginJars.append(String.format(" file:%s%s%s",
> plugindir, File.separator, child));
>                 }
>             }
>         }
> -
> +
>         if (pluginJars.length() == 0)
>         {
> -            _empty = true;
>             return;
>         }
> -
> -        configMap.put(FelixConstants.AUTO_START_PROP + ".1",
> pluginJars.toString());
> -        configMap.put(BundleCache.CACHE_PROFILE_DIR_PROP, plugindir);
> -
> +
> +//        configMap.put(FelixConstants.AUTO_START_PROP + ".1",
> pluginJars.toString());
> +//        configMap.put(BundleCache.CACHE_PROFILE_DIR_PROP, plugindir);
> +
> +        configMap.put("felix.auto.start.1", pluginJars.toString());
> +        configMap.put("felix.shutdown.hook","false");
> +        configMap.put(FelixConstants.FRAMEWORK_STORAGE, plugindir);
> +
> +
>         List<BundleActivator> activators = new
> ArrayList<BundleActivator>();
>         _activator = new Activator();
>         activators.add(_activator);
> +        configMap.put(FelixConstants.SYSTEMBUNDLE_ACTIVATORS_PROP,
> activators);
>
> -        _felix = new Felix(configMap, activators);
> +        _felix = new Felix(configMap);
>         try
>         {
> +            System.out.println("Starting Plugin manager");
> +
>             _felix.start();
> -
> +
> +            System.out.println("Started Plugin manager");
> +
>             _exchangeTracker = new ServiceTracker(_activator.getContext(),
> ExchangeType.class.getName(), null);
>             _exchangeTracker.open();
> -
> +
>             _securityTracker = new ServiceTracker(_activator.getContext(),
> ACLPlugin.class.getName(), null);
>             _securityTracker.open();
> -
> +
> +            _configTracker = new ServiceTracker(_activator.getContext(),
> ConfigurationPluginFactory.class.getName(), null);
> +            _configTracker.open();
> +
> +            _virtualHostTracker = new
> ServiceTracker(_activator.getContext(),
> VirtualHostPluginFactory.class.getName(), null);
> +            _virtualHostTracker.open();
> +
>         }
>         catch (BundleException e)
>         {
> -            throw new Exception("Could not create bundle");
> +            throw new ConfigurationException("Could not start
> PluginManager:" + e.getMessage(), e);
>         }
>     }
>
>     private <T> Map<String, T> getServices(ServiceTracker tracker)
> -    {
> -        Map<String, T>services = new HashMap<String, T>();
> -
> +    {
> +        Map<String, T> services = new HashMap<String, T>();
> +
>         if ((tracker != null) && (tracker.getServices() != null))
>         {
>             for (Object service : tracker.getServices())
>             {
> -                services.put(service.getClass().getName(), (T) service);
> +                if (service instanceof PluginFactory)
> +                {
> +                    services.put(((PluginFactory)
> service).getPluginName(), (T) service);
> +                }
> +                else
> +                {
> +                    services.put(service.getClass().getName(), (T)
> service);
> +                }
>             }
> -        }
> -
> +        }
> +
>         return services;
>     }
> -
> +
>     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;
> +    }
> +
> +    public Map<String, ConfigurationPluginFactory>
> getConfigurationPlugins()
> +    {
> +        Map<String, ConfigurationPluginFactory> services = new
> HashMap<String, ConfigurationPluginFactory>();
> +
> +        if ((_configTracker != null) && (_configTracker.getServices() !=
> 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);
> +            for (Object service : _configTracker.getServices())
> +            {
> +                for (String parent : ((ConfigurationPluginFactory)
> service).getParentPaths())
> +                {
> +                    services.put(parent, ((ConfigurationPluginFactory)
> service));
> +                }
> +            }
> +        }
> +
> +        return services;
> +
> +    }
> +
> +    public Map<String, VirtualHostPluginFactory> getVirtualHostPlugins()
> +    {
> +        return getServices(_virtualHostTracker);
> +    }
> +
> +    public <P extends PluginFactory> Map<String, P> getPlugins(Class<P>
> plugin)
> +    {
> +        ServiceTracker tracker = new
> ServiceTracker(_activator.getContext(), plugin.getName(), null);
> +        tracker.open();
> +
> +        try
> +        {
> +            return getServices(tracker);
> +        }
> +        finally
> +        {
> +            tracker.close();
> +        }
> +    }
> +
> +    public void close()
> +    {
> +        if (_felix != null)
> +        {
> +            try
> +            {
> +                _exchangeTracker.close();
> +
> +                _securityTracker.close();
> +
> +                _configTracker.close();
> +
> +                _virtualHostTracker.close();
> +            }
> +            finally
> +            {
> +                System.out.println("Stopping Plugin manager");
> +                //fixme should be stopAndWait() but hangs VM, need upgrade
> in felix
> +                try
> +                {
> +                    _felix.stop();
> +                }
> +                catch (BundleException e)
> +                {
> +                    //ignore
> +                }
> +
> +                try
> +                {
> +                    _felix.waitForStop(FELIX_STOP_TIMEOUT);
> +                }
> +                catch (InterruptedException e)
> +                {
> +                    //ignore
> +                }
> +
> +                System.out.println("Stopped Plugin manager");
> +            }
>         }
> -        return _securityPlugins;
>     }
>
>  }
>
> Modified: qpid/trunk/qpid/java/build.deps
> URL:
> http://svn.apache.org/viewvc/qpid/trunk/qpid/java/build.deps?rev=942114&r1=942113&r2=942114&view=diff
>
> ==============================================================================
> --- qpid/trunk/qpid/java/build.deps (original)
> +++ qpid/trunk/qpid/java/build.deps Fri May  7 15:13:44 2010
> @@ -68,7 +68,7 @@ ${muse-wsx-api} ${muse-wsx-impl} ${wsdl4
>  jsp.libs = ${jsp-api} ${jsp-impl} ${core-lib}
>
>  osgi-core=lib/org.osgi.core-1.0.0.jar
> -felix-framework=lib/org.apache.felix.framework-1.0.0.jar
> +felix-framework=lib/org.apache.felix.framework-2.0.5.jar
>
>  geronimo-servlet=lib/geronimo-servlet_2.5_spec-1.2.jar
>  felix.libs=${osgi-core} ${felix-framework}
>
> Added: qpid/trunk/qpid/java/lib/org.apache.felix.framework-2.0.5.jar
> URL:
> http://svn.apache.org/viewvc/qpid/trunk/qpid/java/lib/org.apache.felix.framework-2.0.5.jar?rev=942114&view=auto
>
> ==============================================================================
> Files qpid/trunk/qpid/java/lib/org.apache.felix.framework-2.0.5.jar (added)
> and qpid/trunk/qpid/java/lib/org.apache.felix.framework-2.0.5.jar Fri May  7
> 15:13:44 2010 differ
>
>
>
> ---------------------------------------------------------------------
> Apache Qpid - AMQP Messaging Implementation
> Project:      http://qpid.apache.org
> Use/Interact: mailto:commits-subscribe@qpid.apache.org
>
>

Re: svn commit: r942114 - in /qpid/trunk/qpid/java: broker/etc/config.xml broker/src/main/java/org/apache/qpid/server/plugins/PluginManager.java build.deps lib/org.apache.felix.framework-1.0.0.jar lib/org.apache.felix.framework-2.0.5.jar

Posted by Martin Ritchie <ri...@apache.org>.
On 9 May 2010 20:44, Marnie McCormack <ma...@googlemail.com> wrote:
> Hi,
>
> Just wanted to query the hardcoded ? version adding in the ConfigMap - am I
> missing some generation for those strings or can it otherwise be coded to
> pick up the current Qpid version from the build system ?
>
> Marnie

Ideally the map will be removed from the code base so changes don't
require a recompile. I simply did the smallest change to upgrade the
Felix library. The Felix upgrade (QPID-2585) is still a work in
progress.

Whilst I've upgraded the library the plugin loading doesn't appear to
work quite the same way as 1.0 so will require a little more
finessing. As there are other changes going on in this area I wanted
to commit early.

Martin

>
> On Fri, May 7, 2010 at 4:13 PM, <ri...@apache.org> wrote:
>
>> Author: ritchiem
>> Date: Fri May  7 15:13:44 2010
>> New Revision: 942114
>>
>> URL: http://svn.apache.org/viewvc?rev=942114&view=rev
>> Log:
>> QPID-2585 : Upgrade to Felix 2.0.5
>>
>> Added:
>>    qpid/trunk/qpid/java/lib/org.apache.felix.framework-2.0.5.jar
>> Removed:
>>    qpid/trunk/qpid/java/lib/org.apache.felix.framework-1.0.0.jar
>> Modified:
>>    qpid/trunk/qpid/java/broker/etc/config.xml
>>
>>  qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/plugins/PluginManager.java
>>    qpid/trunk/qpid/java/build.deps
>>
>> Modified: qpid/trunk/qpid/java/broker/etc/config.xml
>> URL:
>> http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/etc/config.xml?rev=942114&r1=942113&r2=942114&view=diff
>>
>> ==============================================================================
>> --- qpid/trunk/qpid/java/broker/etc/config.xml (original)
>> +++ qpid/trunk/qpid/java/broker/etc/config.xml Fri May  7 15:13:44 2010
>> @@ -23,6 +23,8 @@
>>     <prefix>${QPID_HOME}</prefix>
>>     <work>${QPID_WORK}</work>
>>     <conf>${prefix}/etc</conf>
>> +
>> +    <plugin-directory>${QPID_HOME}/lib/plugins</plugin-directory>
>>
>>     <connector>
>>         <!-- To enable SSL edit the keystorePath and keystorePassword
>>
>> Modified:
>> qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/plugins/PluginManager.java
>> URL:
>> http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/plugins/PluginManager.java?rev=942114&r1=942113&r2=942114&view=diff
>>
>> ==============================================================================
>> ---
>> qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/plugins/PluginManager.java
>> (original)
>> +++
>> qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/plugins/PluginManager.java
>> Fri May  7 15:13:44 2010
>> @@ -19,16 +19,12 @@
>>
>>  package org.apache.qpid.server.plugins;
>>
>> -import java.io.File;
>> -import java.util.ArrayList;
>> -import java.util.HashMap;
>> -import java.util.List;
>> -import java.util.Map;
>> -
>> +import org.apache.commons.configuration.ConfigurationException;
>>  import org.apache.felix.framework.Felix;
>>  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.configuration.plugin.ConfigurationPluginFactory;
>>  import org.apache.qpid.server.exchange.ExchangeType;
>>  import org.apache.qpid.server.security.access.ACLPlugin;
>>  import org.apache.qpid.server.security.access.ACLPluginFactory;
>> @@ -37,155 +33,266 @@ import org.apache.qpid.server.security.a
>>  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.apache.qpid.server.virtualhost.plugin.VirtualHostPluginFactory;
>>  import org.osgi.framework.BundleActivator;
>>  import org.osgi.framework.BundleException;
>>  import org.osgi.util.tracker.ServiceTracker;
>>
>> +import java.io.File;
>> +import java.util.ArrayList;
>> +import java.util.HashMap;
>> +import java.util.List;
>> +import java.util.Map;
>> +
>>  /**
>> - *
>>  * @author aidan
>> - *
>> - * Provides access to pluggable elements, such as exchanges
>> + *
>> + *         Provides access to pluggable elements, such as exchanges
>>  */
>>
>>  public class PluginManager
>>  {
>> -    private Felix _felix = null;
>>     private ServiceTracker _exchangeTracker = null;
>>     private ServiceTracker _securityTracker = null;
>> -    private Activator _activator = null;
>> -    private boolean _empty;
>> +    private ServiceTracker _configTracker = null;
>> +    private ServiceTracker _virtualHostTracker = null;
>> +
>> +    private Felix _felix;
>> +
>> +    Activator _activator;
>> +
>>     private Map<String, ACLPluginFactory> _securityPlugins;
>> +    private static final int FELIX_STOP_TIMEOUT = 30000;
>>
>>     public PluginManager(String plugindir) throws Exception
>>     {
>>         StringMap configMap = new StringMap(false);
>>
>> -        // Tell felix it's being embedded
>> -        configMap.put(FelixConstants.EMBEDDED_EXECUTION_PROP, "true");
>>         // Add the bundle provided service interface package and the core
>> OSGi
>>         // packages to be exported from the class path via the system
>> bundle.
>> -        configMap.put(FelixConstants.FRAMEWORK_SYSTEMPACKAGES,
>> "org.osgi.framework; version=1.3.0,"
>> -                + "org.osgi.service.packageadmin; version=1.2.0," +
>> -                "org.osgi.service.startlevel; version=1.0.0," +
>> -                "org.osgi.service.url; version=1.0.0," +
>> -                "org.osgi.util.tracker; version=1.0.0,"+
>> -                "org.apache.qpid.junit.extensions.util; version=0.7," +
>> -                "org.apache.qpid; version=0.7," +
>> -                "org.apache.qpid.framing; version=0.7," +
>> -                "org.apache.qpid.protocol; version=0.7," +
>> -                "org.apache.qpid.server.exchange; version=0.7," +
>> -                "org.apache.qpid.server.management; version=0.7,"+
>> -                "org.apache.qpid.server.protocol; version=0.7,"+
>> -                "org.apache.qpid.server.virtualhost; version=0.7," +
>> -                "org.apache.qpid.server.registry; version=0.7," +
>> -                "org.apache.qpid.server.queue; version=0.7," +
>> -                "org.apache.qpid.server.binding; version=0.7," +
>> -                "org.apache.qpid.server.configuration; version=0.7," +
>> -                "org.apache.qpid.server.configuration.management;
>> version=0.7," +
>> -                "org.apache.qpid.server.persistent; version=0.7," +
>> -                "org.apache.qpid.server.plugins; version=0.7," +
>> -                "org.apache.qpid.server.queue; version=0.7," +
>> -                "org.apache.qpid.server.security; version=0.7," +
>> -                "org.apache.qpid.framing.AMQShortString; version=0.7," +
>> -                "org.apache.qpid.server.queue.AMQQueue; version=0.7," +
>> -                "org.apache.qpid.server.security.access; version=0.7,"+
>> -                "org.apache.commons.configuration; version=0.7," +
>> -                "javax.management.openmbean; version=1.0.0,"+
>> -                "javax.management; version=1.0.0,"
>> -                );
>> -
>> +        configMap.put(FelixConstants.FRAMEWORK_SYSTEMPACKAGES,
>> +                      "org.osgi.framework; version=1.3.0," +
>> +                      "org.osgi.service.packageadmin; version=1.2.0," +
>> +                      "org.osgi.service.startlevel; version=1.0.0," +
>> +                      "org.osgi.service.url; version=1.0.0," +
>> +                      "org.osgi.util.tracker; version=1.0.0," +
>> +                      "org.apache.qpid.junit.extensions.util;
>> version=0.7," +
>> +                      "org.apache.qpid; version=0.7," +
>> +                      "org.apache.qpid.framing; version=0.7," +
>> +                      "org.apache.qpid.protocol; version=0.7," +
>> +                      "org.apache.qpid.server.exchange; version=0.7," +
>> +                      "org.apache.qpid.server.management; version=0.7," +
>> +                      "org.apache.qpid.server.protocol; version=0.7," +
>> +                      "org.apache.qpid.server.virtualhost; version=0.7," +
>> +                      "org.apache.qpid.server.virtualhost.plugin;
>> version=0.7," +
>> +                      "org.apache.qpid.server.registry; version=0.7," +
>> +                      "org.apache.qpid.server.queue; version=0.7," +
>> +                      "org.apache.qpid.server.binding; version=0.7," +
>> +                      "org.apache.qpid.server.configuration; version=0.7,"
>> +
>> +                      "org.apache.qpid.server.configuration.plugin;
>> version=0.7," +
>> +                      "org.apache.qpid.server.configuration.management;
>> version=0.7," +
>> +                      "org.apache.qpid.server.persistent; version=0.7," +
>> +                      "org.apache.qpid.server.plugins; version=0.7," +
>> +                      "org.apache.qpid.server.queue; version=0.7," +
>> +                      "org.apache.qpid.server.security; version=0.7," +
>> +                      "org.apache.qpid.framing.AMQShortString;
>> version=0.7," +
>> +                      "org.apache.qpid.server.queue.AMQQueue;
>> version=0.7," +
>> +                      "org.apache.qpid.server.security.access;
>> version=0.7," +
>> +                      "org.apache.commons.configuration; version=0.7," +
>> +                      "org.apache.log4j; version=1.2.12," +
>> +                      "javax.management.openmbean; version=1.0.0," +
>> +                      "javax.management; version=1.0.0,"
>> +        );
>> +
>>         if (plugindir == null)
>>         {
>> -               _empty = true;
>>             return;
>>         }
>> -
>> +
>>         // Set the list of bundles to load
>>         File dir = new File(plugindir);
>>         if (!dir.exists())
>> -        {
>> -               _empty = true;
>> +        {
>>             return;
>> -        }
>> -
>> +        }
>> +
>>         StringBuffer pluginJars = new StringBuffer();
>> -
>> +
>>         if (dir.isDirectory())
>>         {
>>             for (String child : dir.list())
>>             {
>>                 if (child.endsWith("jar"))
>>                 {
>> -                    pluginJars.append(String.format(" file:%s%s%s",
>> plugindir,File.separator,child));
>> +                    pluginJars.append(String.format(" file:%s%s%s",
>> plugindir, File.separator, child));
>>                 }
>>             }
>>         }
>> -
>> +
>>         if (pluginJars.length() == 0)
>>         {
>> -            _empty = true;
>>             return;
>>         }
>> -
>> -        configMap.put(FelixConstants.AUTO_START_PROP + ".1",
>> pluginJars.toString());
>> -        configMap.put(BundleCache.CACHE_PROFILE_DIR_PROP, plugindir);
>> -
>> +
>> +//        configMap.put(FelixConstants.AUTO_START_PROP + ".1",
>> pluginJars.toString());
>> +//        configMap.put(BundleCache.CACHE_PROFILE_DIR_PROP, plugindir);
>> +
>> +        configMap.put("felix.auto.start.1", pluginJars.toString());
>> +        configMap.put("felix.shutdown.hook","false");
>> +        configMap.put(FelixConstants.FRAMEWORK_STORAGE, plugindir);
>> +
>> +
>>         List<BundleActivator> activators = new
>> ArrayList<BundleActivator>();
>>         _activator = new Activator();
>>         activators.add(_activator);
>> +        configMap.put(FelixConstants.SYSTEMBUNDLE_ACTIVATORS_PROP,
>> activators);
>>
>> -        _felix = new Felix(configMap, activators);
>> +        _felix = new Felix(configMap);
>>         try
>>         {
>> +            System.out.println("Starting Plugin manager");
>> +
>>             _felix.start();
>> -
>> +
>> +            System.out.println("Started Plugin manager");
>> +
>>             _exchangeTracker = new ServiceTracker(_activator.getContext(),
>> ExchangeType.class.getName(), null);
>>             _exchangeTracker.open();
>> -
>> +
>>             _securityTracker = new ServiceTracker(_activator.getContext(),
>> ACLPlugin.class.getName(), null);
>>             _securityTracker.open();
>> -
>> +
>> +            _configTracker = new ServiceTracker(_activator.getContext(),
>> ConfigurationPluginFactory.class.getName(), null);
>> +            _configTracker.open();
>> +
>> +            _virtualHostTracker = new
>> ServiceTracker(_activator.getContext(),
>> VirtualHostPluginFactory.class.getName(), null);
>> +            _virtualHostTracker.open();
>> +
>>         }
>>         catch (BundleException e)
>>         {
>> -            throw new Exception("Could not create bundle");
>> +            throw new ConfigurationException("Could not start
>> PluginManager:" + e.getMessage(), e);
>>         }
>>     }
>>
>>     private <T> Map<String, T> getServices(ServiceTracker tracker)
>> -    {
>> -        Map<String, T>services = new HashMap<String, T>();
>> -
>> +    {
>> +        Map<String, T> services = new HashMap<String, T>();
>> +
>>         if ((tracker != null) && (tracker.getServices() != null))
>>         {
>>             for (Object service : tracker.getServices())
>>             {
>> -                services.put(service.getClass().getName(), (T) service);
>> +                if (service instanceof PluginFactory)
>> +                {
>> +                    services.put(((PluginFactory)
>> service).getPluginName(), (T) service);
>> +                }
>> +                else
>> +                {
>> +                    services.put(service.getClass().getName(), (T)
>> service);
>> +                }
>>             }
>> -        }
>> -
>> +        }
>> +
>>         return services;
>>     }
>> -
>> +
>>     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;
>> +    }
>> +
>> +    public Map<String, ConfigurationPluginFactory>
>> getConfigurationPlugins()
>> +    {
>> +        Map<String, ConfigurationPluginFactory> services = new
>> HashMap<String, ConfigurationPluginFactory>();
>> +
>> +        if ((_configTracker != null) && (_configTracker.getServices() !=
>> 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);
>> +            for (Object service : _configTracker.getServices())
>> +            {
>> +                for (String parent : ((ConfigurationPluginFactory)
>> service).getParentPaths())
>> +                {
>> +                    services.put(parent, ((ConfigurationPluginFactory)
>> service));
>> +                }
>> +            }
>> +        }
>> +
>> +        return services;
>> +
>> +    }
>> +
>> +    public Map<String, VirtualHostPluginFactory> getVirtualHostPlugins()
>> +    {
>> +        return getServices(_virtualHostTracker);
>> +    }
>> +
>> +    public <P extends PluginFactory> Map<String, P> getPlugins(Class<P>
>> plugin)
>> +    {
>> +        ServiceTracker tracker = new
>> ServiceTracker(_activator.getContext(), plugin.getName(), null);
>> +        tracker.open();
>> +
>> +        try
>> +        {
>> +            return getServices(tracker);
>> +        }
>> +        finally
>> +        {
>> +            tracker.close();
>> +        }
>> +    }
>> +
>> +    public void close()
>> +    {
>> +        if (_felix != null)
>> +        {
>> +            try
>> +            {
>> +                _exchangeTracker.close();
>> +
>> +                _securityTracker.close();
>> +
>> +                _configTracker.close();
>> +
>> +                _virtualHostTracker.close();
>> +            }
>> +            finally
>> +            {
>> +                System.out.println("Stopping Plugin manager");
>> +                //fixme should be stopAndWait() but hangs VM, need upgrade
>> in felix
>> +                try
>> +                {
>> +                    _felix.stop();
>> +                }
>> +                catch (BundleException e)
>> +                {
>> +                    //ignore
>> +                }
>> +
>> +                try
>> +                {
>> +                    _felix.waitForStop(FELIX_STOP_TIMEOUT);
>> +                }
>> +                catch (InterruptedException e)
>> +                {
>> +                    //ignore
>> +                }
>> +
>> +                System.out.println("Stopped Plugin manager");
>> +            }
>>         }
>> -        return _securityPlugins;
>>     }
>>
>>  }
>>
>> Modified: qpid/trunk/qpid/java/build.deps
>> URL:
>> http://svn.apache.org/viewvc/qpid/trunk/qpid/java/build.deps?rev=942114&r1=942113&r2=942114&view=diff
>>
>> ==============================================================================
>> --- qpid/trunk/qpid/java/build.deps (original)
>> +++ qpid/trunk/qpid/java/build.deps Fri May  7 15:13:44 2010
>> @@ -68,7 +68,7 @@ ${muse-wsx-api} ${muse-wsx-impl} ${wsdl4
>>  jsp.libs = ${jsp-api} ${jsp-impl} ${core-lib}
>>
>>  osgi-core=lib/org.osgi.core-1.0.0.jar
>> -felix-framework=lib/org.apache.felix.framework-1.0.0.jar
>> +felix-framework=lib/org.apache.felix.framework-2.0.5.jar
>>
>>  geronimo-servlet=lib/geronimo-servlet_2.5_spec-1.2.jar
>>  felix.libs=${osgi-core} ${felix-framework}
>>
>> Added: qpid/trunk/qpid/java/lib/org.apache.felix.framework-2.0.5.jar
>> URL:
>> http://svn.apache.org/viewvc/qpid/trunk/qpid/java/lib/org.apache.felix.framework-2.0.5.jar?rev=942114&view=auto
>>
>> ==============================================================================
>> Files qpid/trunk/qpid/java/lib/org.apache.felix.framework-2.0.5.jar (added)
>> and qpid/trunk/qpid/java/lib/org.apache.felix.framework-2.0.5.jar Fri May  7
>> 15:13:44 2010 differ
>>
>>
>>
>> ---------------------------------------------------------------------
>> Apache Qpid - AMQP Messaging Implementation
>> Project:      http://qpid.apache.org
>> Use/Interact: mailto:commits-subscribe@qpid.apache.org
>>
>>
>



-- 
Martin Ritchie

---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:dev-subscribe@qpid.apache.org