You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by rg...@apache.org on 2011/08/15 13:26:57 UTC

svn commit: r1157780 [3/13] - in /qpid/branches/rg-amqp-1-0-sandbox/qpid/java: ./ broker-plugins/access-control/ broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/config/ broker-plugins/access-control/src/main/java/org/...

Modified: qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/Main.java
URL: http://svn.apache.org/viewvc/qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/Main.java?rev=1157780&r1=1157779&r2=1157780&view=diff
==============================================================================
--- qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/Main.java (original)
+++ qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/Main.java Mon Aug 15 11:26:46 2011
@@ -20,18 +20,6 @@
  */
 package org.apache.qpid.server;
 
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.InetAddress;
-import java.net.InetSocketAddress;
-import java.util.EnumSet;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Properties;
-import java.util.Set;
-import java.util.logging.*;
-
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.HelpFormatter;
 import org.apache.commons.cli.Option;
@@ -40,28 +28,9 @@ import org.apache.commons.cli.Options;
 import org.apache.commons.cli.ParseException;
 import org.apache.commons.cli.PosixParser;
 import org.apache.log4j.Logger;
-import org.apache.log4j.PropertyConfigurator;
-import org.apache.log4j.xml.QpidLog4JConfigurator;
-import org.apache.qpid.common.QpidProperties;
-import org.apache.qpid.framing.ProtocolVersion;
-import org.apache.qpid.server.configuration.ServerConfiguration;
-import org.apache.qpid.server.configuration.management.ConfigurationManagementMBean;
-import org.apache.qpid.server.information.management.ServerInformationMBean;
-import org.apache.qpid.server.logging.SystemOutMessageLogger;
-import org.apache.qpid.server.logging.actors.BrokerActor;
-import org.apache.qpid.server.logging.actors.CurrentActor;
-import org.apache.qpid.server.logging.actors.GenericActor;
-import org.apache.qpid.server.logging.management.LoggingManagementMBean;
-import org.apache.qpid.server.logging.messages.BrokerMessages;
-import org.apache.qpid.server.protocol.AMQProtocolEngineFactory;
-import org.apache.qpid.server.protocol.MultiVersionProtocolEngineFactory;
-import org.apache.qpid.server.protocol.MultiVersionProtocolEngineFactory.VERSION;
+import org.apache.qpid.server.Broker.InitException;
 import org.apache.qpid.server.registry.ApplicationRegistry;
-import org.apache.qpid.server.registry.ConfigurationFileApplicationRegistry;
-import org.apache.qpid.server.transport.QpidAcceptor;
-import org.apache.qpid.ssl.SSLContextFactory;
-import org.apache.qpid.transport.NetworkDriver;
-import org.apache.qpid.transport.network.mina.MINANetworkDriver;
+
 
 /**
  * Main entry point for AMQPD.
@@ -69,39 +38,41 @@ import org.apache.qpid.transport.network
  */
 public class Main
 {
-    private static Logger _logger;
-
-    private static final String DEFAULT_CONFIG_FILE = "etc/config.xml";
-
-    public static final String DEFAULT_LOG_CONFIG_FILENAME = "log4j.xml";
-    public static final String QPID_HOME = "QPID_HOME";
-    private static final int IPV4_ADDRESS_LENGTH = 4;
+    private final Options options = new Options();
+    private CommandLine commandLine;
 
-    private static final char IPV4_LITERAL_SEPARATOR = '.';
-    private java.util.logging.Logger FRAME_LOGGER;
-    private java.util.logging.Logger RAW_LOGGER;
-
-    protected static class InitException extends Exception
+    public static void main(String[] args)
     {
-        InitException(String msg, Throwable cause)
+        //if the -Dlog4j.configuration property has not been set, enable the init override
+        //to stop Log4J wondering off and picking up the first log4j.xml/properties file it
+        //finds from the classpath when we get the first Loggers
+        if(System.getProperty("log4j.configuration") == null)
         {
-            super(msg, cause);
+            System.setProperty("log4j.defaultInitOverride", "true");
         }
-    }
 
-    protected final Options options = new Options();
-    protected CommandLine commandLine;
+        new Main(args);
+    }
 
-    protected Main(String[] args)
+    public Main(final String[] args)
     {
         setOptions(options);
         if (parseCommandline(args))
         {
-            execute();
+            try
+            {
+                execute();
+            }
+            catch(Exception e)
+            {
+                System.err.println("Exception during startup: " + e);
+                e.printStackTrace();
+                shutdown(1);
+            }
         }
     }
 
-    protected boolean parseCommandline(String[] args)
+    protected boolean parseCommandline(final String[] args)
     {
         try
         {
@@ -119,8 +90,7 @@ public class Main
         }
     }
 
-    @SuppressWarnings("static-access")
-    protected void setOptions(Options options)
+    protected void setOptions(final Options options)
     {
         Option help = new Option("h", "help", false, "print this message");
         Option version = new Option("v", "version", false, "print the version information and exit");
@@ -164,16 +134,21 @@ public class Main
         Option bind =
                 OptionBuilder.withArgName("bind").hasArg()
                         .withDescription("bind to the specified address. Overrides any value in the config file")
-                        .withLongOpt("bind").create("b");
+                        .withLongOpt("bind").create(BrokerOptions.BIND);
         Option logconfig =
                 OptionBuilder.withArgName("logconfig").hasArg()
                         .withDescription("use the specified log4j xml configuration file. By "
-                                         + "default looks for a file named " + DEFAULT_LOG_CONFIG_FILENAME
-                                         + " in the same directory as the configuration file").withLongOpt("logconfig").create("l");
+                                         + "default looks for a file named " + BrokerOptions.DEFAULT_LOG_CONFIG_FILE
+                                         + " in the same directory as the configuration file").withLongOpt("logconfig").create(BrokerOptions.LOG_CONFIG);
         Option logwatchconfig =
                 OptionBuilder.withArgName("logwatch").hasArg()
                         .withDescription("monitor the log file configuration file for changes. Units are seconds. "
-                                         + "Zero means do not check for changes.").withLongOpt("logwatch").create("w");
+                                         + "Zero means do not check for changes.").withLongOpt("logwatch").create(BrokerOptions.WATCH);
+
+        Option sslport =
+                OptionBuilder.withArgName("sslport").hasArg()
+                        .withDescription("SSL port. Overrides any value in the config file")
+                        .withLongOpt("sslport").create(BrokerOptions.SSL_PORTS);
 
         options.addOption(help);
         options.addOption(version);
@@ -187,471 +162,120 @@ public class Main
         options.addOption(exclude0_8);
         options.addOption(mport);
         options.addOption(bind);
+        options.addOption(sslport);
     }
 
-    protected void execute()
+    protected void execute() throws Exception
     {
-        // note this understands either --help or -h. If an option only has a long name you can use that but if
-        // an option has a short name and a long name you must use the short name here.
-        if (commandLine.hasOption("h"))
+        BrokerOptions options = new BrokerOptions();
+        String configFile = commandLine.getOptionValue(BrokerOptions.CONFIG);
+        if(configFile != null)
         {
-            HelpFormatter formatter = new HelpFormatter();
-            formatter.printHelp("Qpid", options, true);
+            options.setConfigFile(configFile);
         }
-        else if (commandLine.hasOption("v"))
-        {
-            String ver = QpidProperties.getVersionString();
-
-            StringBuilder protocol = new StringBuilder("AMQP version(s) [major.minor]: ");
-
-            boolean first = true;
-            for (ProtocolVersion pv : ProtocolVersion.getSupportedProtocolVersions())
-            {
-                if (first)
-                {
-                    first = false;
-                }
-                else
-                {
-                    protocol.append(", ");
-                }
-
-                protocol.append(pv.getMajorVersion()).append('-').append(pv.getMinorVersion());
-
-            }
 
-            System.out.println(ver + " (" + protocol + ")");
-        }
-        else
+        String logWatchConfig = commandLine.getOptionValue(BrokerOptions.WATCH);
+        if(logWatchConfig != null)
         {
-            try
-            {
-                CurrentActor.set(new BrokerActor(new SystemOutMessageLogger()));
-                startup();
-                CurrentActor.remove();
-            }
-            catch (InitException e)
-            {
-                System.out.println("Initialisation Error : " + e.getMessage());
-                shutdown(1);
-            }
-            catch (Throwable e)
-            {
-                System.out.println("Error initialising message broker: " + e);
-                e.printStackTrace();
-                shutdown(1);
-            }
+            options.setLogWatchFrequency(Integer.parseInt(logWatchConfig));
         }
-    }
-
-    protected void shutdown(int status)
-    {
-        ApplicationRegistry.removeAll();
-        System.exit(status);
-    }
-
-    protected void startup() throws Exception
-    {
-
-        FRAME_LOGGER = updateLogger("FRM", "qpid-frame.log");
-        RAW_LOGGER = updateLogger("RAW", "qpid-raw.log");
-
-        final String QpidHome = System.getProperty(QPID_HOME);
-        final File defaultConfigFile = new File(QpidHome, DEFAULT_CONFIG_FILE);
-        final File configFile = new File(commandLine.getOptionValue("c", defaultConfigFile.getPath()));
-        if (!configFile.exists())
-        {
-            String error = "File " + configFile + " could not be found. Check the file exists and is readable.";
 
-            if (QpidHome == null)
-            {
-                error = error + "\nNote: " + QPID_HOME + " is not set.";
-            }
-
-            throw new InitException(error, null);
-        }
-        else
+        String logConfig = commandLine.getOptionValue(BrokerOptions.LOG_CONFIG);
+        if(logConfig != null)
         {
-            CurrentActor.get().message(BrokerMessages.CONFIG(configFile.getAbsolutePath()));
+            options.setLogConfigFile(logConfig);
         }
 
-        String logConfig = commandLine.getOptionValue("l");
-        String logWatchConfig = commandLine.getOptionValue("w", "0");
-
-        int logWatchTime = 0;
-        try
-        {
-            logWatchTime = Integer.parseInt(logWatchConfig);
-        }
-        catch (NumberFormatException e)
+        String jmxPort = commandLine.getOptionValue(BrokerOptions.MANAGEMENT);
+        if(jmxPort != null)
         {
-            System.err.println("Log watch configuration value of " + logWatchConfig + " is invalid. Must be "
-                               + "a non-negative integer. Using default of zero (no watching configured");
+            options.setJmxPort(Integer.parseInt(jmxPort));
         }
 
-        File logConfigFile;
-        if (logConfig != null)
-        {
-            logConfigFile = new File(logConfig);
-            configureLogging(logConfigFile, logWatchTime);
-        }
-        else
+        String bindAddr = commandLine.getOptionValue(BrokerOptions.BIND);
+        if (bindAddr != null)
         {
-            File configFileDirectory = configFile.getParentFile();
-            logConfigFile = new File(configFileDirectory, DEFAULT_LOG_CONFIG_FILENAME);
-            configureLogging(logConfigFile, logWatchTime);
+            options.setBind(bindAddr);
         }
 
-        ConfigurationFileApplicationRegistry config = new ConfigurationFileApplicationRegistry(configFile);
-        ServerConfiguration serverConfig = config.getConfiguration();
-        updateManagementPort(serverConfig, commandLine.getOptionValue("m"));
-
-        ApplicationRegistry.initialise(config);
-
-        // We have already loaded the BrokerMessages class by this point so we
-        // need to refresh the locale setting incase we had a different value in
-        // the configuration.
-        BrokerMessages.reload();
-
-        // AR.initialise() sets and removes its own actor so we now need to set the actor
-        // for the remainder of the startup, and the default actor if the stack is empty
-        CurrentActor.set(new BrokerActor(config.getCompositeStartupMessageLogger()));
-        CurrentActor.setDefault(new BrokerActor(config.getRootMessageLogger()));
-        GenericActor.setDefaultMessageLogger(config.getRootMessageLogger());
-        
-
-        try
+        String[] portStr = commandLine.getOptionValues(BrokerOptions.PORTS);
+        if(portStr != null)
         {
-            configureLoggingManagementMBean(logConfigFile, logWatchTime);
-
-            ConfigurationManagementMBean configMBean = new ConfigurationManagementMBean();
-            configMBean.register();
-
-            ServerInformationMBean sysInfoMBean = new ServerInformationMBean(config);
-            sysInfoMBean.register();
-
-
-            String[] portStr = commandLine.getOptionValues("p");
-
-            Set<Integer> ports = new HashSet<Integer>();
-            Set<Integer> exclude_0_10 = new HashSet<Integer>();
-            Set<Integer> exclude_0_9_1 = new HashSet<Integer>();
-            Set<Integer> exclude_0_9 = new HashSet<Integer>();
-            Set<Integer> exclude_0_8 = new HashSet<Integer>();
-
-            if(portStr == null || portStr.length == 0)
-            {
-
-                parsePortList(ports, serverConfig.getPorts());
-                parsePortList(exclude_0_10, serverConfig.getPortExclude010());
-                parsePortList(exclude_0_9_1, serverConfig.getPortExclude091());
-                parsePortList(exclude_0_9, serverConfig.getPortExclude09());
-                parsePortList(exclude_0_8, serverConfig.getPortExclude08());
-
-            }
-            else
-            {
-                parsePortArray(ports, portStr);
-                parsePortArray(exclude_0_10, commandLine.getOptionValues("exclude-0-10"));
-                parsePortArray(exclude_0_9_1, commandLine.getOptionValues("exclude-0-9-1"));
-                parsePortArray(exclude_0_9, commandLine.getOptionValues("exclude-0-9"));
-                parsePortArray(exclude_0_8, commandLine.getOptionValues("exclude-0-8"));
-
-            }
-
-
-
-
-            String bindAddr = commandLine.getOptionValue("b");
-            if (bindAddr == null)
-            {
-                bindAddr = serverConfig.getBind();
-            }
-            InetAddress bindAddress = null;
-
-
-
-            if (bindAddr.equals("wildcard"))
+            parsePortArray(options, portStr, false);
+            for(ProtocolExclusion pe : ProtocolExclusion.values())
             {
-                bindAddress = new InetSocketAddress(0).getAddress();
+                parsePortArray(options, commandLine.getOptionValues(pe.getExcludeName()), pe);
             }
-            else
-            {
-                bindAddress = InetAddress.getByAddress(parseIP(bindAddr));
-            }
-
-            String hostName = bindAddress.getCanonicalHostName();
-
-
-            String keystorePath = serverConfig.getKeystorePath();
-            String keystorePassword = serverConfig.getKeystorePassword();
-            String certType = serverConfig.getCertType();
-            SSLContextFactory sslFactory = null;
-
-            if (!serverConfig.getSSLOnly())
-            {
-
-                for(int port : ports)
-                {
-
-                    NetworkDriver driver = new MINANetworkDriver();
-
-                    Set<VERSION> supported = EnumSet.allOf(VERSION.class);
-
-                    if(exclude_0_10.contains(port))
-                    {
-                        supported.remove(VERSION.v0_10);
-                    }
-
-                    if(exclude_0_9_1.contains(port))
-                    {
-                        supported.remove(VERSION.v0_9_1);
-                    }
-                    if(exclude_0_9.contains(port))
-                    {
-                        supported.remove(VERSION.v0_9);
-                    }
-                    if(exclude_0_8.contains(port))
-                    {
-                        supported.remove(VERSION.v0_8);
-                    }
-
-                    MultiVersionProtocolEngineFactory protocolEngineFactory =
-                            new MultiVersionProtocolEngineFactory(hostName, supported);
-
-
-
-                    driver.bind(port, new InetAddress[]{bindAddress}, protocolEngineFactory,
-                                serverConfig.getNetworkConfiguration(), null);
-                    ApplicationRegistry.getInstance().addAcceptor(new InetSocketAddress(bindAddress, port),
-                                                                  new QpidAcceptor(driver,"TCP"));
-                    CurrentActor.get().message(BrokerMessages.LISTENING("TCP", port));
-
-                }
-
-            }
-
-            if (serverConfig.getEnableSSL())
-            {
-                sslFactory = new SSLContextFactory(keystorePath, keystorePassword, certType);
-                NetworkDriver driver = new MINANetworkDriver();
-                driver.bind(serverConfig.getSSLPort(), new InetAddress[]{bindAddress},
-                            new AMQProtocolEngineFactory(), serverConfig.getNetworkConfiguration(), sslFactory);
-                ApplicationRegistry.getInstance().addAcceptor(new InetSocketAddress(bindAddress, serverConfig.getSSLPort()),
-                        new QpidAcceptor(driver,"TCP"));
-                CurrentActor.get().message(BrokerMessages.LISTENING("TCP/SSL", serverConfig.getSSLPort()));
-            }
-
-            CurrentActor.get().message(BrokerMessages.READY());
-
         }
-        finally
-        {
-            // Startup is complete so remove the AR initialised Startup actor
-            CurrentActor.remove();
-        }
-
-
 
-    }
-
-    private java.util.logging.Logger updateLogger(final String logType, String logFileName) throws IOException
-    {
-        java.util.logging.Logger logger = java.util.logging.Logger.getLogger(logType);
-        logger.setLevel(Level.FINE);
-        Formatter formatter = new Formatter()
+        String[] sslPortStr = commandLine.getOptionValues(BrokerOptions.SSL_PORTS);
+        if(sslPortStr != null)
         {
-            @Override
-            public String format(final LogRecord record)
+            parsePortArray(options, sslPortStr, true);
+            for(ProtocolExclusion pe : ProtocolExclusion.values())
             {
-
-                return "[" + record.getMillis() + " "+ logType +"]\t" + record.getMessage() + "\n";
+                parsePortArray(options, commandLine.getOptionValues(pe.getExcludeName()), pe);
             }
-        };
-        for(Handler handler : logger.getHandlers())
-        {
-            logger.removeHandler(handler);
         }
-        Handler handler = new ConsoleHandler();
-
-        handler.setLevel(Level.FINE);
-        handler.setFormatter(formatter);
-
-        logger.addHandler(handler);
-
-
-        handler = new FileHandler(logFileName, true);
-        handler.setLevel(Level.FINE);
-        handler.setFormatter(formatter);
+        
+        startBroker(options);
+    }
 
-        logger.addHandler(handler);
-        return logger;
+    protected void startBroker(final BrokerOptions options) throws Exception
+    {
+        Broker broker = new Broker();
+        broker.startup(options);
     }
 
-    private void parsePortArray(Set<Integer> ports, String[] portStr)
-            throws InitException
+    protected void shutdown(final int status)
     {
-        if(portStr != null)
-        {
-            for(int i = 0; i < portStr.length; i++)
-            {
-                try
-                {
-                    ports.add(Integer.parseInt(portStr[i]));
-                }
-                catch (NumberFormatException e)
-                {
-                    throw new InitException("Invalid port: " + portStr[i], e);
-                }
-            }
-        }
+        ApplicationRegistry.remove();
+        System.exit(status);
     }
 
-    private void parsePortList(Set<Integer> output, List input)
-            throws InitException
+    private static void parsePortArray(final BrokerOptions options,final Object[] ports,
+                                       final boolean ssl) throws InitException
     {
-        if(input != null)
+        if(ports != null)
         {
-            for(Object port : input)
+            for(int i = 0; i < ports.length; i++)
             {
                 try
                 {
-                    output.add(Integer.parseInt(String.valueOf(port)));
+                    if(ssl)
+                    {
+                        options.addSSLPort(Integer.parseInt(String.valueOf(ports[i])));
+                    }
+                    else
+                    {
+                        options.addPort(Integer.parseInt(String.valueOf(ports[i])));
+                    }
                 }
                 catch (NumberFormatException e)
                 {
-                    throw new InitException("Invalid port: " + port, e);
+                    throw new InitException("Invalid port: " + ports[i], e);
                 }
             }
         }
     }
 
-    /**
-     * Update the configuration data with the management port.
-     * @param configuration
-     * @param managementPort The string from the command line
-     */
-    private void updateManagementPort(ServerConfiguration configuration, String managementPort)
+    private static void parsePortArray(final BrokerOptions options, final Object[] ports,
+                                       final ProtocolExclusion excludedProtocol) throws InitException
     {
-        if (managementPort != null)
+        if(ports != null)
         {
-            try
-            {
-                configuration.setJMXManagementPort(Integer.parseInt(managementPort));
-            }
-            catch (NumberFormatException e)
-            {
-                _logger.warn("Invalid management port: " + managementPort + " will use:" + configuration.getJMXManagementPort(), e);
-            }
-        }
-    }
-
-    public static void main(String[] args)
-    {
-        //if the -Dlog4j.configuration property has not been set, enable the init override
-        //to stop Log4J wondering off and picking up the first log4j.xml/properties file it
-        //finds from the classpath when we get the first Loggers
-        if(System.getProperty("log4j.configuration") == null)
-        {
-            System.setProperty("log4j.defaultInitOverride", "true");
-        }
-
-        //now that the override status is know, we can instantiate the Loggers
-        _logger = Logger.getLogger(Main.class);
-
-        new Main(args);
-    }
-
-    private byte[] parseIP(String address) throws Exception
-    {
-        char[] literalBuffer = address.toCharArray();
-        int byteCount = 0;
-        int currByte = 0;
-        byte[] ip = new byte[IPV4_ADDRESS_LENGTH];
-        for (int i = 0; i < literalBuffer.length; i++)
-        {
-            char currChar = literalBuffer[i];
-            if ((currChar >= '0') && (currChar <= '9'))
-            {
-                currByte = (currByte * 10) + (Character.digit(currChar, 10) & 0xFF);
-            }
-
-            if (currChar == IPV4_LITERAL_SEPARATOR || (i + 1 == literalBuffer.length))
-            {
-                ip[byteCount++] = (byte) currByte;
-                currByte = 0;
-            }
-        }
-
-        if (byteCount != 4)
-        {
-            throw new Exception("Invalid IP address: " + address);
-        }
-        return ip;
-    }
-
-    private void configureLogging(File logConfigFile, int logWatchTime) throws InitException, IOException
-    {
-        if (logConfigFile.exists() && logConfigFile.canRead())
-        {
-            CurrentActor.get().message(BrokerMessages.LOG_CONFIG(logConfigFile.getAbsolutePath()));
-
-            if (logWatchTime > 0)
-            {
-                System.out.println("log file " + logConfigFile.getAbsolutePath() + " will be checked for changes every "
-                                   + logWatchTime + " seconds");
-                // log4j expects the watch interval in milliseconds
-                try
-                {
-                    QpidLog4JConfigurator.configureAndWatch(logConfigFile.getPath(), logWatchTime * 1000);
-                }
-                catch (Exception e)
-                {
-                    throw new InitException(e.getMessage(),e);
-                }
-            }
-            else
+            for(int i = 0; i < ports.length; i++)
             {
                 try
                 {
-                    QpidLog4JConfigurator.configure(logConfigFile.getPath());
+                    options.addExcludedPort(excludedProtocol, 
+                            Integer.parseInt(String.valueOf(ports[i])));
                 }
-                catch (Exception e)
-                {
-                    throw new InitException(e.getMessage(),e);
-                }
-            }
-        }
-        else
-        {
-            System.err.println("Logging configuration error: unable to read file " + logConfigFile.getAbsolutePath());
-            System.err.println("Using the fallback internal log4j.properties configuration");
-
-            InputStream propsFile = this.getClass().getResourceAsStream("/log4j.properties");
-            if(propsFile == null)
-            {
-                throw new IOException("Unable to load the fallback internal log4j.properties configuration file");
-            }
-            else
-            {
-                try
-                {
-                    Properties fallbackProps = new Properties();
-                    fallbackProps.load(propsFile);
-                    PropertyConfigurator.configure(fallbackProps);
-                }
-                finally
+                catch (NumberFormatException e)
                 {
-                    propsFile.close();
+                    throw new InitException("Invalid port for exclusion: " + ports[i], e);
                 }
             }
         }
     }
-
-    private void configureLoggingManagementMBean(File logConfigFile, int logWatchTime) throws Exception
-    {
-        LoggingManagementMBean blm = new LoggingManagementMBean(logConfigFile.getPath(),logWatchTime);
-
-        blm.register();
-    }
 }

Modified: qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/ServerConfiguration.java
URL: http://svn.apache.org/viewvc/qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/ServerConfiguration.java?rev=1157780&r1=1157779&r2=1157780&view=diff
==============================================================================
--- qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/ServerConfiguration.java (original)
+++ qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/ServerConfiguration.java Mon Aug 15 11:26:46 2011
@@ -20,6 +20,8 @@
 
 package org.apache.qpid.server.configuration;
 
+import static org.apache.qpid.transport.ConnectionSettings.WILDCARD_ADDRESS;
+
 import java.io.File;
 import java.util.Collections;
 import java.util.HashMap;
@@ -42,7 +44,7 @@ import org.apache.qpid.server.configurat
 import org.apache.qpid.server.registry.ApplicationRegistry;
 import org.apache.qpid.server.virtualhost.VirtualHost;
 import org.apache.qpid.server.virtualhost.VirtualHostRegistry;
-import org.apache.qpid.transport.NetworkDriverConfiguration;
+import org.apache.qpid.transport.NetworkTransportConfiguration;
 
 import sun.misc.Signal;
 import sun.misc.SignalHandler;
@@ -52,9 +54,7 @@ public class ServerConfiguration extends
     protected static final Logger _logger = Logger.getLogger(ServerConfiguration.class);
 
     // Default Configuration values
-    public static final int DEFAULT_BUFFER_READ_LIMIT_SIZE = 262144;
-    public static final int DEFAULT_BUFFER_WRITE_LIMIT_SIZE = 262144;
-    public static final boolean DEFAULT_BROKER_CONNECTOR_PROTECTIO_ENABLED = false;
+    public static final int DEFAULT_BUFFER_SIZE = 262144;
     public static final String DEFAULT_STATUS_UPDATES = "on";
     public static final String SECURITY_CONFIG_RELOADED = "SECURITY CONFIGURATION RELOADED";
 
@@ -63,7 +63,7 @@ public class ServerConfiguration extends
     public static final int DEFAULT_SSL_PORT = 8672;
     public static final long DEFAULT_HOUSEKEEPING_PERIOD = 30000L;
     public static final int DEFAULT_JMXPORT = 8999;
-    
+
     public static final String QPID_HOME = "QPID_HOME";
     public static final String QPID_WORK = "QPID_WORK";
     public static final String LIB_DIR = "lib";
@@ -84,9 +84,6 @@ public class ServerConfiguration extends
 
     // Configuration values to be read from the configuration file
     //todo Move all properties to static values to ensure system testing can be performed.
-    public static final String CONNECTOR_PROTECTIO_ENABLED = "connector.protectio.enabled";
-    public static final String CONNECTOR_PROTECTIO_READ_BUFFER_LIMIT_SIZE = "connector.protectio.readBufferLimitSize";
-    public static final String CONNECTOR_PROTECTIO_WRITE_BUFFER_LIMIT_SIZE = "connector.protectio.writeBufferLimitSize";
     public static final String MGMT_CUSTOM_REGISTRY_SOCKET = "management.custom-registry-socket";
     public static final String STATUS_UPDATES = "status-updates";
     public static final String ADVANCED_LOCALE = "advanced.locale";
@@ -95,7 +92,6 @@ public class ServerConfiguration extends
         envVarMap.put("QPID_PORT", "connector.port");
         envVarMap.put("QPID_ENABLEDIRECTBUFFERS", "advanced.enableDirectBuffers");
         envVarMap.put("QPID_SSLPORT", "connector.ssl.port");
-        envVarMap.put("QPID_NIO", "connector.qpidnio");
         envVarMap.put("QPID_WRITEBIASED", "advanced.useWriteBiasedPool");
         envVarMap.put("QPID_JMXPORT", "management.jmxport");
         envVarMap.put("QPID_FRAMESIZE", "advanced.framesize");
@@ -148,7 +144,7 @@ public class ServerConfiguration extends
         }
         catch (Exception e)
         {
-            _logger.error("Signal HUP not supported for OS: " + System.getProperty("os.name"));
+            _logger.info("Signal HUP not supported for OS: " + System.getProperty("os.name"));
             // We're on something that doesn't handle SIGHUP, how sad, Windows.
         }
     }
@@ -205,7 +201,29 @@ public class ServerConfiguration extends
     @Override
     public void validateConfiguration() throws ConfigurationException
     {
-        //Currently doesn't do validation
+        // Support for security.jmx.access was removed when JMX access rights were incorporated into the main ACL.
+        // This ensure that users remove the element from their configuration file.
+        
+        if (getListValue("security.jmx.access").size() > 0)
+        {
+            String message = "Validation error : security/jmx/access is no longer a supported element within the configuration xml." 
+                    + (_configFile == null ? "" : " Configuration file : " + _configFile);
+            throw new ConfigurationException(message);
+        }
+
+        if (getListValue("security.jmx.principal-database").size() > 0)
+        {
+            String message = "Validation error : security/jmx/principal-database is no longer a supported element within the configuration xml."
+                    + (_configFile == null ? "" : " Configuration file : " + _configFile);
+            throw new ConfigurationException(message);
+        }
+
+        if (getListValue("security.principal-databases.principal-database(0).class").size() > 0)
+        {
+            String message = "Validation error : security/principal-databases is no longer supported within the configuration xml." 
+                    + (_configFile == null ? "" : " Configuration file : " + _configFile);
+            throw new ConfigurationException(message);
+        }
     }
 
     /*
@@ -503,58 +521,11 @@ public class ServerConfiguration extends
         _virtualHosts.put(config.getName(), config);
     }
 
-    public List<String> getPrincipalDatabaseNames()
-    {
-        return getListValue("security.principal-databases.principal-database.name");
-    }
-
-    public List<String> getPrincipalDatabaseClass()
-    {
-        return getListValue("security.principal-databases.principal-database.class");
-    }
-
-    public List<String> getPrincipalDatabaseAttributeNames(int index)
-    {
-        String name = "security.principal-databases.principal-database(" + index + ")." + "attributes.attribute.name";
-        return getListValue(name);
-    }
-
-    public List<String> getPrincipalDatabaseAttributeValues(int index)
-    {
-        String name = "security.principal-databases.principal-database(" + index + ")." + "attributes.attribute.value";
-        return getListValue(name);
-    }
-
-    public List<String> getManagementPrincipalDBs()
-    {
-        return getListValue("security.jmx.principal-database");
-    }
-
-    public List<String> getManagementAccessList()
-    {
-        return getListValue("security.jmx.access");
-    }
-
     public int getFrameSize()
     {
         return getIntValue("advanced.framesize", DEFAULT_FRAME_SIZE);
     }
 
-    public boolean getProtectIOEnabled()
-    {
-        return getBooleanValue(CONNECTOR_PROTECTIO_ENABLED, DEFAULT_BROKER_CONNECTOR_PROTECTIO_ENABLED);
-    }
-
-    public int getBufferReadLimit()
-    {
-        return getIntValue(CONNECTOR_PROTECTIO_READ_BUFFER_LIMIT_SIZE, DEFAULT_BUFFER_READ_LIMIT_SIZE);
-    }
-
-    public int getBufferWriteLimit()
-    {
-        return getIntValue(CONNECTOR_PROTECTIO_WRITE_BUFFER_LIMIT_SIZE, DEFAULT_BUFFER_WRITE_LIMIT_SIZE);
-    }
-
     public boolean getSynchedClocks()
     {
         return getBooleanValue("advanced.synced-clocks");
@@ -565,11 +536,6 @@ public class ServerConfiguration extends
         return getBooleanValue("security.msg-auth");
     }
 
-    public String getJMXPrincipalDatabase()
-    {
-        return getStringValue("security.jmx.principal-database");
-    }
-
     public String getManagementKeyStorePath()
     {
         return getStringValue("management.ssl.keyStorePath");
@@ -650,14 +616,14 @@ public class ServerConfiguration extends
         return getLongValue("flowResumeCapacity", getCapacity());
     }
 
-    public int getProcessors()
+    public int getConnectorProcessors()
     {
         return getIntValue("connector.processors", 4);
     }
 
     public List getPorts()
     {
-        return getListValue("connector.port", Collections.singletonList(DEFAULT_PORT));
+        return getListValue("connector.port", Collections.<Integer>singletonList(DEFAULT_PORT));
     }
 
     public List getPortExclude010()
@@ -682,17 +648,17 @@ public class ServerConfiguration extends
 
     public String getBind()
     {
-        return getStringValue("connector.bind", "wildcard");
+        return getStringValue("connector.bind", WILDCARD_ADDRESS);
     }
 
     public int getReceiveBufferSize()
     {
-        return getIntValue("connector.socketReceiveBuffer", 32767);
+        return getIntValue("connector.socketReceiveBuffer", DEFAULT_BUFFER_SIZE);
     }
 
     public int getWriteBufferSize()
     {
-        return getIntValue("connector.socketWriteBuffer", 32767);
+        return getIntValue("connector.socketWriteBuffer", DEFAULT_BUFFER_SIZE);
     }
 
     public boolean getTcpNoDelay()
@@ -715,9 +681,9 @@ public class ServerConfiguration extends
         return getBooleanValue("connector.ssl.sslOnly");
     }
 
-    public int getSSLPort()
+    public List getSSLPorts()
     {
-        return getIntValue("connector.ssl.port", DEFAULT_SSL_PORT);
+        return getListValue("connector.ssl.port", Collections.<Integer>singletonList(DEFAULT_SSL_PORT));
     }
 
     public String getKeystorePath()
@@ -735,11 +701,6 @@ public class ServerConfiguration extends
         return getStringValue("connector.ssl.certType", "SunX509");
     }
 
-    public boolean getQpidNIO()
-    {
-        return getBooleanValue("connector.qpidnio");
-    }
-
     public boolean getUseBiasedWrites()
     {
         return getBooleanValue("advanced.useWriteBiasedPool");
@@ -797,59 +758,6 @@ public class ServerConfiguration extends
         return getConfig().getBoolean("statistics.reporting.reset", false);
     }
 
-    public NetworkDriverConfiguration getNetworkConfiguration()
-    {
-        return new NetworkDriverConfiguration()
-        {
-
-            public Integer getTrafficClass()
-            {
-                return null;
-            }
-
-            public Boolean getTcpNoDelay()
-            {
-                // Can't call parent getTcpNoDelay since it just calls this one
-                return getBooleanValue("connector.tcpNoDelay", true);
-            }
-
-            public Integer getSoTimeout()
-            {
-                return null;
-            }
-
-            public Integer getSoLinger()
-            {
-                return null;
-            }
-
-            public Integer getSendBufferSize()
-            {
-                return getBufferWriteLimit();
-            }
-
-            public Boolean getReuseAddress()
-            {
-                return null;
-            }
-
-            public Integer getReceiveBufferSize()
-            {
-                return getBufferReadLimit();
-            }
-
-            public Boolean getOOBInline()
-            {
-                return null;
-            }
-
-            public Boolean getKeepAlive()
-            {
-                return null;
-            }
-        };
-    }
-
     public int getMaxChannelCount()
     {
         return getIntValue("maximumChannelCount", 256);

Modified: qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/VirtualHostConfiguration.java
URL: http://svn.apache.org/viewvc/qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/VirtualHostConfiguration.java?rev=1157780&r1=1157779&r2=1157780&view=diff
==============================================================================
--- qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/VirtualHostConfiguration.java (original)
+++ qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/VirtualHostConfiguration.java Mon Aug 15 11:26:46 2011
@@ -306,7 +306,13 @@ public class VirtualHostConfiguration ex
     @Override
     public void validateConfiguration() throws ConfigurationException
     {
-        //Currently doesn't do validation
+        // QPID-3249.  Support for specifying authentication name at vhost level is no longer supported.
+        if (getListValue("security.authentication.name").size() > 0)
+        {
+            String message = "Validation error : security/authentication/name is no longer a supported element within the configuration xml."
+                    + " It appears in virtual host definition : " + _name;
+            throw new ConfigurationException(message);
+        }
     }
 
     public int getHouseKeepingThreadCount()

Modified: qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/plugins/ConfigurationPlugin.java
URL: http://svn.apache.org/viewvc/qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/plugins/ConfigurationPlugin.java?rev=1157780&r1=1157779&r2=1157780&view=diff
==============================================================================
--- qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/plugins/ConfigurationPlugin.java (original)
+++ qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/plugins/ConfigurationPlugin.java Mon Aug 15 11:26:46 2011
@@ -24,6 +24,7 @@ import org.apache.commons.configuration.
 import org.apache.log4j.Logger;
 import org.apache.qpid.server.configuration.ConfigurationManager;
 import org.apache.qpid.server.registry.ApplicationRegistry;
+import org.apache.qpid.server.registry.IApplicationRegistry;
 
 import java.util.Collections;
 import java.util.HashMap;
@@ -138,10 +139,28 @@ public abstract class ConfigurationPlugi
             }
         }
 
+        offerRemainingConfigurationToOtherPlugins(path, configuration, elements);
+
+        validateConfiguration();
+    }
+
+    private void offerRemainingConfigurationToOtherPlugins(String path,
+            Configuration configuration, Set<String> elements) throws ConfigurationException
+    {
+        final IApplicationRegistry appRegistry = safeGetApplicationRegistryInstance();
+
+        if (appRegistry == null)
+        {
+            // We see this happen during shutdown due to asynchronous reconfig using IO threads.
+            // Need to remove the responsibility for offering configuration to other class.
+            _logger.info("Cannot offer remaining config to other plugins, can't find app registry");
+            return;
+        }
+
+        final ConfigurationManager configurationManager = appRegistry.getConfigurationManager();
         // Process the elements in the configuration
         for (String element : elements)
         {
-            ConfigurationManager configurationManager = ApplicationRegistry.getInstance().getConfigurationManager();
             Configuration handled = element.length() == 0 ? configuration : configuration.subset(element);
 
             String configurationElement = element;
@@ -162,8 +181,18 @@ public abstract class ConfigurationPlugi
                 _pluginConfiguration.put(plugin.getClass().getName(), plugin);
             }
         }
+    }
 
-        validateConfiguration();
+    private IApplicationRegistry safeGetApplicationRegistryInstance()
+    {
+        try
+        {
+            return ApplicationRegistry.getInstance();
+        }
+        catch (IllegalStateException ise)
+        {
+            return null;
+        }
     }
 
     /** Helper method to print out list of keys in a {@link Configuration}. */

Modified: qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/connection/ConnectionRegistry.java
URL: http://svn.apache.org/viewvc/qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/connection/ConnectionRegistry.java?rev=1157780&r1=1157779&r2=1157780&view=diff
==============================================================================
--- qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/connection/ConnectionRegistry.java (original)
+++ qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/connection/ConnectionRegistry.java Mon Aug 15 11:26:46 2011
@@ -73,7 +73,6 @@ public class ConnectionRegistry implemen
         _registry.remove(connnection);
     }
 
-    @Override
     public List<AMQConnectionModel> getConnections()
     {
         return new ArrayList<AMQConnectionModel>(_registry);

Modified: qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/federation/Bridge.java
URL: http://svn.apache.org/viewvc/qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/federation/Bridge.java?rev=1157780&r1=1157779&r2=1157780&view=diff
==============================================================================
--- qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/federation/Bridge.java (original)
+++ qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/federation/Bridge.java Mon Aug 15 11:26:46 2011
@@ -38,6 +38,7 @@ import org.apache.qpid.server.queue.Base
 import org.apache.qpid.server.queue.QueueRegistry;
 import org.apache.qpid.server.store.MessageStore;
 import org.apache.qpid.server.store.StoredMessage;
+import org.apache.qpid.server.subscription.SubscriptionFactoryImpl;
 import org.apache.qpid.server.subscription.Subscription_0_10;
 import org.apache.qpid.server.transport.ServerSession;
 import org.apache.qpid.server.txn.AutoCommitTransaction;
@@ -696,7 +697,7 @@ public class Bridge implements BridgeCon
 
             //TODO Handle the passing of non-null Filters and Arguments here
             
-            Subscription_0_10 sub = new Subscription_0_10((ServerSession)session,
+            Subscription_0_10 sub = SubscriptionFactoryImpl.INSTANCE.createSubscription((ServerSession)session,
                                                           _destination,
                                                           MessageAcceptMode.NONE,
                                                           MessageAcquireMode.PRE_ACQUIRED,
@@ -768,7 +769,7 @@ public class Bridge implements BridgeCon
 
           //TODO Handle the passing of non-null Filters and Arguments here
             
-            Subscription_0_10 sub = new Subscription_0_10((ServerSession)session,
+            Subscription_0_10 sub = SubscriptionFactoryImpl.INSTANCE.createSubscription((ServerSession)session,
                                                           _destination,
                                                           MessageAcceptMode.NONE,
                                                           MessageAcquireMode.PRE_ACQUIRED,

Modified: qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/federation/BrokerLink.java
URL: http://svn.apache.org/viewvc/qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/federation/BrokerLink.java?rev=1157780&r1=1157779&r2=1157780&view=diff
==============================================================================
--- qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/federation/BrokerLink.java (original)
+++ qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/federation/BrokerLink.java Mon Aug 15 11:26:46 2011
@@ -258,7 +258,6 @@ public class BrokerLink implements LinkC
                     _remoteFederationTag = UUID.fromString(_transport+":"+_host+":"+_port).toString();
                 }
                 _qpidConnection.setSessionFactory(new SessionFactory());
-                _qpidConnection.setAuthorizationID(_username == null ? "" : _username);
 
                 updateState(State.ESTABLISHING, State.OPERATIONAL);
 

Modified: qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/filter/PropertyExpression.java
URL: http://svn.apache.org/viewvc/qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/filter/PropertyExpression.java?rev=1157780&r1=1157779&r2=1157780&view=diff
==============================================================================
--- qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/filter/PropertyExpression.java (original)
+++ qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/filter/PropertyExpression.java Mon Aug 15 11:26:46 2011
@@ -37,8 +37,8 @@ import org.apache.qpid.server.queue.Filt
 public class PropertyExpression implements Expression
 {
     // Constants - defined the same as JMS
-    private static final int NON_PERSISTENT = 1;
-    private static final int PERSISTENT = 2;
+    private static enum JMSDeliveryMode { NON_PERSISTENT, PERSISTENT }
+
     private static final int DEFAULT_PRIORITY = 4;
 
     private static final Logger _logger = org.apache.log4j.Logger.getLogger(PropertyExpression.class);
@@ -172,13 +172,14 @@ public class PropertyExpression implemen
     {
         public Object evaluate(Filterable message)
         {
-                int mode = message.isPersistent() ? PERSISTENT : NON_PERSISTENT;
+                JMSDeliveryMode mode = message.isPersistent() ? JMSDeliveryMode.PERSISTENT :
+                                                                JMSDeliveryMode.NON_PERSISTENT;
                 if (_logger.isDebugEnabled())
                 {
                     _logger.debug("JMSDeliveryMode is :" + mode);
                 }
 
-                return mode;
+                return mode.toString();
         }
     }
 

Modified: qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/BasicGetMethodHandler.java
URL: http://svn.apache.org/viewvc/qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/BasicGetMethodHandler.java?rev=1157780&r1=1157779&r2=1157780&view=diff
==============================================================================
--- qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/BasicGetMethodHandler.java (original)
+++ qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/BasicGetMethodHandler.java Mon Aug 15 11:26:46 2011
@@ -162,14 +162,7 @@ public class BasicGetMethodHandler imple
         }
         else
         {
-            sub = new GetNoAckSubscription(channel,
-                                                 session,
-                                                 null,
-                                                 null,
-                                                 false,
-                                                 singleMessageCredit,
-                                                 getDeliveryMethod,
-                                                 getRecordMethod);
+            sub = SubscriptionFactoryImpl.INSTANCE.createBasicGetNoAckSubscription(channel, session, null, null, false, singleMessageCredit, getDeliveryMethod, getRecordMethod);
         }
 
         queue.registerSubscription(sub,false);
@@ -180,27 +173,5 @@ public class BasicGetMethodHandler imple
 
     }
 
-    public static final class GetNoAckSubscription extends SubscriptionImpl.NoAckSubscription
-    {
-        public GetNoAckSubscription(AMQChannel channel, AMQProtocolSession protocolSession,
-                               AMQShortString consumerTag, FieldTable filters,
-                               boolean noLocal, FlowCreditManager creditManager,
-                                   ClientDeliveryMethod deliveryMethod,
-                                   RecordDeliveryMethod recordMethod)
-            throws AMQException
-        {
-            super(channel, protocolSession, consumerTag, filters, noLocal, creditManager, deliveryMethod, recordMethod);
-        }
-
-        public boolean isTransient()
-        {
-            return true;
-        }
 
-        public boolean wouldSuspend(QueueEntry msg)
-        {
-            return !getCreditManager().useCreditForMessage(msg.getMessage());
-        }
-
-    }
 }

Modified: qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/ConnectionSecureOkMethodHandler.java
URL: http://svn.apache.org/viewvc/qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/ConnectionSecureOkMethodHandler.java?rev=1157780&r1=1157779&r2=1157780&view=diff
==============================================================================
--- qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/ConnectionSecureOkMethodHandler.java (original)
+++ qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/ConnectionSecureOkMethodHandler.java Mon Aug 15 11:26:46 2011
@@ -20,9 +20,9 @@
  */
 package org.apache.qpid.server.handler;
 
+
 import javax.security.sasl.SaslException;
 import javax.security.sasl.SaslServer;
-
 import org.apache.log4j.Logger;
 import org.apache.qpid.AMQException;
 import org.apache.qpid.framing.ConnectionCloseBody;
@@ -68,7 +68,7 @@ public class ConnectionSecureOkMethodHan
         }
         MethodRegistry methodRegistry = session.getMethodRegistry();
         AuthenticationResult authResult = authMgr.authenticate(ss, body.getResponse());
-        switch (authResult.status)
+        switch (authResult.getStatus())
         {
             case ERROR:
                 Exception cause = authResult.getCause();
@@ -88,7 +88,10 @@ public class ConnectionSecureOkMethodHan
                 disposeSaslServer(session);
                 break;
             case SUCCESS:
-                _logger.info("Connected as: " + ss.getAuthorizationID());
+                if (_logger.isInfoEnabled())
+                {
+                    _logger.info("Connected as: " + UsernamePrincipal.getUsernamePrincipalFromSubject(authResult.getSubject()));
+                }
                 stateManager.changeState(AMQState.CONNECTION_NOT_TUNED);
 
                 ConnectionTuneBody tuneBody =
@@ -96,13 +99,13 @@ public class ConnectionSecureOkMethodHan
                                                                 ConnectionStartOkMethodHandler.getConfiguredFrameSize(),
                                                                 ApplicationRegistry.getInstance().getConfiguration().getHeartBeatDelay());
                 session.writeFrame(tuneBody.generateFrame(0));
-                session.setAuthorizedID(new UsernamePrincipal(ss.getAuthorizationID()));
+                session.setAuthorizedSubject(authResult.getSubject());
                 disposeSaslServer(session);                
                 break;
             case CONTINUE:
                 stateManager.changeState(AMQState.CONNECTION_NOT_AUTH);
 
-                ConnectionSecureBody secureBody = methodRegistry.createConnectionSecureBody(authResult.challenge);
+                ConnectionSecureBody secureBody = methodRegistry.createConnectionSecureBody(authResult.getChallenge());
                 session.writeFrame(secureBody.generateFrame(0));
         }
     }

Modified: qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/ConnectionStartOkMethodHandler.java
URL: http://svn.apache.org/viewvc/qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/ConnectionStartOkMethodHandler.java?rev=1157780&r1=1157779&r2=1157780&view=diff
==============================================================================
--- qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/ConnectionStartOkMethodHandler.java (original)
+++ qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/ConnectionStartOkMethodHandler.java Mon Aug 15 11:26:46 2011
@@ -65,7 +65,6 @@ public class ConnectionStartOkMethodHand
         _logger.info("Locale selected: " + body.getLocale());
 
         AuthenticationManager authMgr = ApplicationRegistry.getInstance().getAuthenticationManager();
-
         SaslServer ss = null;
         try
         {                       
@@ -78,8 +77,7 @@ public class ConnectionStartOkMethodHand
 
             session.setSaslServer(ss);
 
-            AuthenticationResult authResult = authMgr.authenticate(ss, body.getResponse());
-
+            final AuthenticationResult authResult = authMgr.authenticate(ss, body.getResponse());
             //save clientProperties
             if (session.getClientProperties() == null)
             {
@@ -88,7 +86,7 @@ public class ConnectionStartOkMethodHand
 
             MethodRegistry methodRegistry = session.getMethodRegistry();
 
-            switch (authResult.status)
+            switch (authResult.getStatus())
             {
                 case ERROR:
                     Exception cause = authResult.getCause();
@@ -108,8 +106,11 @@ public class ConnectionStartOkMethodHand
                     break;
 
                 case SUCCESS:
-                    _logger.info("Connected as: " + ss.getAuthorizationID());
-                    session.setAuthorizedID(new UsernamePrincipal(ss.getAuthorizationID()));
+                    if (_logger.isInfoEnabled())
+                    {
+                        _logger.info("Connected as: " + UsernamePrincipal.getUsernamePrincipalFromSubject(authResult.getSubject()));
+                    }
+                    session.setAuthorizedSubject(authResult.getSubject());
 
                     stateManager.changeState(AMQState.CONNECTION_NOT_TUNED);
 
@@ -121,7 +122,7 @@ public class ConnectionStartOkMethodHand
                 case CONTINUE:
                     stateManager.changeState(AMQState.CONNECTION_NOT_AUTH);
 
-                    ConnectionSecureBody secureBody = methodRegistry.createConnectionSecureBody(authResult.challenge);
+                    ConnectionSecureBody secureBody = methodRegistry.createConnectionSecureBody(authResult.getChallenge());
                     session.writeFrame(secureBody.generateFrame(0));
             }
         }

Modified: qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/QueueDeclareHandler.java
URL: http://svn.apache.org/viewvc/qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/QueueDeclareHandler.java?rev=1157780&r1=1157779&r2=1157780&view=diff
==============================================================================
--- qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/QueueDeclareHandler.java (original)
+++ qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/QueueDeclareHandler.java Mon Aug 15 11:26:46 2011
@@ -106,7 +106,7 @@ public class QueueDeclareHandler impleme
                 else
                 {
                     queue = createQueue(queueName, body, virtualHost, protocolConnection);
-                    queue.setPrincipalHolder(protocolConnection);
+                    queue.setAuthorizationHolder(protocolConnection);
                     if (queue.isDurable() && !queue.isAutoDelete())
                     {
                         store.createQueue(queue, body.getArguments());
@@ -119,7 +119,7 @@ public class QueueDeclareHandler impleme
                     if (body.getExclusive())
                     {
                         queue.setExclusiveOwningSession(protocolConnection.getChannel(channelId));
-                        queue.setPrincipalHolder(protocolConnection);
+                        queue.setAuthorizationHolder(protocolConnection);
 
                         if(!body.getDurable())
                         {

Modified: qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/logging/subjects/ChannelLogSubject.java
URL: http://svn.apache.org/viewvc/qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/logging/subjects/ChannelLogSubject.java?rev=1157780&r1=1157779&r2=1157780&view=diff
==============================================================================
--- qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/logging/subjects/ChannelLogSubject.java (original)
+++ qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/logging/subjects/ChannelLogSubject.java Mon Aug 15 11:26:46 2011
@@ -47,7 +47,7 @@ public class ChannelLogSubject extends A
          */
         setLogStringWithFormat(CHANNEL_FORMAT,
                                session.getSessionID(),
-                               session.getPrincipal().getName(),
+                               session.getAuthorizedPrincipal().getName(),
                                session.getRemoteAddress(),
                                session.getVirtualHost().getName(),
                                channel.getChannelId());

Modified: qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/logging/subjects/ConnectionLogSubject.java
URL: http://svn.apache.org/viewvc/qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/logging/subjects/ConnectionLogSubject.java?rev=1157780&r1=1157779&r2=1157780&view=diff
==============================================================================
--- qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/logging/subjects/ConnectionLogSubject.java (original)
+++ qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/logging/subjects/ConnectionLogSubject.java Mon Aug 15 11:26:46 2011
@@ -56,7 +56,7 @@ public class ConnectionLogSubject extend
     {
         if (!_upToDate)
         {
-            if (_session.getPrincipal() != null)
+            if (_session.getAuthorizedPrincipal() != null)
             {
                 if (_session.getVirtualHost() != null)
                 {
@@ -72,7 +72,7 @@ public class ConnectionLogSubject extend
                      */
                     _logString = "[" + MessageFormat.format(CONNECTION_FORMAT, 
                                                             _session.getSessionID(), 
-                                                            _session.getPrincipal().getName(), 
+                                                            _session.getAuthorizedPrincipal().getName(), 
                                                             _session.getRemoteAddress(),
                                                             _session.getVirtualHost().getName()) 
                                  + "] ";
@@ -83,7 +83,7 @@ public class ConnectionLogSubject extend
                 {
                     _logString = "[" + MessageFormat.format(USER_FORMAT, 
                                                             _session.getSessionID(), 
-                                                            _session.getPrincipal().getName(), 
+                                                            _session.getAuthorizedPrincipal().getName(), 
                                                             _session.getRemoteAddress())
                                  + "] ";
 

Propchange: qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/management/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Aug 15 11:26:46 2011
@@ -4,4 +4,4 @@
 /qpid/branches/java-network-refactor/qpid/java/broker/src/main/java/org/apache/qpid/server/management:805429-821809
 /qpid/branches/jmx_mc_gsoc09/qpid/java/broker/src/main/java/org/apache/qpid/server/management:787599
 /qpid/branches/qpid-2935/qpid/java/broker/src/main/java/org/apache/qpid/server/management:1061302-1072333
-/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/management:753219-753220,753253,758730,759097,760919,761721,762365,762992,763959,764026,764109,764140,764790,1073294-1090000
+/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/management:753219-753220,753253,758730,759097,760919,761721,762365,762992,763959,764026,764109,764140,764790,1073294-1157765

Modified: qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/management/DefaultManagedObject.java
URL: http://svn.apache.org/viewvc/qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/management/DefaultManagedObject.java?rev=1157780&r1=1157779&r2=1157780&view=diff
==============================================================================
--- qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/management/DefaultManagedObject.java (original)
+++ qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/management/DefaultManagedObject.java Mon Aug 15 11:26:46 2011
@@ -26,8 +26,9 @@ import javax.management.NotCompliantMBea
 import javax.management.ObjectName;
 import javax.management.StandardMBean;
 
-import org.apache.qpid.AMQException;
+import org.apache.log4j.Logger;
 import org.apache.qpid.server.registry.ApplicationRegistry;
+import org.apache.qpid.server.registry.IApplicationRegistry;
 
 /**
  * Provides implementation of the boilerplate ManagedObject interface. Most managed objects should find it useful
@@ -36,10 +37,14 @@ import org.apache.qpid.server.registry.A
  */
 public abstract class DefaultManagedObject extends StandardMBean implements ManagedObject
 {
+    private static final Logger LOGGER = Logger.getLogger(ApplicationRegistry.class);
+    
     private Class<?> _managementInterface;
 
     private String _typeName;
 
+    private ManagedObjectRegistry _registry;
+
     protected DefaultManagedObject(Class<?> managementInterface, String typeName)
         throws NotCompliantMBeanException
     {
@@ -65,23 +70,26 @@ public abstract class DefaultManagedObje
 
     public void register() throws JMException
     {
-        getManagedObjectRegistry().registerObject(this);
-    }
-
-    protected ManagedObjectRegistry getManagedObjectRegistry()
-    {
-        return ApplicationRegistry.getInstance().getManagedObjectRegistry();
+        _registry = ApplicationRegistry.getInstance().getManagedObjectRegistry();
+        _registry.registerObject(this);
     }
 
-    public void unregister() throws AMQException
+    public void unregister()
     {
         try
         {
-            getManagedObjectRegistry().unregisterObject(this);
+            if(_registry != null)
+            {
+                _registry.unregisterObject(this);
+            }
         }
         catch (JMException e)
         {
-            throw new AMQException("Error unregistering managed object: " + this + ": " + e, e);
+            LOGGER.error("Error unregistering managed object: " + this + ": " + e, e);
+        }
+        finally
+        {
+            _registry = null;
         }
     }
 

Modified: qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/management/JMXManagedObjectRegistry.java
URL: http://svn.apache.org/viewvc/qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/management/JMXManagedObjectRegistry.java?rev=1157780&r1=1157779&r2=1157780&view=diff
==============================================================================
--- qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/management/JMXManagedObjectRegistry.java (original)
+++ qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/management/JMXManagedObjectRegistry.java Mon Aug 15 11:26:46 2011
@@ -20,32 +20,6 @@
  */
 package org.apache.qpid.server.management;
 
-import org.apache.commons.configuration.ConfigurationException;
-import org.apache.log4j.Logger;
-import org.apache.qpid.AMQException;
-import org.apache.qpid.server.registry.ApplicationRegistry;
-import org.apache.qpid.server.registry.IApplicationRegistry;
-import org.apache.qpid.server.security.auth.database.PrincipalDatabase;
-import org.apache.qpid.server.security.auth.rmi.RMIPasswordAuthenticator;
-import org.apache.qpid.server.logging.actors.CurrentActor;
-import org.apache.qpid.server.logging.messages.ManagementConsoleMessages;
-
-import javax.management.JMException;
-import javax.management.MBeanServer;
-import javax.management.MBeanServerFactory;
-import javax.management.ObjectName;
-import javax.management.NotificationListener;
-import javax.management.NotificationFilterSupport;
-import javax.management.remote.JMXConnectorServer;
-import javax.management.remote.JMXServiceURL;
-import javax.management.remote.MBeanServerForwarder;
-import javax.management.remote.JMXConnectionNotification;
-import javax.management.remote.rmi.RMIConnectorServer;
-import javax.management.remote.rmi.RMIJRMPServerImpl;
-import javax.management.remote.rmi.RMIServerImpl;
-import javax.rmi.ssl.SslRMIClientSocketFactory;
-import javax.rmi.ssl.SslRMIServerSocketFactory;
-
 import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.IOException;
@@ -64,7 +38,31 @@ import java.rmi.server.RMIClientSocketFa
 import java.rmi.server.RMIServerSocketFactory;
 import java.rmi.server.UnicastRemoteObject;
 import java.util.HashMap;
-import java.util.Map;
+
+import javax.management.JMException;
+import javax.management.MBeanServer;
+import javax.management.MBeanServerFactory;
+import javax.management.NotificationFilterSupport;
+import javax.management.NotificationListener;
+import javax.management.ObjectName;
+import javax.management.remote.JMXConnectionNotification;
+import javax.management.remote.JMXConnectorServer;
+import javax.management.remote.JMXServiceURL;
+import javax.management.remote.MBeanServerForwarder;
+import javax.management.remote.rmi.RMIConnectorServer;
+import javax.management.remote.rmi.RMIJRMPServerImpl;
+import javax.management.remote.rmi.RMIServerImpl;
+import javax.rmi.ssl.SslRMIClientSocketFactory;
+import javax.rmi.ssl.SslRMIServerSocketFactory;
+
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.log4j.Logger;
+import org.apache.qpid.AMQException;
+import org.apache.qpid.server.logging.actors.CurrentActor;
+import org.apache.qpid.server.logging.messages.ManagementConsoleMessages;
+import org.apache.qpid.server.registry.ApplicationRegistry;
+import org.apache.qpid.server.registry.IApplicationRegistry;
+import org.apache.qpid.server.security.auth.rmi.RMIPasswordAuthenticator;
 
 /**
  * This class starts up an MBeanserver. If out of the box agent has been enabled then there are no 
@@ -113,12 +111,6 @@ public class JMXManagedObjectRegistry im
         IApplicationRegistry appRegistry = ApplicationRegistry.getInstance();
         int port = appRegistry.getConfiguration().getJMXManagementPort();
 
-        //retrieve the Principal Database assigned to JMX authentication duties
-        String jmxDatabaseName = appRegistry.getConfiguration().getJMXPrincipalDatabase();
-        Map<String, PrincipalDatabase> map = appRegistry.getDatabaseManager().getDatabases();        
-        PrincipalDatabase db = map.get(jmxDatabaseName);
-
-        HashMap<String,Object> env = new HashMap<String,Object>();
 
         //Socket factories for the RMIConnectorServer, either default or SLL depending on configuration
         RMIClientSocketFactory csf;
@@ -200,7 +192,8 @@ public class JMXManagedObjectRegistry im
 
         //add a JMXAuthenticator implementation the env map to authenticate the RMI based JMX connector server
         RMIPasswordAuthenticator rmipa = new RMIPasswordAuthenticator();
-        rmipa.setPrincipalDatabase(db);
+        rmipa.setAuthenticationManager(appRegistry.getAuthenticationManager());
+        HashMap<String,Object> env = new HashMap<String,Object>();
         env.put(JMXConnectorServer.AUTHENTICATOR, rmipa);
 
         /*

Modified: qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/management/MBeanInvocationHandlerImpl.java
URL: http://svn.apache.org/viewvc/qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/management/MBeanInvocationHandlerImpl.java?rev=1157780&r1=1157779&r2=1157780&view=diff
==============================================================================
--- qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/management/MBeanInvocationHandlerImpl.java (original)
+++ qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/management/MBeanInvocationHandlerImpl.java Mon Aug 15 11:26:46 2011
@@ -26,8 +26,6 @@ import java.lang.reflect.Method;
 import java.lang.reflect.Proxy;
 import java.security.AccessControlContext;
 import java.security.AccessController;
-import java.security.Principal;
-import java.util.Properties;
 import java.util.Set;
 
 import javax.management.Attribute;
@@ -44,7 +42,6 @@ import javax.management.remote.MBeanServ
 import javax.security.auth.Subject;
 
 import org.apache.log4j.Logger;
-import org.apache.qpid.server.logging.actors.CurrentActor;
 import org.apache.qpid.server.logging.actors.ManagementActor;
 import org.apache.qpid.server.logging.messages.ManagementConsoleMessages;
 import org.apache.qpid.server.registry.ApplicationRegistry;
@@ -52,20 +49,15 @@ import org.apache.qpid.server.security.S
 import org.apache.qpid.server.security.access.Operation;
 
 /**
- * This class can be used by the JMXConnectorServer as an InvocationHandler for the mbean operations. This implements
- * the logic for allowing the users to invoke MBean operations and implements the restrictions for readOnly, readWrite
- * and admin users.
+ * This class can be used by the JMXConnectorServer as an InvocationHandler for the mbean operations. It delegates
+ * JMX access decisions to the SecurityPlugin.
  */
 public class MBeanInvocationHandlerImpl implements InvocationHandler, NotificationListener
 {
     private static final Logger _logger = Logger.getLogger(MBeanInvocationHandlerImpl.class);
 
-    public final static String ADMIN = "admin";
-    public final static String READWRITE = "readwrite";
-    public final static String READONLY = "readonly";
     private final static String DELEGATE = "JMImplementation:type=MBeanServerDelegate";
     private MBeanServer _mbs;
-    private static Properties _userRoles = new Properties();
     private static ManagementActor  _logActor;
     
     public static MBeanServerForwarder newProxyInstance()
@@ -137,14 +129,13 @@ public class MBeanInvocationHandlerImpl 
             Set<JMXPrincipal> principals = subject.getPrincipals(JMXPrincipal.class);
             if (principals == null || principals.isEmpty())
             {
-                throw new SecurityException("Access denied: no principal");
+                throw new SecurityException("Access denied: no JMX principal");
             }
-			
-            // Save the principal
-            Principal principal = principals.iterator().next();
-            SecurityManager.setThreadPrincipal(principal);
-    
-			// Get the component, type and impact, which may be null
+
+            // Save the subject
+            SecurityManager.setThreadSubject(subject);
+   
+            // Get the component, type and impact, which may be null
             String type = getType(method, args);
             String vhost = getVirtualHost(method, args);
             int impact = getImpact(method, args);
@@ -286,7 +277,7 @@ public class MBeanInvocationHandlerImpl 
             }
             catch (JMException ex)
             {
-                ex.printStackTrace();
+                _logger.error("Unable to determine mbean impact for method : " + mbeanMethod, ex);
             }
         }
 

Modified: qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/plugins/Plugin.java
URL: http://svn.apache.org/viewvc/qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/plugins/Plugin.java?rev=1157780&r1=1157779&r2=1157780&view=diff
==============================================================================
--- qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/plugins/Plugin.java (original)
+++ qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/plugins/Plugin.java Mon Aug 15 11:26:46 2011
@@ -27,5 +27,5 @@ public interface Plugin
     /**
      * Provide Configuration to this plugin
      */
-    public void configure(ConfigurationPlugin config);
+    public void configure(ConfigurationPlugin config) throws ConfigurationException;
 }

Modified: qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/plugins/PluginManager.java
URL: http://svn.apache.org/viewvc/qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/plugins/PluginManager.java?rev=1157780&r1=1157779&r2=1157780&view=diff
==============================================================================
--- qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/plugins/PluginManager.java (original)
+++ qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/plugins/PluginManager.java Mon Aug 15 11:26:46 2011
@@ -18,8 +18,16 @@
  */
 package org.apache.qpid.server.plugins;
 
-import static org.apache.felix.framework.util.FelixConstants.*;
-import static org.apache.felix.main.AutoProcessor.*;
+import static org.apache.felix.framework.util.FelixConstants.SYSTEMBUNDLE_ACTIVATORS_PROP;
+import static org.apache.felix.main.AutoProcessor.AUTO_DEPLOY_ACTION_PROPERY;
+import static org.apache.felix.main.AutoProcessor.AUTO_DEPLOY_DIR_PROPERY;
+import static org.apache.felix.main.AutoProcessor.AUTO_DEPLOY_INSTALL_VALUE;
+import static org.apache.felix.main.AutoProcessor.AUTO_DEPLOY_START_VALUE;
+import static org.apache.felix.main.AutoProcessor.process;
+import static org.osgi.framework.Constants.FRAMEWORK_STORAGE;
+import static org.osgi.framework.Constants.FRAMEWORK_STORAGE_CLEAN;
+import static org.osgi.framework.Constants.FRAMEWORK_STORAGE_CLEAN_ONFIRSTINIT;
+import static org.osgi.framework.Constants.FRAMEWORK_SYSTEMPACKAGES;
 
 import java.io.File;
 import java.util.ArrayList;
@@ -35,18 +43,20 @@ import org.apache.felix.framework.util.S
 import org.apache.log4j.Logger;
 import org.apache.qpid.common.Closeable;
 import org.apache.qpid.server.configuration.TopicConfiguration;
+import org.apache.qpid.server.configuration.plugins.ConfigurationPluginFactory;
 import org.apache.qpid.server.configuration.plugins.SlowConsumerDetectionConfiguration.SlowConsumerDetectionConfigurationFactory;
 import org.apache.qpid.server.configuration.plugins.SlowConsumerDetectionPolicyConfiguration.SlowConsumerDetectionPolicyConfigurationFactory;
 import org.apache.qpid.server.configuration.plugins.SlowConsumerDetectionQueueConfiguration.SlowConsumerDetectionQueueConfigurationFactory;
-import org.apache.qpid.server.configuration.plugins.ConfigurationPluginFactory;
 import org.apache.qpid.server.exchange.ExchangeType;
 import org.apache.qpid.server.security.SecurityManager;
 import org.apache.qpid.server.security.SecurityPluginFactory;
 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.LegacyAccess;
-import org.apache.qpid.server.virtualhost.plugins.VirtualHostPluginFactory;
+import org.apache.qpid.server.security.auth.manager.AuthenticationManagerPluginFactory;
+import org.apache.qpid.server.security.auth.manager.PrincipalDatabaseAuthenticationManager;
 import org.apache.qpid.server.virtualhost.plugins.SlowConsumerDetection;
+import org.apache.qpid.server.virtualhost.plugins.VirtualHostPluginFactory;
 import org.apache.qpid.server.virtualhost.plugins.policies.TopicDeletePolicy;
 import org.apache.qpid.slowconsumerdetection.policies.SlowConsumerPolicyPluginFactory;
 import org.osgi.framework.BundleActivator;
@@ -63,7 +73,7 @@ public class PluginManager implements Cl
     private static final Logger _logger = Logger.getLogger(PluginManager.class);
 
     private static final int FELIX_STOP_TIMEOUT = 30000;
-    private static final String QPID_VER_SUFFIX = "version=0.11,";
+    private static final String QPID_VER_SUFFIX = "version=0.13,";
 
     private Framework _felix;
 
@@ -72,6 +82,7 @@ public class PluginManager implements Cl
     private ServiceTracker _configTracker = null;
     private ServiceTracker _virtualHostTracker = null;
     private ServiceTracker _policyTracker = null;
+    private ServiceTracker _authenticationManagerTracker = null;
 
     private Activator _activator;
 
@@ -79,6 +90,7 @@ public class PluginManager implements Cl
     private Map<List<String>, ConfigurationPluginFactory> _configPlugins = new IdentityHashMap<List<String>, ConfigurationPluginFactory>();
     private Map<String, VirtualHostPluginFactory> _vhostPlugins = new HashMap<String, VirtualHostPluginFactory>();
     private Map<String, SlowConsumerPolicyPluginFactory> _policyPlugins = new HashMap<String, SlowConsumerPolicyPluginFactory>();
+    private Map<String, AuthenticationManagerPluginFactory<? extends Plugin>> _authenticationManagerPlugins = new HashMap<String, AuthenticationManagerPluginFactory<? extends Plugin>>();
 
     public PluginManager(String pluginPath, String cachePath) throws Exception
     {
@@ -97,7 +109,8 @@ public class PluginManager implements Cl
                 LegacyAccess.LegacyAccessConfiguration.FACTORY,
                 new SlowConsumerDetectionConfigurationFactory(),
                 new SlowConsumerDetectionPolicyConfigurationFactory(),
-                new SlowConsumerDetectionQueueConfigurationFactory()))
+                new SlowConsumerDetectionQueueConfigurationFactory(),
+                PrincipalDatabaseAuthenticationManager.PrincipalDatabaseAuthenticationManagerConfiguration.FACTORY))
         {
             _configPlugins.put(configFactory.getParentPaths(), configFactory);
         }
@@ -112,6 +125,12 @@ public class PluginManager implements Cl
             _vhostPlugins.put(pluginFactory.getClass().getName(), pluginFactory);
         }
 
+        for (AuthenticationManagerPluginFactory<? extends Plugin> pluginFactory : Arrays.asList(
+                PrincipalDatabaseAuthenticationManager.FACTORY))
+        {
+            _authenticationManagerPlugins.put(pluginFactory.getPluginName(), pluginFactory);
+        }
+
         // Check the plugin directory path is set and exist
         if (pluginPath == null)
         {
@@ -167,7 +186,8 @@ public class PluginManager implements Cl
                 "org.apache.commons.logging; version=1.0.0," +
                 "org.apache.log4j; version=1.2.12," +
                 "javax.management.openmbean; version=1.0.0," +
-                "javax.management; version=1.0.0"
+                "javax.management; version=1.0.0," +
+                "javax.security.auth; version=1.0.0"
             );
         
         // No automatic shutdown hook
@@ -231,6 +251,9 @@ public class PluginManager implements Cl
         _policyTracker = new ServiceTracker(_activator.getContext(), SlowConsumerPolicyPluginFactory.class.getName(), null);
         _policyTracker.open();
         
+        _authenticationManagerTracker = new ServiceTracker(_activator.getContext(), AuthenticationManagerPluginFactory.class.getName(), null);
+        _authenticationManagerTracker.open();
+
         _logger.info("Opened service trackers");
     }
 
@@ -301,6 +324,11 @@ public class PluginManager implements Cl
         return getServices(_securityTracker, _securityPlugins);
     }
 
+    public Map<String, AuthenticationManagerPluginFactory<? extends Plugin>> getAuthenticationManagerPlugins()
+    {
+        return getServices(_authenticationManagerTracker, _authenticationManagerPlugins);
+    }
+
     public void close()
     {
         if (_felix != null)
@@ -313,6 +341,7 @@ public class PluginManager implements Cl
                 _configTracker.close();
                 _virtualHostTracker.close();
                 _policyTracker.close();
+                _authenticationManagerTracker.close();
             }
             finally
             {

Modified: qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/AMQPSASLEngine_1_0_0.java
URL: http://svn.apache.org/viewvc/qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/AMQPSASLEngine_1_0_0.java?rev=1157780&r1=1157779&r2=1157780&view=diff
==============================================================================
--- qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/AMQPSASLEngine_1_0_0.java (original)
+++ qpid/branches/rg-amqp-1-0-sandbox/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/AMQPSASLEngine_1_0_0.java Mon Aug 15 11:26:46 2011
@@ -33,7 +33,7 @@ import org.apache.qpid.server.configurat
 import org.apache.qpid.server.configuration.ConnectionConfigType;
 import org.apache.qpid.server.protocol.v1_0.Connection_1_0;
 import org.apache.qpid.server.registry.IApplicationRegistry;
-import org.apache.qpid.transport.NetworkDriver;
+import org.apache.qpid.transport.network.NetworkConnection;
 
 import java.io.PrintWriter;
 import java.net.SocketAddress;
@@ -45,7 +45,7 @@ public class AMQPSASLEngine_1_0_0 implem
 {
     public static final int MAX_FRAME_SIZE = 64 * 1024 - 1;
 
-    private NetworkDriver _networkDriver;
+    private NetworkConnection _networkDriver;
     private long _readBytes;
     private long _writtenBytes;
     private final UUID _id;
@@ -90,14 +90,14 @@ public class AMQPSASLEngine_1_0_0 implem
 
     private State _state = State.A;
 
-    public AMQPSASLEngine_1_0_0(NetworkDriver networkDriver,
+    public AMQPSASLEngine_1_0_0(NetworkConnection networkDriver,
                                 final IApplicationRegistry appRegistry)
     {
 
 
-        _networkDriver = networkDriver;
         _id = appRegistry.getConfigStore().createId();
         _appRegistry = appRegistry;
+        setNetworkDriver(networkDriver);
 
 
         // FIXME Two log messages to maintain compatinbility with earlier protocol versions
@@ -105,7 +105,7 @@ public class AMQPSASLEngine_1_0_0 implem
 //        _connection.getLogActor().message(ConnectionMessages.OPEN(null, "0-10", false, true));
     }
 
-    public void setNetworkDriver(NetworkDriver driver)
+    public void setNetworkDriver(NetworkConnection driver)
     {
         _networkDriver = driver;
 
@@ -118,7 +118,7 @@ public class AMQPSASLEngine_1_0_0 implem
         _frameWriter =  new FrameWriter(_conn.getDescribedTypeRegistry());
         _frameHandler = new FrameHandler(_conn);
 
-        _networkDriver.send(HEADER.duplicate());
+        _networkDriver.getSender().send(HEADER.duplicate());
 
 
 
@@ -320,7 +320,7 @@ public class AMQPSASLEngine_1_0_0 implem
 
             dup.flip();
             _writtenBytes += dup.limit();
-            _networkDriver.send(dup);
+            _networkDriver.getSender().send(dup);
 
         }
     }



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