You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by sh...@apache.org on 2011/10/20 20:43:26 UTC

svn commit: r1186990 [36/43] - in /qpid/branches/QPID-2519: ./ bin/ cpp/ cpp/bindings/ cpp/bindings/qmf/python/ cpp/bindings/qmf/ruby/ cpp/bindings/qmf/tests/ cpp/bindings/qmf2/ cpp/bindings/qmf2/examples/cpp/ cpp/bindings/qmf2/python/ cpp/bindings/qmf...

Modified: qpid/branches/QPID-2519/java/common/src/main/java/org/apache/qpid/transport/network/security/SecurityLayer.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/java/common/src/main/java/org/apache/qpid/transport/network/security/SecurityLayer.java?rev=1186990&r1=1186989&r2=1186990&view=diff
==============================================================================
--- qpid/branches/QPID-2519/java/common/src/main/java/org/apache/qpid/transport/network/security/SecurityLayer.java (original)
+++ qpid/branches/QPID-2519/java/common/src/main/java/org/apache/qpid/transport/network/security/SecurityLayer.java Thu Oct 20 18:42:46 2011
@@ -25,8 +25,8 @@ import java.nio.ByteBuffer;
 import javax.net.ssl.SSLContext;
 import javax.net.ssl.SSLEngine;
 
+import org.apache.qpid.ssl.SSLContextFactory;
 import org.apache.qpid.transport.Connection;
-import org.apache.qpid.transport.ConnectionListener;
 import org.apache.qpid.transport.ConnectionSettings;
 import org.apache.qpid.transport.Receiver;
 import org.apache.qpid.transport.Sender;
@@ -37,149 +37,12 @@ import org.apache.qpid.transport.network
 import org.apache.qpid.transport.network.security.ssl.SSLSender;
 import org.apache.qpid.transport.network.security.ssl.SSLUtil;
 
-public class SecurityLayer
+public interface SecurityLayer
 {
-    ConnectionSettings settings;
-    Connection con;
-    SSLSecurityLayer sslLayer;
-    SASLSecurityLayer saslLayer;
-    
-    public void init(Connection con) throws TransportException
-    {
-        this.con = con;
-        this.settings = con.getConnectionSettings();
-        if (settings.isUseSSL())
-        {
-            sslLayer = new SSLSecurityLayer();
-        }
-        if (settings.isUseSASLEncryption())
-        {
-            saslLayer = new SASLSecurityLayer();
-        }        
-        
-    }
-    
-    public Sender<ByteBuffer> sender(Sender<ByteBuffer> delegate)
-    {
-        Sender<ByteBuffer> sender = delegate;
-        
-        if (settings.isUseSSL())
-        {
-            sender = sslLayer.sender(sender);
-        }     
-        
-        if (settings.isUseSASLEncryption())
-        {
-            sender = saslLayer.sender(sender);
-        }
-        
-        return sender;
-    }
-    
-    public Receiver<ByteBuffer> receiver(Receiver<ByteBuffer> delegate)
-    {
-        Receiver<ByteBuffer> receiver = delegate;
-        
-        if (settings.isUseSSL())
-        {
-            receiver = sslLayer.receiver(receiver);
-        }        
-        
-        if (settings.isUseSASLEncryption())
-        {
-            receiver = saslLayer.receiver(receiver);
-        }
-        
-        return receiver;
-    }
-    
-    public String getUserID()
-    {
-        if (settings.isUseSSL())
-        {
-            return sslLayer.getUserID();
-        }
-        else
-        {
-            return null;
-        }
-    }
-    
-    class SSLSecurityLayer
-    {
-        SSLEngine engine;
-        SSLSender sender;
-                
-        public SSLSecurityLayer() 
-        {
-            SSLContext sslCtx;
-            try
-            {
-                sslCtx = SSLUtil.createSSLContext(settings);
-            }
-            catch (Exception e)
-            {
-                throw new TransportException("Error creating SSL Context", e);
-            }
-            
-            try
-            {
-                engine = sslCtx.createSSLEngine();
-                engine.setUseClientMode(true);
-            }
-            catch(Exception e)
-            {
-                throw new TransportException("Error creating SSL Engine", e);
-            }
-        }
-        
-        public SSLSender sender(Sender<ByteBuffer> delegate)
-        {
-            sender = new SSLSender(engine,delegate);
-            sender.setConnectionSettings(settings);
-            return sender;
-        }
-        
-        public SSLReceiver receiver(Receiver<ByteBuffer> delegate)
-        {
-            if (sender == null)
-            {
-                throw new  
-                IllegalStateException("SecurityLayer.sender method should be " +
-                		"invoked before SecurityLayer.receiver");
-            }
-            
-            SSLReceiver receiver = new SSLReceiver(engine,delegate,sender);
-            receiver.setConnectionSettings(settings);
-            return receiver;
-        }
-        
-        public String getUserID()
-        {
-            return SSLUtil.retriveIdentity(engine);
-        }
-        
-    }
-    
-    class SASLSecurityLayer
-    {
-        public SASLSecurityLayer() 
-        {
-        }
-        
-        public SASLSender sender(Sender<ByteBuffer> delegate)
-        {
-            SASLSender sender = new SASLSender(delegate);
-            con.addConnectionListener((ConnectionListener)sender);
-            return sender;
-        }
-        
-        public SASLReceiver receiver(Receiver<ByteBuffer> delegate)
-        {
-            SASLReceiver receiver = new SASLReceiver(delegate);
-            con.addConnectionListener((ConnectionListener)receiver);
-            return receiver;
-        }
-        
-    }
+
+    public Sender<ByteBuffer> sender(Sender<ByteBuffer> delegate);
+    public Receiver<ByteBuffer> receiver(Receiver<ByteBuffer> delegate);
+    public String getUserID();
+
 }
+

Modified: qpid/branches/QPID-2519/java/common/src/main/java/org/apache/qpid/transport/network/security/sasl/SASLSender.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/java/common/src/main/java/org/apache/qpid/transport/network/security/sasl/SASLSender.java?rev=1186990&r1=1186989&r2=1186990&view=diff
==============================================================================
--- qpid/branches/QPID-2519/java/common/src/main/java/org/apache/qpid/transport/network/security/sasl/SASLSender.java (original)
+++ qpid/branches/QPID-2519/java/common/src/main/java/org/apache/qpid/transport/network/security/sasl/SASLSender.java Thu Oct 20 18:42:46 2011
@@ -43,8 +43,7 @@ public class SASLSender extends SASLEncr
         this.delegate = delegate;
         log.debug("SASL Sender enabled");
     }
-    
-    @Override
+
     public void close() 
     {
         
@@ -65,13 +64,11 @@ public class SASLSender extends SASLEncr
         }
     }
 
-    @Override
     public void flush() 
     {
        delegate.flush();
     }
 
-    @Override
     public void send(ByteBuffer buf) 
     {        
         if (closed.get())
@@ -108,7 +105,6 @@ public class SASLSender extends SASLEncr
         }        
     }
 
-    @Override
     public void setIdleTimeout(int i) 
     {
         delegate.setIdleTimeout(i);

Modified: qpid/branches/QPID-2519/java/common/src/main/java/org/apache/qpid/transport/network/security/ssl/QpidClientX509KeyManager.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/java/common/src/main/java/org/apache/qpid/transport/network/security/ssl/QpidClientX509KeyManager.java?rev=1186990&r1=1186989&r2=1186990&view=diff
==============================================================================
--- qpid/branches/QPID-2519/java/common/src/main/java/org/apache/qpid/transport/network/security/ssl/QpidClientX509KeyManager.java (original)
+++ qpid/branches/QPID-2519/java/common/src/main/java/org/apache/qpid/transport/network/security/ssl/QpidClientX509KeyManager.java Thu Oct 20 18:42:46 2011
@@ -20,7 +20,9 @@
  */
 package org.apache.qpid.transport.network.security.ssl;
 
+import java.io.IOException;
 import java.net.Socket;
+import java.security.GeneralSecurityException;
 import java.security.KeyStore;
 import java.security.Principal;
 import java.security.PrivateKey;
@@ -40,7 +42,7 @@ public class QpidClientX509KeyManager ex
     String alias;
     
     public QpidClientX509KeyManager(String alias, String keyStorePath,
-                           String keyStorePassword,String keyStoreCertType) throws Exception
+                           String keyStorePassword,String keyStoreCertType) throws GeneralSecurityException, IOException
     {
         this.alias = alias;    
         KeyStore ks = SSLUtil.getInitializedKeyStore(keyStorePath,keyStorePassword);
@@ -48,51 +50,45 @@ public class QpidClientX509KeyManager ex
         kmf.init(ks, keyStorePassword.toCharArray());
         this.delegate = (X509ExtendedKeyManager)kmf.getKeyManagers()[0];
     }
-        
-    @Override
+
     public String chooseClientAlias(String[] keyType, Principal[] issuers, Socket socket)
     {
         log.debug("chooseClientAlias:Returning alias " + alias);
         return alias;
     }
 
-    @Override
     public String chooseServerAlias(String keyType, Principal[] issuers, Socket socket)
     {
         return delegate.chooseServerAlias(keyType, issuers, socket);
     }
 
-    @Override
     public X509Certificate[] getCertificateChain(String alias)
     {
         return delegate.getCertificateChain(alias);
     }
 
-    @Override
     public String[] getClientAliases(String keyType, Principal[] issuers)
     {
         log.debug("getClientAliases:Returning alias " + alias);
         return new String[]{alias};
     }
 
-    @Override
     public PrivateKey getPrivateKey(String alias)
     {
         return delegate.getPrivateKey(alias);
     }
 
-    @Override
     public String[] getServerAliases(String keyType, Principal[] issuers)
     {
         return delegate.getServerAliases(keyType, issuers);
     }
-    
+
     public String chooseEngineClientAlias(String[] keyType, Principal[] issuers, SSLEngine engine)
     {
         log.debug("chooseEngineClientAlias:Returning alias " + alias);
         return alias;
     }
-    
+
     public String chooseEngineServerAlias(String keyType, Principal[] issuers, SSLEngine engine) 
     {
         return delegate.chooseEngineServerAlias(keyType, issuers, engine);

Modified: qpid/branches/QPID-2519/java/common/src/main/java/org/apache/qpid/transport/network/security/ssl/SSLReceiver.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/java/common/src/main/java/org/apache/qpid/transport/network/security/ssl/SSLReceiver.java?rev=1186990&r1=1186989&r2=1186990&view=diff
==============================================================================
--- qpid/branches/QPID-2519/java/common/src/main/java/org/apache/qpid/transport/network/security/ssl/SSLReceiver.java (original)
+++ qpid/branches/QPID-2519/java/common/src/main/java/org/apache/qpid/transport/network/security/ssl/SSLReceiver.java Thu Oct 20 18:42:46 2011
@@ -24,43 +24,43 @@ import java.nio.ByteBuffer;
 
 import javax.net.ssl.SSLEngine;
 import javax.net.ssl.SSLEngineResult;
-import javax.net.ssl.SSLException;
 import javax.net.ssl.SSLEngineResult.HandshakeStatus;
 import javax.net.ssl.SSLEngineResult.Status;
+import javax.net.ssl.SSLException;
 
 import org.apache.qpid.transport.ConnectionSettings;
 import org.apache.qpid.transport.Receiver;
 import org.apache.qpid.transport.TransportException;
+import org.apache.qpid.transport.network.security.SSLStatus;
 import org.apache.qpid.transport.util.Logger;
 
 public class SSLReceiver implements Receiver<ByteBuffer>
 {
-    private Receiver<ByteBuffer> delegate;
-    private SSLEngine engine;
-    private SSLSender sender;
-    private int sslBufSize;
+    private static final Logger log = Logger.get(SSLReceiver.class);
+
+    private final Receiver<ByteBuffer> delegate;
+    private final SSLEngine engine;
+    private final int sslBufSize;
+    private final ByteBuffer localBuffer;
+    private final SSLStatus _sslStatus;
     private ByteBuffer appData;
-    private ByteBuffer localBuffer;
     private boolean dataCached = false;
-    private final Object notificationToken;
-    private ConnectionSettings settings;
-    
-    private static final Logger log = Logger.get(SSLReceiver.class);
 
-    public SSLReceiver(SSLEngine engine, Receiver<ByteBuffer> delegate,SSLSender sender)
+    private String _hostname;
+
+    public SSLReceiver(final SSLEngine engine, final Receiver<ByteBuffer> delegate, final SSLStatus sslStatus)
     {
         this.engine = engine;
         this.delegate = delegate;
-        this.sender = sender;
         this.sslBufSize = engine.getSession().getApplicationBufferSize();
         appData = ByteBuffer.allocate(sslBufSize);
         localBuffer = ByteBuffer.allocate(sslBufSize);
-        notificationToken = sender.getNotificationToken();
+        _sslStatus = sslStatus;
     }
 
-    public void setConnectionSettings(ConnectionSettings settings)
+    public void setHostname(String hostname)
     {
-        this.settings = settings;
+        _hostname = hostname;
     }
     
     public void closed()
@@ -102,9 +102,9 @@ public class SSLReceiver implements Rece
             try
             {
                 SSLEngineResult result = engine.unwrap(netData, appData);
-                synchronized (notificationToken)
+                synchronized (_sslStatus.getSslLock())
                 {
-                    notificationToken.notifyAll();
+                    _sslStatus.getSslLock().notifyAll();
                 }
 
                 int read = result.bytesProduced();
@@ -129,9 +129,9 @@ public class SSLReceiver implements Rece
                 switch(status)
                 {
                     case CLOSED:
-                        synchronized(notificationToken)
+                        synchronized(_sslStatus.getSslLock())
                         {
-                            notificationToken.notifyAll();
+                            _sslStatus.getSslLock().notifyAll();
                         }
                         return;
 
@@ -163,20 +163,20 @@ public class SSLReceiver implements Rece
                         break;
 
                     case NEED_TASK:
-                        sender.doTasks();
+                        doTasks();
                         handshakeStatus = engine.getHandshakeStatus();
 
                     case FINISHED:
-                        if (this.settings != null && this.settings.isVerifyHostname() )
+                        if (_hostname != null)
                         {
-                            SSLUtil.verifyHostname(engine, this.settings.getHost());
+                            SSLUtil.verifyHostname(engine, _hostname);
                         }
                             
                     case NEED_WRAP:                        
                     case NOT_HANDSHAKING:
-                        synchronized(notificationToken)
+                        synchronized(_sslStatus.getSslLock())
                         {
-                            notificationToken.notifyAll();
+                            _sslStatus.getSslLock().notifyAll();
                         }
                         break;
 
@@ -189,14 +189,23 @@ public class SSLReceiver implements Rece
             catch(SSLException e)
             {
                 log.error(e, "Error caught in SSLReceiver");
-                sender.setErrorFlag();
-                synchronized(notificationToken)
+                _sslStatus.setSslErrorFlag();
+                synchronized(_sslStatus.getSslLock())
                 {
-                    notificationToken.notifyAll();
+                    _sslStatus.getSslLock().notifyAll();
                 }                
                 exception(new TransportException("Error in SSLReceiver",e));
             }
 
         }
     }
+
+    private void doTasks()
+    {
+        Runnable runnable;
+        while ((runnable = engine.getDelegatedTask()) != null) {
+            runnable.run();
+        }
+    }
+
 }

Modified: qpid/branches/QPID-2519/java/common/src/main/java/org/apache/qpid/transport/network/security/ssl/SSLSender.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/java/common/src/main/java/org/apache/qpid/transport/network/security/ssl/SSLSender.java?rev=1186990&r1=1186989&r2=1186990&view=diff
==============================================================================
--- qpid/branches/QPID-2519/java/common/src/main/java/org/apache/qpid/transport/network/security/ssl/SSLSender.java (original)
+++ qpid/branches/QPID-2519/java/common/src/main/java/org/apache/qpid/transport/network/security/ssl/SSLSender.java Thu Oct 20 18:42:46 2011
@@ -31,35 +31,38 @@ import javax.net.ssl.SSLEngineResult.Sta
 import org.apache.qpid.transport.ConnectionSettings;
 import org.apache.qpid.transport.Sender;
 import org.apache.qpid.transport.SenderException;
+import org.apache.qpid.transport.network.security.SSLStatus;
 import org.apache.qpid.transport.util.Logger;
 
 public class SSLSender implements Sender<ByteBuffer>
 {
-    private Sender<ByteBuffer> delegate;
-    private SSLEngine engine;
-    private int sslBufSize;
-    private ByteBuffer netData;
-    private long timeout = 30000;
-    private ConnectionSettings settings;
-    
-    private final Object engineState = new Object();
+    private static final Logger log = Logger.get(SSLSender.class);
+
+    private final Sender<ByteBuffer> delegate;
+    private final SSLEngine engine;
+    private final int sslBufSize;
+    private final ByteBuffer netData;
+    private final long timeout;
+    private final SSLStatus _sslStatus;
+
+    private String _hostname;
+
     private final AtomicBoolean closed = new AtomicBoolean(false);
-    private final AtomicBoolean error = new AtomicBoolean(false);
 
-    private static final Logger log = Logger.get(SSLSender.class);
 
-    public SSLSender(SSLEngine engine, Sender<ByteBuffer> delegate)
+    public SSLSender(SSLEngine engine, Sender<ByteBuffer> delegate, SSLStatus sslStatus)
     {
         this.engine = engine;
         this.delegate = delegate;
         sslBufSize = engine.getSession().getPacketBufferSize();
         netData = ByteBuffer.allocate(sslBufSize);
         timeout = Long.getLong("qpid.ssl_timeout", 60000);
+        _sslStatus = sslStatus;
     }
     
-    public void setConnectionSettings(ConnectionSettings settings)
+    public void setHostname(String hostname)
     {
-        this.settings = settings;
+        _hostname = hostname;
     }
 
     public void close()
@@ -83,13 +86,13 @@ public class SSLSender implements Sender
             }
 
 
-            synchronized(engineState)
+            synchronized(_sslStatus.getSslLock())
             {
                 while (!engine.isOutboundDone())
                 {
                     try
                     {
-                        engineState.wait();
+                        _sslStatus.getSslLock().wait();
                     }
                     catch(InterruptedException e)
                     {
@@ -148,7 +151,7 @@ public class SSLSender implements Sender
         HandshakeStatus handshakeStatus;
         Status status;
 
-        while(appData.hasRemaining() && !error.get())
+        while(appData.hasRemaining() && !_sslStatus.getSslErrorFlag())
         {
             int read = 0;
             try
@@ -160,6 +163,7 @@ public class SSLSender implements Sender
             }
             catch(SSLException e)
             {
+                // Should this set _sslError??
                 throw new SenderException("SSL, Error occurred while encrypting data",e);
             }
 
@@ -207,7 +211,7 @@ public class SSLSender implements Sender
 
                 case NEED_UNWRAP:
                     flush();
-                    synchronized(engineState)
+                    synchronized(_sslStatus.getSslLock())
                     {
                         switch (engine.getHandshakeStatus())
                         {
@@ -215,7 +219,7 @@ public class SSLSender implements Sender
                             long start = System.currentTimeMillis();
                             try
                             {
-                                engineState.wait(timeout);
+                                _sslStatus.getSslLock().wait(timeout);
                             }
                             catch(InterruptedException e)
                             {
@@ -234,9 +238,9 @@ public class SSLSender implements Sender
                     break;
 
                 case FINISHED:
-                    if (this.settings != null && this.settings.isVerifyHostname() )
+                    if (_hostname != null)
                     {
-                        SSLUtil.verifyHostname(engine, this.settings.getHost());
+                        SSLUtil.verifyHostname(engine, _hostname);
                     }
                     
                 case NOT_HANDSHAKING:
@@ -249,7 +253,7 @@ public class SSLSender implements Sender
         }
     }
 
-    public void doTasks()
+    private void doTasks()
     {
         Runnable runnable;
         while ((runnable = engine.getDelegatedTask()) != null) {
@@ -257,16 +261,6 @@ public class SSLSender implements Sender
         }
     }
 
-    public Object getNotificationToken()
-    {
-        return engineState;
-    }
-    
-    public void setErrorFlag()
-    {
-        error.set(true);
-    }
-
     public void setIdleTimeout(int i)
     {
         delegate.setIdleTimeout(i);

Modified: qpid/branches/QPID-2519/java/common/src/main/java/org/apache/qpid/transport/network/security/ssl/SSLUtil.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/java/common/src/main/java/org/apache/qpid/transport/network/security/ssl/SSLUtil.java?rev=1186990&r1=1186989&r2=1186990&view=diff
==============================================================================
--- qpid/branches/QPID-2519/java/common/src/main/java/org/apache/qpid/transport/network/security/ssl/SSLUtil.java (original)
+++ qpid/branches/QPID-2519/java/common/src/main/java/org/apache/qpid/transport/network/security/ssl/SSLUtil.java Thu Oct 20 18:42:46 2011
@@ -125,38 +125,6 @@ public class SSLUtil
         return id.toString();
     }
     
-    public static SSLContext createSSLContext(ConnectionSettings settings) throws Exception
-    {
-        SSLContextFactory sslContextFactory;
-        
-        if (settings.getCertAlias() == null)
-        {
-            sslContextFactory = 
-                new SSLContextFactory(settings.getTrustStorePath(),
-                                      settings.getTrustStorePassword(),
-                                      settings.getTrustStoreCertType(),
-                                      settings.getKeyStorePath(),
-                                      settings.getKeyStorePassword(),
-                                      settings.getKeyStoreCertType());
-
-        } else
-        {
-            sslContextFactory = 
-                new SSLContextFactory(settings.getTrustStorePath(),
-                                      settings.getTrustStorePassword(),
-                                      settings.getTrustStoreCertType(),
-                    new QpidClientX509KeyManager(settings.getCertAlias(),
-                                                     settings.getKeyStorePath(),
-                                                     settings.getKeyStorePassword(),
-                                                     settings.getKeyStoreCertType()));
-            
-            log.debug("Using custom key manager");
-        }
-
-        return sslContextFactory.buildServerContext();
-        
-    }
-    
     public static KeyStore getInitializedKeyStore(String storePath, String storePassword) throws GeneralSecurityException, IOException
     {
         KeyStore ks = KeyStore.getInstance("JKS");
@@ -176,7 +144,10 @@ public class SSLUtil
             {
                 throw new IOException("Unable to load keystore resource: " + storePath);
             }
-            ks.load(in, storePassword.toCharArray());
+
+            char[] storeCharPassword = storePassword == null ? null : storePassword.toCharArray();
+
+            ks.load(in, storeCharPassword);
         }
         finally
         {

Modified: qpid/branches/QPID-2519/java/common/src/main/java/org/apache/qpid/url/URLHelper.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/java/common/src/main/java/org/apache/qpid/url/URLHelper.java?rev=1186990&r1=1186989&r2=1186990&view=diff
==============================================================================
--- qpid/branches/QPID-2519/java/common/src/main/java/org/apache/qpid/url/URLHelper.java (original)
+++ qpid/branches/QPID-2519/java/common/src/main/java/org/apache/qpid/url/URLHelper.java Thu Oct 20 18:42:46 2011
@@ -31,9 +31,6 @@ public class URLHelper
 
     public static void parseOptions(Map<String, String> optionMap, String options) throws URLSyntaxException
     {
-        // options looks like this
-        // brokerlist='tcp://host:port?option='value',option='value';vm://:3/virtualpath?option='value'',failover='method?option='value',option='value''
-
         if ((options == null) || (options.indexOf('=') == -1))
         {
             return;

Modified: qpid/branches/QPID-2519/java/common/src/main/java/org/apache/qpid/util/FileUtils.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/java/common/src/main/java/org/apache/qpid/util/FileUtils.java?rev=1186990&r1=1186989&r2=1186990&view=diff
==============================================================================
--- qpid/branches/QPID-2519/java/common/src/main/java/org/apache/qpid/util/FileUtils.java (original)
+++ qpid/branches/QPID-2519/java/common/src/main/java/org/apache/qpid/util/FileUtils.java Thu Oct 20 18:42:46 2011
@@ -143,8 +143,9 @@ public class FileUtils
     }
 
     /**
-     * Either opens the specified filename as an input stream, or uses the default resource loaded using the
-     * specified class loader, if opening the file fails or no file name is specified.
+     * Either opens the specified filename as an input stream or either the filesystem or classpath,
+     * or uses the default resource loaded using the specified class loader, if opening the file fails
+     * or no file name is specified.
      *
      * @param filename        The name of the file to open.
      * @param defaultResource The name of the default resource on the classpath if the file cannot be opened.
@@ -156,28 +157,28 @@ public class FileUtils
     {
         InputStream is = null;
 
-        // Flag to indicate whether the default resource should be used. By default this is true, so that the default
-        // is used when opening the file fails.
-        boolean useDefault = true;
-
         // Try to open the file if one was specified.
         if (filename != null)
         {
+            // try on filesystem
             try
             {
                 is = new BufferedInputStream(new FileInputStream(new File(filename)));
-
-                // Clear the default flag because the file was succesfully opened.
-                useDefault = false;
             }
             catch (FileNotFoundException e)
             {
-                // Ignore this exception, the default will be used instead.
+                is = null;
+            }
+
+            if (is == null)
+            {
+                // failed on filesystem, so try on classpath
+                is = cl.getResourceAsStream(filename);
             }
         }
 
         // Load the default resource if a file was not specified, or if opening the file failed.
-        if (useDefault)
+        if (is == null)
         {
             is = cl.getResourceAsStream(defaultResource);
         }
@@ -339,7 +340,7 @@ public class FileUtils
         }
 
         //else we have a source directory
-        if (!dst.isDirectory() && !dst.mkdir())
+        if (!dst.isDirectory() && !dst.mkdirs())
         {
             throw new UnableToCopyException("Unable to create destination directory");
         }

Modified: qpid/branches/QPID-2519/java/common/src/test/java/org/apache/qpid/AMQExceptionTest.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/java/common/src/test/java/org/apache/qpid/AMQExceptionTest.java?rev=1186990&r1=1186989&r2=1186990&view=diff
==============================================================================
--- qpid/branches/QPID-2519/java/common/src/test/java/org/apache/qpid/AMQExceptionTest.java (original)
+++ qpid/branches/QPID-2519/java/common/src/test/java/org/apache/qpid/AMQExceptionTest.java Thu Oct 20 18:42:46 2011
@@ -23,6 +23,7 @@ package org.apache.qpid;
 import junit.framework.TestCase;
 import org.apache.qpid.protocol.AMQConstant;
 import org.apache.qpid.framing.AMQFrameDecodingException;
+import org.apache.qpid.framing.AMQShortString;
 
 /**
  * This test is to ensure that when an AMQException is rethrown that the specified exception is correctly wrapped up.
@@ -91,6 +92,18 @@ public class AMQExceptionTest extends Te
         return amqe;
     }
 
+    public void testGetMessageAsString()
+    {
+        StringBuilder sb = new StringBuilder();
+        for (int i = 0; i < 25; i++)
+        {
+            sb.append("message [" + i + "]");
+        }
+        AMQException e = new AMQException(AMQConstant.INTERNAL_ERROR, sb.toString(), null);
+        AMQShortString message = e.getMessageAsShortString();
+        assertEquals(sb.substring(0, AMQShortString.MAX_LENGTH - 3) + "...", message.toString());
+    }
+
     /**
      * Private class that extends AMQException but does not have a default exception.
      */

Modified: qpid/branches/QPID-2519/java/common/src/test/java/org/apache/qpid/codec/AMQDecoderTest.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/java/common/src/test/java/org/apache/qpid/codec/AMQDecoderTest.java?rev=1186990&r1=1186989&r2=1186990&view=diff
==============================================================================
--- qpid/branches/QPID-2519/java/common/src/test/java/org/apache/qpid/codec/AMQDecoderTest.java (original)
+++ qpid/branches/QPID-2519/java/common/src/test/java/org/apache/qpid/codec/AMQDecoderTest.java Thu Oct 20 18:42:46 2011
@@ -21,6 +21,9 @@ package org.apache.qpid.codec;
  */
 
 
+import java.io.ByteArrayOutputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
 import java.nio.ByteBuffer;
 import java.util.ArrayList;
 
@@ -46,9 +49,16 @@ public class AMQDecoderTest extends Test
     }
    
     
-    public void testSingleFrameDecode() throws AMQProtocolVersionException, AMQFrameDecodingException
+    private ByteBuffer getHeartbeatBodyBuffer() throws IOException
     {
-        ByteBuffer msg = HeartbeatBody.FRAME.toNioByteBuffer();
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        HeartbeatBody.FRAME.writePayload(new DataOutputStream(baos));
+        return ByteBuffer.wrap(baos.toByteArray());
+    }
+    
+    public void testSingleFrameDecode() throws AMQProtocolVersionException, AMQFrameDecodingException, IOException
+    {
+        ByteBuffer msg = getHeartbeatBodyBuffer();
         ArrayList<AMQDataBlock> frames = _decoder.decodeBuffer(msg);
         if (frames.get(0) instanceof AMQFrame)
         {
@@ -60,9 +70,9 @@ public class AMQDecoderTest extends Test
         }
     }
     
-    public void testPartialFrameDecode() throws AMQProtocolVersionException, AMQFrameDecodingException
+    public void testPartialFrameDecode() throws AMQProtocolVersionException, AMQFrameDecodingException, IOException
     {
-        ByteBuffer msg = HeartbeatBody.FRAME.toNioByteBuffer();
+        ByteBuffer msg = getHeartbeatBodyBuffer();
         ByteBuffer msgA = msg.slice();
         int msgbPos = msg.remaining() / 2;
         int msgaLimit = msg.remaining() - msgbPos;
@@ -83,10 +93,10 @@ public class AMQDecoderTest extends Test
         }
     }
     
-    public void testMultipleFrameDecode() throws AMQProtocolVersionException, AMQFrameDecodingException
+    public void testMultipleFrameDecode() throws AMQProtocolVersionException, AMQFrameDecodingException, IOException
     {
-        ByteBuffer msgA = HeartbeatBody.FRAME.toNioByteBuffer();
-        ByteBuffer msgB = HeartbeatBody.FRAME.toNioByteBuffer();
+        ByteBuffer msgA = getHeartbeatBodyBuffer();
+        ByteBuffer msgB = getHeartbeatBodyBuffer();
         ByteBuffer msg = ByteBuffer.allocate(msgA.remaining() + msgB.remaining());
         msg.put(msgA);
         msg.put(msgB);
@@ -106,11 +116,11 @@ public class AMQDecoderTest extends Test
         }
     }
     
-    public void testMultiplePartialFrameDecode() throws AMQProtocolVersionException, AMQFrameDecodingException
+    public void testMultiplePartialFrameDecode() throws AMQProtocolVersionException, AMQFrameDecodingException, IOException
     {
-        ByteBuffer msgA = HeartbeatBody.FRAME.toNioByteBuffer();
-        ByteBuffer msgB = HeartbeatBody.FRAME.toNioByteBuffer();
-        ByteBuffer msgC = HeartbeatBody.FRAME.toNioByteBuffer();
+        ByteBuffer msgA = getHeartbeatBodyBuffer();
+        ByteBuffer msgB = getHeartbeatBodyBuffer();
+        ByteBuffer msgC = getHeartbeatBodyBuffer();
         
         ByteBuffer sliceA = ByteBuffer.allocate(msgA.remaining() + msgB.remaining() / 2);
         sliceA.put(msgA);

Modified: qpid/branches/QPID-2519/java/common/src/test/java/org/apache/qpid/framing/AMQShortStringTest.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/java/common/src/test/java/org/apache/qpid/framing/AMQShortStringTest.java?rev=1186990&r1=1186989&r2=1186990&view=diff
==============================================================================
--- qpid/branches/QPID-2519/java/common/src/test/java/org/apache/qpid/framing/AMQShortStringTest.java (original)
+++ qpid/branches/QPID-2519/java/common/src/test/java/org/apache/qpid/framing/AMQShortStringTest.java Thu Oct 20 18:42:46 2011
@@ -20,6 +20,10 @@
 
 package org.apache.qpid.framing;
 
+import java.io.UnsupportedEncodingException;
+import java.util.ArrayList;
+import java.util.List;
+
 import junit.framework.TestCase;
 public class AMQShortStringTest extends TestCase
 {
@@ -105,5 +109,215 @@ public class AMQShortStringTest extends 
         assertFalse(new AMQShortString("A").equals(new AMQShortString("a")));
     }
 
+    /**
+     * Test method for
+     * {@link org.apache.qpid.framing.AMQShortString#AMQShortString(byte[])}.
+     */
+    public void testCreateAMQShortStringByteArray()
+    {
+        byte[] bytes = null;
+        try
+        {
+            bytes = "test".getBytes("UTF-8");
+        }
+        catch (UnsupportedEncodingException e)
+        {
+            fail("UTF-8 encoding is not supported anymore by JVM:" + e.getMessage());
+        }
+        AMQShortString string = new AMQShortString(bytes);
+        assertEquals("constructed amq short string length differs from expected", 4, string.length());
+        assertTrue("constructed amq short string differs from expected", string.equals("test"));
+    }
+
+    /**
+     * Test method for
+     * {@link org.apache.qpid.framing.AMQShortString#AMQShortString(java.lang.String)}
+     * <p>
+     * Tests short string construction from string with length less than 255.
+     */
+    public void testCreateAMQShortStringString()
+    {
+        AMQShortString string = new AMQShortString("test");
+        assertEquals("constructed amq short string length differs from expected", 4, string.length());
+        assertTrue("constructed amq short string differs from expected", string.equals("test"));
+    }
+
+    /**
+     * Test method for
+     * {@link org.apache.qpid.framing.AMQShortString#AMQShortString(char[])}.
+     * <p>
+     * Tests short string construction from char array with length less than 255.
+     */
+    public void testCreateAMQShortStringCharArray()
+    {
+        char[] chars = "test".toCharArray();
+        AMQShortString string = new AMQShortString(chars);
+        assertEquals("constructed amq short string length differs from expected", 4, string.length());
+        assertTrue("constructed amq short string differs from expected", string.equals("test"));
+    }
+
+    /**
+     * Test method for
+     * {@link org.apache.qpid.framing.AMQShortString#AMQShortString(java.lang.CharSequence)}
+     * <p>
+     * Tests short string construction from char sequence with length less than 255.
+     */
+    public void testCreateAMQShortStringCharSequence()
+    {
+        AMQShortString string = new AMQShortString((CharSequence) "test");
+        assertEquals("constructed amq short string length differs from expected", 4, string.length());
+        assertTrue("constructed amq short string differs from expected", string.equals("test"));
+    }
+
+    /**
+     * Test method for
+     * {@link org.apache.qpid.framing.AMQShortString#AMQShortString(byte[])}.
+     * <p>
+     * Tests an attempt to create an AMQP short string from byte array with length over 255.
+     */
+    public void testCreateAMQShortStringByteArrayOver255()
+    {
+        String test = buildString('a', 256);
+        byte[] bytes = null;
+        try
+        {
+            bytes = test.getBytes("UTF-8");
+        }
+        catch (UnsupportedEncodingException e)
+        {
+            fail("UTF-8 encoding is not supported anymore by JVM:" + e.getMessage());
+        }
+        try
+        {
+            new AMQShortString(bytes);
+            fail("It should not be possible to create AMQShortString with length over 255");
+        }
+        catch (IllegalArgumentException e)
+        {
+            assertEquals("Exception message differs from expected",
+                    "Cannot create AMQShortString with number of octets over 255!", e.getMessage());
+        }
+    }
+
+    /**
+     * Test method for
+     * {@link org.apache.qpid.framing.AMQShortString#AMQShortString(java.lang.String)}
+     * <p>
+     * Tests an attempt to create an AMQP short string from string with length over 255
+     */
+    public void testCreateAMQShortStringStringOver255()
+    {
+        String test = buildString('a', 256);
+        try
+        {
+            new AMQShortString(test);
+            fail("It should not be possible to create AMQShortString with length over 255");
+        }
+        catch (IllegalArgumentException e)
+        {
+            assertEquals("Exception message differs from expected",
+                    "Cannot create AMQShortString with number of octets over 255!", e.getMessage());
+        }
+    }
+
+    /**
+     * Test method for
+     * {@link org.apache.qpid.framing.AMQShortString#AMQShortString(char[])}.
+     * <p>
+     * Tests an attempt to create an AMQP short string from char array with length over 255.
+     */
+    public void testCreateAMQShortStringCharArrayOver255()
+    {
+        String test = buildString('a', 256);
+        char[] chars = test.toCharArray();
+        try
+        {
+            new AMQShortString(chars);
+            fail("It should not be possible to create AMQShortString with length over 255");
+        }
+        catch (IllegalArgumentException e)
+        {
+            assertEquals("Exception message differs from expected",
+                    "Cannot create AMQShortString with number of octets over 255!", e.getMessage());
+        }
+    }
+
+    /**
+     * Test method for
+     * {@link org.apache.qpid.framing.AMQShortString#AMQShortString(java.lang.CharSequence)}
+     * <p>
+     * Tests an attempt to create an AMQP short string from char sequence with length over 255.
+     */
+    public void testCreateAMQShortStringCharSequenceOver255()
+    {
+        String test = buildString('a', 256);
+        try
+        {
+            new AMQShortString((CharSequence) test);
+            fail("It should not be possible to create AMQShortString with length over 255");
+        }
+        catch (IllegalArgumentException e)
+        {
+            assertEquals("Exception message differs from expected",
+                    "Cannot create AMQShortString with number of octets over 255!", e.getMessage());
+        }
+    }
+
+    /**
+     * Tests joining of short strings into a short string with length over 255.
+     */
+    public void testJoinOverflow()
+    {
+        List<AMQShortString> data = new ArrayList<AMQShortString>();
+        for (int i = 0; i < 25; i++)
+        {
+            data.add(new AMQShortString("test data!"));
+        }
+        try
+        {
+            AMQShortString.join(data, new AMQShortString(" "));
+            fail("It should not be possible to create AMQShortString with length over 255");
+        }
+        catch (IllegalArgumentException e)
+        {
+            assertEquals("Exception message differs from expected",
+                    "Cannot create AMQShortString with number of octets over 255!", e.getMessage());
+        }
+    }
+
+    /**
+     * Tests joining of short strings into a short string with length less than 255.
+     */
+    public void testJoin()
+    {
+        StringBuilder expected = new StringBuilder();
+        List<AMQShortString> data = new ArrayList<AMQShortString>();
+        data.add(new AMQShortString("test data 1"));
+        expected.append("test data 1");
+        data.add(new AMQShortString("test data 2"));
+        expected.append(" test data 2");
+        AMQShortString result = AMQShortString.join(data, new AMQShortString(" "));
+        assertEquals("join result differs from expected", expected.toString(), result.asString());
+    }
+
+    /**
+     * A helper method to generate a string with given length containing given
+     * character
+     *
+     * @param ch
+     *            char to build string with
+     * @param length
+     *            target string length
+     * @return string
+     */
+    private String buildString(char ch, int length)
+    {
+        StringBuilder sb = new StringBuilder();
+        for (int i = 0; i < length; i++)
+        {
+            sb.append(ch);
+        }
+        return sb.toString();
+    }
 
 }

Modified: qpid/branches/QPID-2519/java/common/src/test/java/org/apache/qpid/framing/BasicContentHeaderPropertiesTest.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/java/common/src/test/java/org/apache/qpid/framing/BasicContentHeaderPropertiesTest.java?rev=1186990&r1=1186989&r2=1186990&view=diff
==============================================================================
--- qpid/branches/QPID-2519/java/common/src/test/java/org/apache/qpid/framing/BasicContentHeaderPropertiesTest.java (original)
+++ qpid/branches/QPID-2519/java/common/src/test/java/org/apache/qpid/framing/BasicContentHeaderPropertiesTest.java Thu Oct 20 18:42:46 2011
@@ -20,10 +20,10 @@
  */
 package org.apache.qpid.framing;
 
-import org.apache.mina.common.ByteBuffer;
-
 import junit.framework.TestCase;
 
+import java.io.*;
+
 
 public class BasicContentHeaderPropertiesTest extends TestCase
 {
@@ -76,15 +76,14 @@ public class BasicContentHeaderPropertie
         assertEquals(99, _testProperties.getPropertyFlags());
     }
 
-    public void testWritePropertyListPayload()
+    public void testWritePropertyListPayload() throws IOException
     {
-        ByteBuffer buf = ByteBuffer.allocate(300);
-        _testProperties.writePropertyListPayload(buf);
+        _testProperties.writePropertyListPayload(new DataOutputStream(new ByteArrayOutputStream(300)));
     }
 
     public void testPopulatePropertiesFromBuffer() throws Exception
     {
-        ByteBuffer buf = ByteBuffer.allocate(300);
+        DataInputStream buf = new DataInputStream(new ByteArrayInputStream(new byte[300]));
         _testProperties.populatePropertiesFromBuffer(buf, 99, 99);
     }
 

Modified: qpid/branches/QPID-2519/java/common/src/test/java/org/apache/qpid/framing/PropertyFieldTableTest.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/java/common/src/test/java/org/apache/qpid/framing/PropertyFieldTableTest.java?rev=1186990&r1=1186989&r2=1186990&view=diff
==============================================================================
--- qpid/branches/QPID-2519/java/common/src/test/java/org/apache/qpid/framing/PropertyFieldTableTest.java (original)
+++ qpid/branches/QPID-2519/java/common/src/test/java/org/apache/qpid/framing/PropertyFieldTableTest.java Thu Oct 20 18:42:46 2011
@@ -23,14 +23,14 @@ package org.apache.qpid.framing;
 import junit.framework.Assert;
 import junit.framework.TestCase;
 
-import org.apache.mina.common.ByteBuffer;
-
 import org.apache.qpid.AMQInvalidArgumentException;
 import org.apache.qpid.AMQPInvalidClassException;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.io.*;
+
 public class PropertyFieldTableTest extends TestCase
 {
     private static final Logger _logger = LoggerFactory.getLogger(PropertyFieldTableTest.class);
@@ -441,7 +441,7 @@ public class PropertyFieldTableTest exte
     }
 
     /** Check that a nested field table parameter correctly encodes and decodes to a byte buffer. */
-    public void testNestedFieldTable()
+    public void testNestedFieldTable() throws IOException
     {
         byte[] testBytes = new byte[] { 0, 1, 2, 3, 4, 5 };
 
@@ -465,14 +465,16 @@ public class PropertyFieldTableTest exte
         outerTable.setFieldTable("innerTable", innerTable);
 
         // Write the outer table into the buffer.
-        final ByteBuffer buffer = ByteBuffer.allocate((int) outerTable.getEncodedSize() + 4);
-        outerTable.writeToBuffer(buffer);
-        buffer.flip();
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+
+        outerTable.writeToBuffer(new DataOutputStream(baos));
+
+        byte[] data = baos.toByteArray();
 
         // Extract the table back from the buffer again.
         try
         {
-            FieldTable extractedOuterTable = EncodingUtils.readFieldTable(buffer);
+            FieldTable extractedOuterTable = EncodingUtils.readFieldTable(new DataInputStream(new ByteArrayInputStream(data)));
 
             FieldTable extractedTable = extractedOuterTable.getFieldTable("innerTable");
 
@@ -567,7 +569,7 @@ public class PropertyFieldTableTest exte
         Assert.assertEquals("Hello", table.getObject("object-string"));
     }
 
-    public void testwriteBuffer()
+    public void testwriteBuffer() throws IOException
     {
         byte[] bytes = { 99, 98, 97, 96, 95 };
 
@@ -585,15 +587,17 @@ public class PropertyFieldTableTest exte
         table.setString("string", "hello");
         table.setString("null-string", null);
 
-        final ByteBuffer buffer = ByteBuffer.allocate((int) table.getEncodedSize() + 4); // FIXME XXX: Is cast a problem?
 
-        table.writeToBuffer(buffer);
+        ByteArrayOutputStream baos = new ByteArrayOutputStream((int) table.getEncodedSize() + 4);
+        table.writeToBuffer(new DataOutputStream(baos));
+
+        ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
+        DataInputStream dis = new DataInputStream(bais);
 
-        buffer.flip();
 
-        long length = buffer.getUnsignedInt();
+        long length = dis.readInt() & 0xFFFFFFFFL;
 
-        FieldTable table2 = new FieldTable(buffer, length);
+        FieldTable table2 = new FieldTable(dis, length);
 
         Assert.assertEquals((Boolean) true, table2.getBoolean("bool"));
         Assert.assertEquals((Byte) Byte.MAX_VALUE, table2.getByte("byte"));

Modified: qpid/branches/QPID-2519/java/common/src/test/java/org/apache/qpid/test/utils/QpidTestCase.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/java/common/src/test/java/org/apache/qpid/test/utils/QpidTestCase.java?rev=1186990&r1=1186989&r2=1186990&view=diff
==============================================================================
--- qpid/branches/QPID-2519/java/common/src/test/java/org/apache/qpid/test/utils/QpidTestCase.java (original)
+++ qpid/branches/QPID-2519/java/common/src/test/java/org/apache/qpid/test/utils/QpidTestCase.java Thu Oct 20 18:42:46 2011
@@ -24,17 +24,28 @@ import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileReader;
 import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
+import java.net.DatagramSocket;
+import java.net.ServerSocket;
+import java.util.*;
 
 import junit.framework.TestCase;
 import junit.framework.TestResult;
 
+import org.apache.log4j.Level;
 import org.apache.log4j.Logger;
 
+
 public class QpidTestCase extends TestCase
 {
-    protected static final Logger _logger = Logger.getLogger(QpidTestCase.class);
+    public static final String QPID_HOME = System.getProperty("QPID_HOME");
+    public static final String TEST_RESOURCES_DIR = QPID_HOME + "/../test-profiles/test_resources/";
+
+    private static final Logger _logger = Logger.getLogger(QpidTestCase.class);
+
+    private final Map<Logger, Level> _loggerLevelSetForTest = new HashMap<Logger, Level>();
+    private final Map<String, String> _propertiesSetForTest = new HashMap<String, String>();
+
+    private String _testName;
 
     /**
      * Some tests are excluded when the property test.excludes is set to true.
@@ -54,7 +65,7 @@ public class QpidTestCase extends TestCa
             String exclusionListString = System.getProperties().getProperty("test.excludelist", "");
             List<String> exclusionList = new ArrayList<String>();
 
-            for (String uri : exclusionListURIs.split("\\s+"))
+            for (String uri : exclusionListURIs.split(";\\s*"))
             {
                 File file = new File(uri);
                 if (file.exists())
@@ -76,6 +87,10 @@ public class QpidTestCase extends TestCa
                         _logger.warn("Exception when reading exclusion list", e);
                     }
                 }
+                else
+                {
+                    _logger.info("Specified exclude file does not exist: " + uri);
+                }
             }
 
             if (!exclusionListString.equals(""))
@@ -127,4 +142,187 @@ public class QpidTestCase extends TestCa
         
         return storeClass != null ? storeClass : MEMORY_STORE_CLASS_NAME ;
     }
+
+
+    public static final int MIN_PORT_NUMBER = 1;
+    public static final int MAX_PORT_NUMBER = 49151;
+
+
+    /**
+     * Gets the next available port starting at a port.
+     *
+     * @param fromPort the port to scan for availability
+     * @throws NoSuchElementException if there are no ports available
+     */
+    protected int getNextAvailable(int fromPort)
+    {
+        if ((fromPort < MIN_PORT_NUMBER) || (fromPort > MAX_PORT_NUMBER))
+        {
+            throw new IllegalArgumentException("Invalid start port: " + fromPort);
+        }
+
+        for (int i = fromPort; i <= MAX_PORT_NUMBER; i++)
+        {
+            if (available(i)) {
+                return i;
+            }
+        }
+
+        throw new NoSuchElementException("Could not find an available port above " + fromPort);
+    }
+
+    /**
+     * Checks to see if a specific port is available.
+     *
+     * @param port the port to check for availability
+     */
+    private boolean available(int port)
+    {
+        if ((port < MIN_PORT_NUMBER) || (port > MAX_PORT_NUMBER))
+        {
+            throw new IllegalArgumentException("Invalid start port: " + port);
+        }
+
+        ServerSocket ss = null;
+        DatagramSocket ds = null;
+        try
+        {
+            ss = new ServerSocket(port);
+            ss.setReuseAddress(true);
+            ds = new DatagramSocket(port);
+            ds.setReuseAddress(true);
+            return true;
+        }
+        catch (IOException e)
+        {
+        }
+        finally
+        {
+            if (ds != null)
+            {
+                ds.close();
+            }
+
+            if (ss != null)
+            {
+                try
+                {
+                    ss.close();
+                }
+                catch (IOException e)
+                {
+                    /* should not be thrown */
+                }
+            }
+        }
+
+        return false;
+    }
+
+    public int findFreePort()
+    {
+        return getNextAvailable(10000);
+    }
+
+    /**
+     * Set a System property for duration of this test only. The tearDown will
+     * guarantee to reset the property to its previous value after the test
+     * completes.
+     *
+     * @param property The property to set
+     * @param value the value to set it to, if null, the property will be cleared
+     */
+    protected void setTestSystemProperty(final String property, final String value)
+    {
+        if (!_propertiesSetForTest.containsKey(property))
+        {
+            // Record the current value so we can revert it later.
+            _propertiesSetForTest.put(property, System.getProperty(property));
+        }
+
+        if (value == null)
+        {
+            System.clearProperty(property);
+        }
+        else
+        {
+            System.setProperty(property, value);
+        }
+    }
+
+    /**
+     * Restore the System property values that were set by this test run.
+     */
+    protected void revertTestSystemProperties()
+    {
+        if(!_propertiesSetForTest.isEmpty())
+        {
+            _logger.debug("reverting " + _propertiesSetForTest.size() + " test properties");
+            for (String key : _propertiesSetForTest.keySet())
+            {
+                String value = _propertiesSetForTest.get(key);
+                if (value != null)
+                {
+                    System.setProperty(key, value);
+                }
+                else
+                {
+                    System.clearProperty(key);
+                }
+            }
+
+            _propertiesSetForTest.clear();
+        }
+    }
+
+    /**
+     * Adjust the VMs Log4j Settings just for this test run
+     *
+     * @param logger the logger to change
+     * @param level the level to set
+     */
+    protected void setLoggerLevel(Logger logger, Level level)
+    {
+        assertNotNull("Cannot set level of null logger", logger);
+        assertNotNull("Cannot set Logger("+logger.getName()+") to null level.",level);
+
+        if (!_loggerLevelSetForTest.containsKey(logger))
+        {
+            // Record the current value so we can revert it later.
+            _loggerLevelSetForTest.put(logger, logger.getLevel());
+        }
+
+        logger.setLevel(level);
+    }
+
+    /**
+     * Restore the logging levels defined by this test.
+     */
+    protected void revertLoggingLevels()
+    {
+        for (Logger logger : _loggerLevelSetForTest.keySet())
+        {
+            logger.setLevel(_loggerLevelSetForTest.get(logger));
+        }
+
+        _loggerLevelSetForTest.clear();
+    }
+
+    protected void tearDown() throws java.lang.Exception
+    {
+        _logger.info("========== tearDown " + _testName + " ==========");
+        revertTestSystemProperties();
+        revertLoggingLevels();
+    }
+
+    protected void setUp() throws Exception
+    {
+        _testName = getClass().getSimpleName() + "." + getName();
+        _logger.info("========== start " + _testName + " ==========");
+    }
+
+    protected String getTestName()
+    {
+        return _testName;
+    }
 }

Modified: qpid/branches/QPID-2519/java/common/src/test/java/org/apache/qpid/transport/ConnectionTest.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/java/common/src/test/java/org/apache/qpid/transport/ConnectionTest.java?rev=1186990&r1=1186989&r2=1186990&view=diff
==============================================================================
--- qpid/branches/QPID-2519/java/common/src/test/java/org/apache/qpid/transport/ConnectionTest.java (original)
+++ qpid/branches/QPID-2519/java/common/src/test/java/org/apache/qpid/transport/ConnectionTest.java Thu Oct 20 18:42:46 2011
@@ -20,32 +20,27 @@
  */
 package org.apache.qpid.transport;
 
-import org.apache.mina.util.AvailablePortFinder;
-
-import org.apache.qpid.test.utils.QpidTestCase;
-import org.apache.qpid.transport.network.ConnectionBinding;
-import org.apache.qpid.transport.network.io.IoAcceptor;
-import org.apache.qpid.transport.util.Logger;
-import org.apache.qpid.transport.util.Waiter;
+import static org.apache.qpid.transport.Option.EXPECTED;
+import static org.apache.qpid.transport.Option.NONE;
+import static org.apache.qpid.transport.Option.SYNC;
 
+import java.io.IOException;
 import java.util.ArrayList;
-import java.util.List;
 import java.util.Collections;
+import java.util.List;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
-import java.io.IOException;
 
-import static org.apache.qpid.transport.Option.*;
+import org.apache.qpid.test.utils.QpidTestCase;
+import org.apache.qpid.transport.network.ConnectionBinding;
+import org.apache.qpid.transport.network.io.IoAcceptor;
+import org.apache.qpid.transport.util.Waiter;
 
 /**
  * ConnectionTest
  */
-
 public class ConnectionTest extends QpidTestCase implements SessionListener
 {
-
-    private static final Logger log = Logger.get(ConnectionTest.class);
-
     private int port;
     private volatile boolean queue = false;
     private List<MessageTransfer> messages = new ArrayList<MessageTransfer>();
@@ -58,7 +53,7 @@ public class ConnectionTest extends Qpid
     {
         super.setUp();
 
-        port = AvailablePortFinder.getNextAvailable(12000);
+        port = findFreePort();
     }
 
     protected void tearDown() throws Exception
@@ -158,7 +153,8 @@ public class ConnectionTest extends Qpid
 
     private Connection connect(final CountDownLatch closed)
     {
-        Connection conn = new Connection();
+        final Connection conn = new Connection();
+        conn.setConnectionDelegate(new ClientDelegate(new ConnectionSettings()));
         conn.addConnectionListener(new ConnectionListener()
         {
             public void opened(Connection conn) {}
@@ -182,9 +178,9 @@ public class ConnectionTest extends Qpid
     {
         // Force os.name to be windows to exercise code in IoReceiver
         // that looks for the value of os.name
-        System.setProperty("os.name","windows");
+        setTestSystemProperty("os.name","windows");
 
-        // Start server as 0-9 to froce a ProtocolVersionException
+        // Start server as 0-9 to force a ProtocolVersionException
         startServer(new ProtocolHeader(1, 0, 9));
         
         CountDownLatch closed = new CountDownLatch(1);
@@ -219,7 +215,7 @@ public class ConnectionTest extends Qpid
                 conn.send(protocolHeader);
                 List<Object> utf8 = new ArrayList<Object>();
                 utf8.add("utf8");
-                conn.connectionStart(null, Collections.EMPTY_LIST, utf8);
+                conn.connectionStart(null, Collections.emptyList(), utf8);
             }
 
             @Override
@@ -270,40 +266,7 @@ public class ConnectionTest extends Qpid
         }
     }
 
-    class FailoverConnectionListener implements ConnectionListener
-    {
-        public void opened(Connection conn) {}
-
-        public void exception(Connection conn, ConnectionException e)
-        {
-            throw e;
-        }
-
-        public void closed(Connection conn)
-        {
-            queue = true;
-            conn.connect("localhost", port, null, "guest", "guest");
-            conn.resume();
-        }
-    }
-
-    class TestSessionListener implements SessionListener
-    {
-        public void opened(Session s) {}
-        public void resumed(Session s) {}
-        public void exception(Session s, SessionException e) {}
-        public void message(Session s, MessageTransfer xfr)
-        {
-            synchronized (incoming)
-            {
-                incoming.add(xfr);
-                incoming.notifyAll();
-            }
 
-            s.processed(xfr);
-        }
-        public void closed(Session s) {}
-    }
 
     public void testResumeNonemptyReplayBuffer() throws Exception
     {
@@ -311,6 +274,7 @@ public class ConnectionTest extends Qpid
 
         Connection conn = new Connection();
         conn.addConnectionListener(new FailoverConnectionListener());
+        conn.setConnectionDelegate(new ClientDelegate(new ConnectionSettings()));
         conn.connect("localhost", port, null, "guest", "guest");
         Session ssn = conn.createSession(1);
         ssn.setSessionListener(new TestSessionListener());
@@ -365,6 +329,7 @@ public class ConnectionTest extends Qpid
         startServer();
 
         Connection conn = new Connection();
+        conn.setConnectionDelegate(new ClientDelegate(new ConnectionSettings()));
         conn.addConnectionListener(new FailoverConnectionListener());
         conn.connect("localhost", port, null, "guest", "guest");
         Session ssn = conn.createSession(1);
@@ -387,6 +352,7 @@ public class ConnectionTest extends Qpid
         startServer();
 
         Connection conn = new Connection();
+        conn.setConnectionDelegate(new ClientDelegate(new ConnectionSettings()));
         conn.connect("localhost", port, null, "guest", "guest");
         Session ssn = conn.createSession();
         ssn.sessionFlush(EXPECTED);
@@ -400,6 +366,7 @@ public class ConnectionTest extends Qpid
     {
         startServer();
         Connection conn = new Connection();
+        conn.setConnectionDelegate(new ClientDelegate(new ConnectionSettings()));
         conn.connect("localhost", port, null, "guest", "guest");
         conn.connectionHeartbeat();
         conn.close();
@@ -410,6 +377,7 @@ public class ConnectionTest extends Qpid
         startServer();
 
         Connection conn = new Connection();
+        conn.setConnectionDelegate(new ClientDelegate(new ConnectionSettings()));
         conn.connect("localhost", port, null, "guest", "guest");
         Session ssn = conn.createSession();
         send(ssn, "EXCP 0");
@@ -429,6 +397,7 @@ public class ConnectionTest extends Qpid
         startServer();
 
         Connection conn = new Connection();
+        conn.setConnectionDelegate(new ClientDelegate(new ConnectionSettings()));
         conn.connect("localhost", port, null, "guest", "guest");
         Session ssn = conn.createSession();
         send(ssn, "EXCP 0", true);
@@ -443,4 +412,38 @@ public class ConnectionTest extends Qpid
         }
     }
 
+    class FailoverConnectionListener implements ConnectionListener
+    {
+        public void opened(Connection conn) {}
+
+        public void exception(Connection conn, ConnectionException e)
+        {
+            throw e;
+        }
+
+        public void closed(Connection conn)
+        {
+            queue = true;
+            conn.connect("localhost", port, null, "guest", "guest");
+            conn.resume();
+        }
+    }
+
+    class TestSessionListener implements SessionListener
+    {
+        public void opened(Session s) {}
+        public void resumed(Session s) {}
+        public void exception(Session s, SessionException e) {}
+        public void message(Session s, MessageTransfer xfr)
+        {
+            synchronized (incoming)
+            {
+                incoming.add(xfr);
+                incoming.notifyAll();
+            }
+
+            s.processed(xfr);
+        }
+        public void closed(Session s) {}
+    }
 }

Modified: qpid/branches/QPID-2519/java/common/src/test/java/org/apache/qpid/util/FileUtilsTest.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/java/common/src/test/java/org/apache/qpid/util/FileUtilsTest.java?rev=1186990&r1=1186989&r2=1186990&view=diff
==============================================================================
--- qpid/branches/QPID-2519/java/common/src/test/java/org/apache/qpid/util/FileUtilsTest.java (original)
+++ qpid/branches/QPID-2519/java/common/src/test/java/org/apache/qpid/util/FileUtilsTest.java Thu Oct 20 18:42:46 2011
@@ -27,7 +27,9 @@ import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.FileWriter;
 import java.io.IOException;
+import java.io.InputStream;
 import java.util.List;
+import java.util.Properties;
 
 public class FileUtilsTest extends TestCase
 {
@@ -182,6 +184,20 @@ public class FileUtilsTest extends TestC
         }
     }
 
+
+    /**
+     * Helper method to create a temporary file with test content.
+     *
+     * @param test_data The data to store in the file
+     *
+     * @return The File reference
+     */
+    private File createTestFileInTmpDir(final String testData) throws Exception 
+    {
+        final File tmpFile = File.createTempFile("test", "tmp");
+        
+        return createTestFile(tmpFile.getCanonicalPath(), testData);
+    }
     /**
      * Helper method to create a test file with a string content
      *
@@ -302,8 +318,74 @@ public class FileUtilsTest extends TestC
             // expected path
         }
     }
+    
+    /**
+     * Tests that openFileOrDefaultResource can open a file on the filesystem.
+     *
+     */
+    public void testOpenFileOrDefaultResourceOpensFileOnFileSystem() throws Exception
+    {
+        final File testFile = createTestFileInTmpDir("src=tmpfile");
+        final String filenameOnFilesystem = testFile.getCanonicalPath();
+        final String defaultResource = "org/apache/qpid/util/default.properties";
+
+        
+        final InputStream is = FileUtils.openFileOrDefaultResource(filenameOnFilesystem, defaultResource, this.getClass().getClassLoader());
+        assertNotNull("Stream must not be null", is);
+        final Properties p = new Properties();
+        p.load(is);
+        assertEquals("tmpfile", p.getProperty("src"));
+    }
+
+    /**
+     * Tests that openFileOrDefaultResource can open a file on the classpath.
+     *
+     */
+    public void testOpenFileOrDefaultResourceOpensFileOnClasspath() throws Exception
+    {
+        final String mydefaultsResource = "org/apache/qpid/util/mydefaults.properties";
+        final String defaultResource = "org/apache/qpid/util/default.properties";
+
+        
+        final InputStream is = FileUtils.openFileOrDefaultResource(mydefaultsResource, defaultResource, this.getClass().getClassLoader());
+        assertNotNull("Stream must not be null", is);
+        final Properties p = new Properties();
+        p.load(is);
+        assertEquals("mydefaults", p.getProperty("src"));
+    }
 
     /**
+     * Tests that openFileOrDefaultResource returns the default resource when file cannot be found.
+     */
+    public void testOpenFileOrDefaultResourceOpensDefaultResource() throws Exception
+    {
+        final File fileThatDoesNotExist = new File("/does/not/exist.properties");
+        assertFalse("Test must not exist", fileThatDoesNotExist.exists());
+        
+        final String defaultResource = "org/apache/qpid/util/default.properties";
+        
+        final InputStream is = FileUtils.openFileOrDefaultResource(fileThatDoesNotExist.getCanonicalPath(), defaultResource, this.getClass().getClassLoader());
+        assertNotNull("Stream must not be null", is);
+        Properties p = new Properties();
+        p.load(is);
+        assertEquals("default.properties", p.getProperty("src"));
+    }
+    
+    /**
+     * Tests that openFileOrDefaultResource returns null if neither the file nor
+     * the default resource can be found..
+     */
+    public void testOpenFileOrDefaultResourceReturnsNullWhenNeitherCanBeFound() throws Exception
+    {
+
+        final String mydefaultsResource = "org/apache/qpid/util/doesnotexisteiether.properties";        
+        final String defaultResource = "org/apache/qpid/util/doesnotexisteiether.properties";
+        
+        final InputStream is = FileUtils.openFileOrDefaultResource(mydefaultsResource, defaultResource, this.getClass().getClassLoader());
+        assertNull("Stream must  be null", is);
+    }
+    
+    /**
      * Given two lists of File arrays ensure they are the same length and all entries in Before are in After
      *
      * @param filesBefore File[]

Modified: qpid/branches/QPID-2519/java/common/templates/method/version/MethodBodyClass.vm
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/java/common/templates/method/version/MethodBodyClass.vm?rev=1186990&r1=1186989&r2=1186990&view=diff
==============================================================================
--- qpid/branches/QPID-2519/java/common/templates/method/version/MethodBodyClass.vm (original)
+++ qpid/branches/QPID-2519/java/common/templates/method/version/MethodBodyClass.vm Thu Oct 20 18:42:46 2011
@@ -46,9 +46,11 @@
  
 package org.apache.qpid.framing.amqp_$version.getMajor()_$version.getMinor();
 
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
 import java.util.HashMap;
 
-import org.apache.mina.common.ByteBuffer;
 import org.apache.qpid.framing.*;
 import org.apache.qpid.AMQException;
 
@@ -56,7 +58,7 @@ public class ${javaClassName} extends AM
 {
     private static final AMQMethodBodyInstanceFactory FACTORY_INSTANCE = new AMQMethodBodyInstanceFactory()
     {
-        public AMQMethodBody newInstance(ByteBuffer in, long size) throws AMQFrameDecodingException
+        public AMQMethodBody newInstance(DataInputStream in, long size) throws AMQFrameDecodingException, IOException
         {
             return new ${javaClassName}(in);
         }
@@ -84,7 +86,7 @@ public class ${javaClassName} extends AM
     
     // Constructor
 
-    public ${javaClassName}(ByteBuffer buffer) throws AMQFrameDecodingException
+    public ${javaClassName}(DataInputStream buffer) throws AMQFrameDecodingException, IOException
     {
 #foreach( $field in $method.ConsolidatedFields )
         _$field.Name = read$field.getEncodingType()( buffer );
@@ -169,7 +171,7 @@ public class ${javaClassName} extends AM
         return size;        
     }
 
-    public void writeMethodPayload(ByteBuffer buffer)
+    public void writeMethodPayload(DataOutputStream buffer) throws IOException
     {
 #foreach( $field in $method.ConsolidatedFields )
         write$field.getEncodingType()( buffer, _$field.Name );

Modified: qpid/branches/QPID-2519/java/common/templates/model/MethodRegistryClass.vm
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/java/common/templates/model/MethodRegistryClass.vm?rev=1186990&r1=1186989&r2=1186990&view=diff
==============================================================================
--- qpid/branches/QPID-2519/java/common/templates/model/MethodRegistryClass.vm (original)
+++ qpid/branches/QPID-2519/java/common/templates/model/MethodRegistryClass.vm Thu Oct 20 18:42:46 2011
@@ -30,7 +30,8 @@
  
 package org.apache.qpid.framing;
 
-import org.apache.mina.common.ByteBuffer;
+import java.io.DataInputStream;
+import java.io.IOException;
 
 import org.apache.qpid.framing.abstraction.ProtocolVersionMethodConverter;
 
@@ -53,8 +54,8 @@ public abstract class MethodRegistry
 #end
  			
 			
-    public abstract AMQMethodBody convertToBody(ByteBuffer in, long size)
-        throws AMQFrameDecodingException;
+    public abstract AMQMethodBody convertToBody(DataInputStream in, long size)
+        throws AMQFrameDecodingException, IOException;
 
     public abstract int getMaxClassId();
 
@@ -101,4 +102,4 @@ public abstract class MethodRegistry
 
 	public abstract ProtocolVersionMethodConverter getProtocolVersionMethodConverter();
 	
-}
\ No newline at end of file
+}

Modified: qpid/branches/QPID-2519/java/common/templates/model/version/MethodRegistryClass.vm
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/java/common/templates/model/version/MethodRegistryClass.vm?rev=1186990&r1=1186989&r2=1186990&view=diff
==============================================================================
--- qpid/branches/QPID-2519/java/common/templates/model/version/MethodRegistryClass.vm (original)
+++ qpid/branches/QPID-2519/java/common/templates/model/version/MethodRegistryClass.vm Thu Oct 20 18:42:46 2011
@@ -35,32 +35,33 @@ import org.apache.qpid.protocol.AMQConst
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import org.apache.mina.common.ByteBuffer;
+import java.io.DataInputStream;
+import java.io.IOException;
 
 import org.apache.qpid.framing.abstraction.ProtocolVersionMethodConverter;
 
 
 public class MethodRegistry_$version.getMajor()_$version.getMinor() extends MethodRegistry
 {
-	
+    
     private static final Logger _log = LoggerFactory.getLogger(MethodRegistry.class);
 
-	private ProtocolVersionMethodConverter _protocolVersionConverter = new MethodConverter_$version.getMajor()_$version.getMinor()();
-	
-#set( $specificModel = $model.asSingleVersionModel() )	
-	
-	
-#set( $maxClassId = $specificModel.getMaximumClassId()+1 )	
-	private final AMQMethodBodyInstanceFactory[][] _factories = new AMQMethodBodyInstanceFactory[$maxClassId][];
-
-	public MethodRegistry_$version.getMajor()_$version.getMinor()()
-	{
-	    this(new ProtocolVersion((byte)$version.getMajor(),(byte)$version.getMinor()));
-    }
-	
-	public MethodRegistry_$version.getMajor()_$version.getMinor()(ProtocolVersion pv)
-	{
-        super(pv);	
+    private ProtocolVersionMethodConverter _protocolVersionConverter = new MethodConverter_$version.getMajor()_$version.getMinor()();
+    
+#set( $specificModel = $model.asSingleVersionModel() )    
+    
+    
+#set( $maxClassId = $specificModel.getMaximumClassId()+1 )    
+    private final AMQMethodBodyInstanceFactory[][] _factories = new AMQMethodBodyInstanceFactory[$maxClassId][];
+
+    public MethodRegistry_$version.getMajor()_$version.getMinor()()
+    {
+        this(new ProtocolVersion((byte)$version.getMajor(),(byte)$version.getMinor()));
+    }
+    
+    public MethodRegistry_$version.getMajor()_$version.getMinor()(ProtocolVersion pv)
+    {
+        super(pv);    
 #foreach( $amqpClass in $specificModel.getClassList() )
 #set( $amqpClassNameFirstChar = $amqpClass.getName().substring(0,1) )
 #set( $amqpClassNameFirstCharU = $amqpClassNameFirstChar.toUpperCase() )
@@ -68,30 +69,30 @@ public class MethodRegistry_$version.get
 
 
 
-		// Register method body instance factories for the $amqpClassNameUpperCamel class.
+        // Register method body instance factories for the $amqpClassNameUpperCamel class.
 
-#set( $maxMethodId = $amqpClass.getMaximumMethodId()+1 )		
+#set( $maxMethodId = $amqpClass.getMaximumMethodId()+1 )        
         _factories[$amqpClass.getClassId()] = new AMQMethodBodyInstanceFactory[$maxMethodId];
-		
+        
 #foreach( $amqpMethod in $amqpClass.getMethodList() )
 #set( $amqpMethodNameFirstChar = $amqpMethod.getName().substring(0,1) )
 #set( $amqpMethodNameFirstCharU = $amqpMethodNameFirstChar.toUpperCase() )
 #set( $amqpMethodNameUpperCamel = "$amqpMethodNameFirstCharU$amqpMethod.getName().substring(1)" )
         _factories[$amqpClass.getClassId()][$amqpMethod.getMethodId()] = ${amqpClassNameUpperCamel}${amqpMethodNameUpperCamel}BodyImpl.getFactory(); 
-#end		
-		
+#end        
+        
 #end
-		
-		
-	}
+        
+        
+    }
 
 
-    public AMQMethodBody convertToBody(ByteBuffer in, long size)
-        throws AMQFrameDecodingException
+    public AMQMethodBody convertToBody(DataInputStream in, long size)
+        throws AMQFrameDecodingException, IOException
     {
-	    int classId = in.getUnsignedShort();
-		int methodId = in.getUnsignedShort();
-	
+        int classId = in.readUnsignedShort();
+        int methodId = in.readUnsignedShort();
+    
         AMQMethodBodyInstanceFactory bodyFactory;
         try
         {
@@ -137,15 +138,15 @@ public class MethodRegistry_$version.get
 
 
     public int getMaxClassId()
-	{
-	    return $specificModel.getMaximumClassId();
-	}
+    {
+        return $specificModel.getMaximumClassId();
+    }
     
     public int getMaxMethodId(int classId)
-	{
-        return _factories[classId].length - 1;	
-	}
-	
+    {
+        return _factories[classId].length - 1;    
+    }
+    
 
 
 #foreach( $amqpClass in $specificModel.getClassList() )
@@ -153,12 +154,12 @@ public class MethodRegistry_$version.get
 #set( $amqpClassNameFirstCharU = $amqpClassNameFirstChar.toUpperCase() )
 #set( $amqpClassNameUpperCamel = "$amqpClassNameFirstCharU$amqpClass.getName().substring(1)" )
 
-		
+        
 #foreach( $amqpMethod in $amqpClass.getMethodList() )
 #set( $amqpMethodNameFirstChar = $amqpMethod.getName().substring(0,1) )
 #set( $amqpMethodNameFirstCharU = $amqpMethodNameFirstChar.toUpperCase() )
 #set( $amqpMethodNameUpperCamel = "$amqpMethodNameFirstCharU$amqpMethod.getName().substring(1)" )
-    public ${amqpClassNameUpperCamel}${amqpMethodNameUpperCamel}Body create${amqpClassNameUpperCamel}${amqpMethodNameUpperCamel}Body(	
+    public ${amqpClassNameUpperCamel}${amqpMethodNameUpperCamel}Body create${amqpClassNameUpperCamel}${amqpMethodNameUpperCamel}Body(    
 #foreach( $field in $amqpMethod.FieldList )
 #if( $velocityCount == $amqpMethod.getFieldList().size() )
                                 final $field.NativeType $field.Name
@@ -166,9 +167,9 @@ public class MethodRegistry_$version.get
                                 final $field.NativeType $field.Name,
 #end
 #end                            
-	                        )
+                            )
     {
-	    return new ${amqpClassNameUpperCamel}${amqpMethodNameUpperCamel}BodyImpl(
+        return new ${amqpClassNameUpperCamel}${amqpMethodNameUpperCamel}BodyImpl(
 #foreach( $field in $amqpMethod.FieldList )
 #if( $velocityCount == $amqpMethod.getFieldList().size() )
                                 $field.Name
@@ -176,18 +177,18 @@ public class MethodRegistry_$version.get
                                 $field.Name,
 #end
 #end                            
-		                    );
+                            );
     }
     
-#end		
-		
+#end        
+        
 #end
-		
-	
+        
+    
     public ProtocolVersionMethodConverter getProtocolVersionMethodConverter()
     {
         return _protocolVersionConverter;
-    }	
+    }    
 
     
 }

Propchange: qpid/branches/QPID-2519/java/integrationtests/src/resources/sustained-log4j.xml
            ('svn:mergeinfo' removed)

Propchange: qpid/branches/QPID-2519/java/lib/bdbstore/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Thu Oct 20 18:42:46 2011
@@ -0,0 +1 @@
+*

Propchange: qpid/branches/QPID-2519/java/lib/ivy/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Thu Oct 20 18:42:46 2011
@@ -0,0 +1 @@
+*

Modified: qpid/branches/QPID-2519/java/management/common/src/main/java/management-common.bnd
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/java/management/common/src/main/java/management-common.bnd?rev=1186990&r1=1186989&r2=1186990&view=diff
==============================================================================
--- qpid/branches/QPID-2519/java/management/common/src/main/java/management-common.bnd (original)
+++ qpid/branches/QPID-2519/java/management/common/src/main/java/management-common.bnd Thu Oct 20 18:42:46 2011
@@ -17,7 +17,7 @@
 # under the License.
 #
 
-ver: 0.9.0
+ver: 0.13.0
 
 Bundle-SymbolicName: qpid-management-common
 Bundle-Version: ${ver}

Propchange: qpid/branches/QPID-2519/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/ConfigurationManagement.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Oct 20 18:42:46 2011
@@ -1,3 +1,5 @@
 /qpid/branches/java-broker-0-10/qpid/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/ConfigurationManagement.java:795950-829653
 /qpid/branches/java-network-refactor/qpid/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/ConfigurationManagement.java:805429-821809
-/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/management/ConfigurationManagement.java:742626,743015,743028-743029,743304,743306,743311,743357,744113,747363,747367,747369-747370,747376,747783,747868-747870,747875,748561,748591,748641,748680,748686,749149,749282,749285,749315,749340,749572,753219-753220,753253,754934,754958,755256,757258,757270,758730,759097,760919,761721,762365,762992,763959,764026,764109,764140,764790
+/qpid/branches/qpid-2935/qpid/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/ConfigurationManagement.java:1061302-1072333
+/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/management/ConfigurationManagement.java:742626,743015,743028-743029,743304,743306,743311,743357,744113,747363,747367,747369-747370,747376,747783,747868-747870,747875,748591,748641,748680,748686,749149,749282,749285,749315,749340,749572,753219-753220,753253,754934,754958,755256,757258,757270,758730,759097,760919,761721,762365,762992,763959,764026,764109,764140,764790
+/qpid/trunk/qpid/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/ConfigurationManagement.java:1072051-1185907

Propchange: qpid/branches/QPID-2519/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/LoggingManagement.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Oct 20 18:42:46 2011
@@ -1,3 +1,5 @@
 /qpid/branches/java-broker-0-10/qpid/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/LoggingManagement.java:795950-829653
 /qpid/branches/java-network-refactor/qpid/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/LoggingManagement.java:805429-821809
-/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/logging/management/LoggingManagement.java:742626,743015,743028-743029,743304,743306,743311,743357,744113,747363,747367,747369-747370,747376,747783,747868-747870,747875,748561,748591,748641,748680,748686,749149,749282,749285,749315,749340,749572,753219-753220,753253,754934,754958,755256,757258,757270,758730,759097,760919,761721,762365,762992,763959,764026,764109,764140,764790
+/qpid/branches/qpid-2935/qpid/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/LoggingManagement.java:1061302-1072333
+/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/logging/management/LoggingManagement.java:742626,743015,743028-743029,743304,743306,743311,743357,744113,747363,747367,747369-747370,747376,747783,747868-747869,747875,748561,748591,748641,748680,748686,749149,749282,749285,749315,749340,749572,753219-753220,753253,754934,754958,755256,757258,757270,758730,759097,760919,761721,762365,762992,763959,764026,764109,764140,764790
+/qpid/trunk/qpid/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/LoggingManagement.java:1072051-1185907

Modified: qpid/branches/QPID-2519/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/ManagedBroker.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/ManagedBroker.java?rev=1186990&r1=1186989&r2=1186990&view=diff
==============================================================================
--- qpid/branches/QPID-2519/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/ManagedBroker.java (original)
+++ qpid/branches/QPID-2519/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/ManagedBroker.java Thu Oct 20 18:42:46 2011
@@ -36,8 +36,8 @@ import org.apache.qpid.management.common
  * The ManagedBroker is the management interface to expose management
  * features of the Broker.
  *
- * @author   Bhupendra Bhardwaj
- * @version  0.1
+ * @version Qpid JMX API 2.2
+ * @since Qpid JMX API 1.3
  */
 public interface ManagedBroker
 {
@@ -131,4 +131,118 @@ public interface ManagedBroker
                          impact= MBeanOperationInfo.ACTION)
     void deleteQueue(@MBeanOperationParameter(name= ManagedQueue.TYPE, description="Queue Name")String queueName)
             throws IOException, JMException, MBeanException;
+    
+    /**
+     * Resets all message and data statistics for the virtual host.
+     * 
+     * @since Qpid JMX API 2.2
+     */
+    @MBeanOperation(name="resetStatistics",
+                    description="Resets all message and data statistics for the virtual host",
+                    impact= MBeanOperationInfo.ACTION)
+    void resetStatistics() throws Exception;
+
+    /**
+     * Peak rate of messages delivered per second for the virtual host.
+     * 
+     * @since Qpid JMX API 2.2
+     */
+    @MBeanAttribute(name="PeakMessageDeliveryRate", description=TYPE + " Peak Message Delivery Rate")
+    double getPeakMessageDeliveryRate();
+
+    /**
+     * Peak rate of bytes delivered per second for the virtual host.
+     * 
+     * @since Qpid JMX API 2.2
+     */
+    @MBeanAttribute(name="PeakDataDeliveryRate", description=TYPE + " Peak Data Delivery Rate")
+    double getPeakDataDeliveryRate();
+
+    /**
+     * Rate of messages delivered per second for the virtual host.
+     * 
+     * @since Qpid JMX API 2.2
+     */
+    @MBeanAttribute(name="MessageDeliveryRate", description=TYPE + " Message Delivery Rate")
+    double getMessageDeliveryRate();
+
+    /**
+     * Rate of bytes delivered per second for the virtual host.
+     * 
+     * @since Qpid JMX API 2.2
+     */
+    @MBeanAttribute(name="DataDeliveryRate", description=TYPE + " Data Delivery Rate")
+    double getDataDeliveryRate();
+
+    /**
+     * Total count of messages delivered for the virtual host.
+     * 
+     * @since Qpid JMX API 2.2
+     */
+    @MBeanAttribute(name="TotalMessagesDelivered", description=TYPE + " Total Messages Delivered")
+    long getTotalMessagesDelivered();
+
+    /**
+     * Total count of bytes for the virtual host.
+     * 
+     * @since Qpid JMX API 2.2
+     */
+    @MBeanAttribute(name="TotalDataDelivered", description=TYPE + " Total Data Delivered")
+    long getTotalDataDelivered();
+
+    /**
+     * Peak rate of messages received per second for the virtual host.
+     * 
+     * @since Qpid JMX API 2.2
+     */
+    @MBeanAttribute(name="PeakMessageReceiptRate", description=TYPE + " Peak Message Receipt Rate")
+    double getPeakMessageReceiptRate();
+
+    /**
+     * Peak rate of bytes received per second for the virtual host.
+     * 
+     * @since Qpid JMX API 2.2
+     */
+    @MBeanAttribute(name="PeakDataReceiptRate", description=TYPE + " Peak Data Receipt Rate")
+    double getPeakDataReceiptRate();
+
+    /**
+     * Rate of messages received per second for the virtual host.
+     * 
+     * @since Qpid JMX API 2.2
+     */
+    @MBeanAttribute(name="MessageReceiptRate", description=TYPE + " Message Receipt Rate")
+    double getMessageReceiptRate();
+
+    /**
+     * Rate of bytes received per second for the virtual host.
+     * 
+     * @since Qpid JMX API 2.2
+     */
+    @MBeanAttribute(name="DataReceiptRate", description=TYPE + " Data Receipt Rate")
+    double getDataReceiptRate();
+
+    /**
+     * Total count of messages received for the virtual host.
+     * 
+     * @since Qpid JMX API 2.2
+     */
+    @MBeanAttribute(name="TotalMessagesReceived", description=TYPE + " Total Messages Received")
+    long getTotalMessagesReceived();
+
+    /**
+     * Total count of bytes received for the virtual host.
+     * 
+     * @since Qpid JMX API 2.2
+     */
+    @MBeanAttribute(name="TotalDataReceived", description=TYPE + " Total Data Received")
+    long getTotalDataReceived();
+
+    /**
+     * Is statistics collection enabled for this connection.
+     * 
+     * @since Qpid JMX API 2.2
+     */
+    @MBeanAttribute(name="StatisticsEnabled", description=TYPE + " Statistics Enabled")
+    boolean isStatisticsEnabled();
 }

Propchange: qpid/branches/QPID-2519/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/ManagedBroker.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Oct 20 18:42:46 2011
@@ -1,4 +1,6 @@
 /qpid/branches/0.5-release/qpid/java/broker/src/main/java/org/apache/qpid/server/management/ManagedBroker.java:757268
 /qpid/branches/java-broker-0-10/qpid/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/ManagedBroker.java:795950-829653
 /qpid/branches/java-network-refactor/qpid/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/ManagedBroker.java:805429-821809
+/qpid/branches/qpid-2935/qpid/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/ManagedBroker.java:1061302-1072333
 /qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/management/ManagedBroker.java:753219-753220,753253,758730,759097,760919,761721,762365,762992,763959,764026,764109,764140,764790
+/qpid/trunk/qpid/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/ManagedBroker.java:1072051-1185907



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