You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by kw...@apache.org on 2014/07/20 16:39:36 UTC

svn commit: r1612097 - in /qpid/trunk/qpid/java: client/src/main/java/org/apache/qpid/client/ client/src/main/java/org/apache/qpid/client/message/ client/src/test/java/org/apache/qpid/client/ client/src/test/java/org/apache/qpid/test/unit/client/connec...

Author: kwall
Date: Sun Jul 20 14:39:35 2014
New Revision: 1612097

URL: http://svn.apache.org/r1612097
Log:
QPID-2969: Make AMQConnectionFactory and AMQDestination (and subclasses) serializable

Modified:
    qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQAnyDestination.java
    qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQBrokerDetails.java
    qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnectionFactory.java
    qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnectionURL.java
    qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQDestination.java
    qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQHeadersExchange.java
    qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQQueue.java
    qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQTemporaryQueue.java
    qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQTemporaryTopic.java
    qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQTopic.java
    qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQUndefinedDestination.java
    qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/message/AMQMessageDelegate_0_8.java
    qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/client/AMQConnectionFactoryTest.java
    qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/client/AMQDestinationTest.java
    qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/client/connectionurl/ConnectionURLTest.java
    qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/messaging/Address.java
    qpid/trunk/qpid/java/jca/src/main/java/org/apache/qpid/ra/admin/QpidQueueImpl.java
    qpid/trunk/qpid/java/jca/src/main/java/org/apache/qpid/ra/admin/QpidTopicImpl.java

Modified: qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQAnyDestination.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQAnyDestination.java?rev=1612097&r1=1612096&r2=1612097&view=diff
==============================================================================
--- qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQAnyDestination.java (original)
+++ qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQAnyDestination.java Sun Jul 20 14:39:35 2014
@@ -40,6 +40,8 @@ import java.net.URISyntaxException;
  */
 public class AMQAnyDestination extends AMQDestination implements Queue, Topic
 {
+    private static final long serialVersionUID = 2853054849716163231L;
+
     protected AMQAnyDestination()
     {
         super();

Modified: qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQBrokerDetails.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQBrokerDetails.java?rev=1612097&r1=1612096&r2=1612097&view=diff
==============================================================================
--- qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQBrokerDetails.java (original)
+++ qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQBrokerDetails.java Sun Jul 20 14:39:35 2014
@@ -25,13 +25,16 @@ import org.apache.qpid.transport.Connect
 import org.apache.qpid.url.URLHelper;
 import org.apache.qpid.url.URLSyntaxException;
 
+import java.io.Serializable;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.HashMap;
 import java.util.Map;
 
-public class AMQBrokerDetails implements BrokerDetails
+public class AMQBrokerDetails implements BrokerDetails, Serializable
 {
+    private static final long serialVersionUID = 8450786374975932890L;
+
     private String _host;
     private int _port;
     private String _transport;

Modified: qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnectionFactory.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnectionFactory.java?rev=1612097&r1=1612096&r2=1612097&view=diff
==============================================================================
--- qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnectionFactory.java (original)
+++ qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnectionFactory.java Sun Jul 20 14:39:35 2014
@@ -45,6 +45,8 @@ import javax.naming.Reference;
 import javax.naming.Referenceable;
 import javax.naming.StringRefAddr;
 import javax.naming.spi.ObjectFactory;
+
+import java.io.Serializable;
 import java.net.InetAddress;
 import java.net.UnknownHostException;
 import java.util.Hashtable;
@@ -53,10 +55,11 @@ import java.util.UUID;
 
 public class AMQConnectionFactory implements ConnectionFactory, QueueConnectionFactory, TopicConnectionFactory,
                                              ObjectFactory, Referenceable, XATopicConnectionFactory,
-                                             XAQueueConnectionFactory, XAConnectionFactory
+                                             XAQueueConnectionFactory, XAConnectionFactory, Serializable
 {
     protected static final String NO_URL_CONFIGURED = "The connection factory wasn't created with a proper URL, the connection details are empty";
 
+
     private ConnectionURL _connectionDetails;
 
     // The default constructor is necessary to allow AMQConnectionFactory to be deserialised from JNDI
@@ -412,4 +415,42 @@ public class AMQConnectionFactory implem
     {
         return (XAQueueConnection) createXAConnection(username, password);
     }
+
+    @Override
+    public boolean equals(final Object o)
+    {
+        if (this == o)
+        {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass())
+        {
+            return false;
+        }
+
+        final AMQConnectionFactory that = (AMQConnectionFactory) o;
+
+        if (_connectionDetails != null
+                ? !_connectionDetails.equals(that._connectionDetails)
+                : that._connectionDetails != null)
+        {
+            return false;
+        }
+
+        return true;
+    }
+
+    @Override
+    public int hashCode()
+    {
+        return _connectionDetails != null ? _connectionDetails.hashCode() : 0;
+    }
+
+    @Override
+    public String toString()
+    {
+        return "AMQConnectionFactory{" +
+               "_connectionDetails=" + _connectionDetails +
+               '}';
+    }
 }

Modified: qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnectionURL.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnectionURL.java?rev=1612097&r1=1612096&r2=1612097&view=diff
==============================================================================
--- qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnectionURL.java (original)
+++ qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnectionURL.java Sun Jul 20 14:39:35 2014
@@ -27,13 +27,16 @@ import org.apache.qpid.jms.ConnectionURL
 import org.apache.qpid.url.URLHelper;
 import org.apache.qpid.url.URLSyntaxException;
 
+import java.io.Serializable;
 import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 
-public class AMQConnectionURL implements ConnectionURL
+public class AMQConnectionURL implements ConnectionURL, Serializable
 {
+    private static final long serialVersionUID = -5102704772070465832L;
+
     private String _url;
     private String _failoverMethod;
     private Map<String, String> _failoverOptions;
@@ -43,10 +46,10 @@ public class AMQConnectionURL implements
     private String _username;
     private String _password;
     private String _virtualHost;
-    private AMQShortString _defaultQueueExchangeName;
-    private AMQShortString _defaultTopicExchangeName;
-    private AMQShortString _temporaryTopicExchangeName;
-    private AMQShortString _temporaryQueueExchangeName;
+    private String _defaultQueueExchangeName;
+    private String _defaultTopicExchangeName;
+    private String _temporaryTopicExchangeName;
+    private String _temporaryQueueExchangeName;
 
     public AMQConnectionURL(String fullURL) throws URLSyntaxException
     {
@@ -183,47 +186,145 @@ public class AMQConnectionURL implements
 
     public AMQShortString getDefaultQueueExchangeName()
     {
-        return _defaultQueueExchangeName;
+        return _defaultQueueExchangeName == null ? null : new AMQShortString(_defaultQueueExchangeName);
     }
 
     public void setDefaultQueueExchangeName(AMQShortString defaultQueueExchangeName)
     {
-        _defaultQueueExchangeName = defaultQueueExchangeName;
+        _defaultQueueExchangeName = defaultQueueExchangeName == null ? null : defaultQueueExchangeName.asString();
     }
 
     public AMQShortString getDefaultTopicExchangeName()
     {
-        return _defaultTopicExchangeName;
+        return _defaultTopicExchangeName == null ? null : new AMQShortString(_defaultTopicExchangeName);
     }
 
     public void setDefaultTopicExchangeName(AMQShortString defaultTopicExchangeName)
     {
-        _defaultTopicExchangeName = defaultTopicExchangeName;
+        _defaultTopicExchangeName = defaultTopicExchangeName == null ? null : defaultTopicExchangeName.asString();
     }
 
     public AMQShortString getTemporaryQueueExchangeName()
     {
-        return _temporaryQueueExchangeName;
+        return _temporaryQueueExchangeName == null ? null : new AMQShortString(_temporaryQueueExchangeName);
     }
 
     public void setTemporaryQueueExchangeName(AMQShortString temporaryQueueExchangeName)
     {
-        _temporaryQueueExchangeName = temporaryQueueExchangeName;
+        _temporaryQueueExchangeName = temporaryQueueExchangeName == null ? null : temporaryQueueExchangeName.asString();
     }
 
     public AMQShortString getTemporaryTopicExchangeName()
     {
-        return _temporaryTopicExchangeName;
+        return _temporaryTopicExchangeName == null ? null : new AMQShortString(_temporaryTopicExchangeName);
     }
 
     public void setTemporaryTopicExchangeName(AMQShortString temporaryTopicExchangeName)
     {
-        _temporaryTopicExchangeName = temporaryTopicExchangeName;
+        _temporaryTopicExchangeName = temporaryTopicExchangeName == null ? null : temporaryTopicExchangeName.asString() ;
+    }
+
+    @Override
+    public boolean equals(final Object o)
+    {
+        if (this == o)
+        {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass())
+        {
+            return false;
+        }
+
+        final AMQConnectionURL that = (AMQConnectionURL) o;
+
+        if (_brokers != null ? !_brokers.equals(that._brokers) : that._brokers != null)
+        {
+            return false;
+        }
+        if (_clientName != null ? !_clientName.equals(that._clientName) : that._clientName != null)
+        {
+            return false;
+        }
+        if (_defaultQueueExchangeName != null
+                ? !_defaultQueueExchangeName.equals(that._defaultQueueExchangeName)
+                : that._defaultQueueExchangeName != null)
+        {
+            return false;
+        }
+        if (_defaultTopicExchangeName != null
+                ? !_defaultTopicExchangeName.equals(that._defaultTopicExchangeName)
+                : that._defaultTopicExchangeName != null)
+        {
+            return false;
+        }
+        if (_failoverMethod != null ? !_failoverMethod.equals(that._failoverMethod) : that._failoverMethod != null)
+        {
+            return false;
+        }
+        if (_failoverOptions != null ? !_failoverOptions.equals(that._failoverOptions) : that._failoverOptions != null)
+        {
+            return false;
+        }
+        if (_options != null ? !_options.equals(that._options) : that._options != null)
+        {
+            return false;
+        }
+        if (_password != null ? !_password.equals(that._password) : that._password != null)
+        {
+            return false;
+        }
+        if (_temporaryQueueExchangeName != null
+                ? !_temporaryQueueExchangeName.equals(that._temporaryQueueExchangeName)
+                : that._temporaryQueueExchangeName != null)
+        {
+            return false;
+        }
+        if (_temporaryTopicExchangeName != null
+                ? !_temporaryTopicExchangeName.equals(that._temporaryTopicExchangeName)
+                : that._temporaryTopicExchangeName != null)
+        {
+            return false;
+        }
+        if (_url != null ? !_url.equals(that._url) : that._url != null)
+        {
+            return false;
+        }
+        if (_username != null ? !_username.equals(that._username) : that._username != null)
+        {
+            return false;
+        }
+        if (_virtualHost != null ? !_virtualHost.equals(that._virtualHost) : that._virtualHost != null)
+        {
+            return false;
+        }
+
+        return true;
+    }
+
+    @Override
+    public int hashCode()
+    {
+        int result = _url != null ? _url.hashCode() : 0;
+        result = 31 * result + (_failoverMethod != null ? _failoverMethod.hashCode() : 0);
+        result = 31 * result + (_failoverOptions != null ? _failoverOptions.hashCode() : 0);
+        result = 31 * result + (_options != null ? _options.hashCode() : 0);
+        result = 31 * result + (_brokers != null ? _brokers.hashCode() : 0);
+        result = 31 * result + (_clientName != null ? _clientName.hashCode() : 0);
+        result = 31 * result + (_username != null ? _username.hashCode() : 0);
+        result = 31 * result + (_password != null ? _password.hashCode() : 0);
+        result = 31 * result + (_virtualHost != null ? _virtualHost.hashCode() : 0);
+        result = 31 * result + (_defaultQueueExchangeName != null ? _defaultQueueExchangeName.hashCode() : 0);
+        result = 31 * result + (_defaultTopicExchangeName != null ? _defaultTopicExchangeName.hashCode() : 0);
+        result = 31 * result + (_temporaryTopicExchangeName != null ? _temporaryTopicExchangeName.hashCode() : 0);
+        result = 31 * result + (_temporaryQueueExchangeName != null ? _temporaryQueueExchangeName.hashCode() : 0);
+        return result;
     }
 
+    @Override
     public String toString()
     {
-        StringBuffer sb = new StringBuffer();
+        StringBuilder sb = new StringBuilder();
 
         sb.append(AMQ_PROTOCOL);
         sb.append("://");

Modified: qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQDestination.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQDestination.java?rev=1612097&r1=1612096&r2=1612097&view=diff
==============================================================================
--- qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQDestination.java (original)
+++ qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQDestination.java Sun Jul 20 14:39:35 2014
@@ -39,14 +39,20 @@ import javax.naming.NamingException;
 import javax.naming.Reference;
 import javax.naming.Referenceable;
 import javax.naming.StringRefAddr;
+
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
 import java.net.URISyntaxException;
 import java.util.Map;
 import java.util.concurrent.atomic.AtomicLong;
 
 
-public abstract class AMQDestination implements Destination, Referenceable
+public abstract class AMQDestination implements Destination, Referenceable, Externalizable
 {
     private static final Logger _logger = LoggerFactory.getLogger(AMQDestination.class);
+    private static final long serialVersionUID = -3716263015355017537L;
 
     private AMQShortString _exchangeName;
 
@@ -996,4 +1002,50 @@ public abstract class AMQDestination imp
     {
         return _rejectBehaviour;
     }
+
+    @Override
+    public void writeExternal(final ObjectOutput out) throws IOException
+    {
+        out.writeObject(_destSyntax);
+        if (_destSyntax == DestSyntax.BURL)
+        {
+            out.writeObject(toURL());
+        }
+        else
+        {
+            out.writeObject(_address);
+        }
+    }
+
+    @Override
+    public void readExternal(final ObjectInput in) throws IOException, ClassNotFoundException
+    {
+        _destSyntax = (DestSyntax) in.readObject();
+        if (_destSyntax == DestSyntax.BURL)
+        {
+            String burl = (String) in.readObject();
+            final AMQBindingURL binding;
+            try
+            {
+                binding = new AMQBindingURL(burl);
+            }
+            catch (URISyntaxException e)
+            {
+                throw new IllegalStateException("Cannot convert url " + burl + " into a BindingURL", e);
+            }
+            getInfoFromBindingURL(binding);
+        }
+        else
+        {
+            _address = (Address) in.readObject();
+            try
+            {
+                getInfoFromAddress();
+            }
+            catch (Exception e)
+            {
+                throw new IllegalStateException("Cannot convert get info from  " + _address, e);
+            }
+        }
+    }
 }

Modified: qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQHeadersExchange.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQHeadersExchange.java?rev=1612097&r1=1612096&r2=1612097&view=diff
==============================================================================
--- qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQHeadersExchange.java (original)
+++ qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQHeadersExchange.java Sun Jul 20 14:39:35 2014
@@ -29,6 +29,8 @@ import org.apache.qpid.url.BindingURL;
  */
 public class AMQHeadersExchange extends AMQDestination
 {
+    private static final long serialVersionUID = 2187866678283988301L;
+
     public AMQHeadersExchange(BindingURL binding)
     {
         super(binding);

Modified: qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQQueue.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQQueue.java?rev=1612097&r1=1612096&r2=1612097&view=diff
==============================================================================
--- qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQQueue.java (original)
+++ qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQQueue.java Sun Jul 20 14:39:35 2014
@@ -29,7 +29,9 @@ import java.net.URISyntaxException;
 
 public class AMQQueue extends AMQDestination implements Queue
 {
-    protected AMQQueue()
+    private static final long serialVersionUID = -1283142598932655606L;
+
+    public AMQQueue()
     {
         super();
     }

Modified: qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQTemporaryQueue.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQTemporaryQueue.java?rev=1612097&r1=1612096&r2=1612097&view=diff
==============================================================================
--- qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQTemporaryQueue.java (original)
+++ qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQTemporaryQueue.java Sun Jul 20 14:39:35 2014
@@ -29,8 +29,7 @@ import java.util.UUID;
 /** AMQ implementation of a TemporaryQueue. */
 final class AMQTemporaryQueue extends AMQQueue implements TemporaryQueue, TemporaryDestination
 {
-
-
+    private static final long serialVersionUID = -5457866720195625708L;
     private final AMQSession _session;
     private boolean _deleted;
 

Modified: qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQTemporaryTopic.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQTemporaryTopic.java?rev=1612097&r1=1612096&r2=1612097&view=diff
==============================================================================
--- qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQTemporaryTopic.java (original)
+++ qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQTemporaryTopic.java Sun Jul 20 14:39:35 2014
@@ -32,6 +32,7 @@ import java.util.UUID;
 class AMQTemporaryTopic extends AMQTopic implements TemporaryTopic, TemporaryDestination
 {
 
+    private static final long serialVersionUID = -4990099300883216207L;
     private final AMQSession _session;
     private boolean _deleted;
     /**

Modified: qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQTopic.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQTopic.java?rev=1612097&r1=1612096&r2=1612097&view=diff
==============================================================================
--- qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQTopic.java (original)
+++ qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQTopic.java Sun Jul 20 14:39:35 2014
@@ -33,6 +33,8 @@ import java.net.URISyntaxException;
 
 public class AMQTopic extends AMQDestination implements Topic
 {
+    private static final long serialVersionUID = -4773561540716587036L;
+
     public AMQTopic(String address) throws URISyntaxException
     {
         super(address);
@@ -43,7 +45,7 @@ public class AMQTopic extends AMQDestina
         super(address);
     }
 
-    protected AMQTopic()
+    public AMQTopic()
     {
         super();
     }

Modified: qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQUndefinedDestination.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQUndefinedDestination.java?rev=1612097&r1=1612096&r2=1612097&view=diff
==============================================================================
--- qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQUndefinedDestination.java (original)
+++ qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQUndefinedDestination.java Sun Jul 20 14:39:35 2014
@@ -26,6 +26,7 @@ public class AMQUndefinedDestination ext
 {
 
     private static final AMQShortString UNKNOWN_EXCHANGE_CLASS = new AMQShortString("unknown");
+    private static final long serialVersionUID = -1487224209485888847L;
 
 
     public AMQUndefinedDestination(AMQShortString exchange, AMQShortString routingKey, AMQShortString queueName)

Modified: qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/message/AMQMessageDelegate_0_8.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/message/AMQMessageDelegate_0_8.java?rev=1612097&r1=1612096&r2=1612097&view=diff
==============================================================================
--- qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/message/AMQMessageDelegate_0_8.java (original)
+++ qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/message/AMQMessageDelegate_0_8.java Sun Jul 20 14:39:35 2014
@@ -27,7 +27,6 @@ import org.apache.qpid.client.AMQSession
 import org.apache.qpid.client.AMQSession_0_8;
 import org.apache.qpid.client.AMQTopic;
 import org.apache.qpid.client.CustomJMSXProperty;
-import org.apache.qpid.client.JMSAMQException;
 import org.apache.qpid.framing.AMQShortString;
 import org.apache.qpid.framing.BasicContentHeaderProperties;
 import org.apache.qpid.url.AMQBindingURL;
@@ -611,6 +610,8 @@ public class AMQMessageDelegate_0_8 exte
 
     private static class DefaultRouterDestination extends AMQDestination implements Queue
     {
+        private static final long serialVersionUID = -5042408431861384536L;
+
         public DefaultRouterDestination(final String replyToEncoding)
         {
             super(AMQShortString.EMPTY_STRING,
@@ -634,6 +635,8 @@ public class AMQMessageDelegate_0_8 exte
 
     private static class NonBURLReplyToDestination extends AMQDestination implements Queue
     {
+        private static final long serialVersionUID = 122897705932489259L;
+
         public NonBURLReplyToDestination(final String exchange, final String routingKey)
         {
             super(AMQShortString.valueOf(exchange),

Modified: qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/client/AMQConnectionFactoryTest.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/client/AMQConnectionFactoryTest.java?rev=1612097&r1=1612096&r2=1612097&view=diff
==============================================================================
--- qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/client/AMQConnectionFactoryTest.java (original)
+++ qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/client/AMQConnectionFactoryTest.java Sun Jul 20 14:39:35 2014
@@ -20,6 +20,12 @@
  */
 package org.apache.qpid.client;
 
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+
 import javax.jms.JMSException;
 
 import junit.framework.TestCase;
@@ -76,4 +82,25 @@ public class AMQConnectionFactoryTest ex
             assertEquals("Unexpected exception", AMQConnectionFactory.NO_URL_CONFIGURED, e.getMessage());
         }
     }
+
+    public void testSerialization() throws Exception
+    {
+        AMQConnectionFactory factory = new AMQConnectionFactory();
+        assertTrue(factory instanceof Serializable);
+        factory.setConnectionURLString("amqp://guest:guest@clientID/test?brokerlist='tcp://localhost:5672'");
+
+        ByteArrayOutputStream bos = new ByteArrayOutputStream();
+        ObjectOutputStream oos = new ObjectOutputStream(bos);
+        oos.writeObject(factory);
+        oos.close();
+
+        ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
+        ObjectInputStream ois = new ObjectInputStream(bis);
+        Object deserializedObject = ois.readObject();
+        ois.close();
+
+        AMQConnectionFactory deserialisedFactory = (AMQConnectionFactory) deserializedObject;
+        assertEquals(factory, deserialisedFactory);
+        assertEquals(factory.hashCode(), deserialisedFactory.hashCode());
+    }
 }

Modified: qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/client/AMQDestinationTest.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/client/AMQDestinationTest.java?rev=1612097&r1=1612096&r2=1612097&view=diff
==============================================================================
--- qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/client/AMQDestinationTest.java (original)
+++ qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/client/AMQDestinationTest.java Sun Jul 20 14:39:35 2014
@@ -20,10 +20,19 @@
  */
 package org.apache.qpid.client;
 
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 
+import javax.jms.Destination;
+import javax.jms.Queue;
+import javax.jms.Topic;
+
 import junit.framework.TestCase;
 
 public class AMQDestinationTest extends TestCase
@@ -132,11 +141,12 @@ public class AMQDestinationTest extends 
         assertEmptyLinkBindingsAndSubscriptionArgs(new AMQAnyDestination(xSubscribeAddr));
     }
 
-    private void assertEmptyLinkBindingsAndSubscriptionArgs(AMQDestination dest) {
+    private void assertEmptyLinkBindingsAndSubscriptionArgs(AMQDestination dest)
+    {
         assertEquals("Default link subscription arguments should be the constant Collections empty map.",
                 Collections.emptyMap(), dest.getLink().getSubscription().getArgs());
         assertSame("Defaultl link bindings should be the constant Collections empty list.",
-                Collections.emptyList(), dest.getLink().getBindings());
+                   Collections.emptyList(), dest.getLink().getBindings());
     }
 
     /**
@@ -152,10 +162,69 @@ public class AMQDestinationTest extends 
         assertEmptyNodeBindings(new AMQAnyDestination("ADDR:testDest3; {node: {type: topic}}"));
     }
 
+    public void testSerializeAMQQueue_BURL() throws Exception
+    {
+        Queue queue = new AMQQueue("BURL:direct://amq.direct/test-route/Foo?routingkey='Foo'");
+        assertTrue(queue instanceof Serializable);
+
+        Queue deserialisedQueue = (Queue) serialiseDeserialiseDestination(queue);
+
+        assertEquals(queue, deserialisedQueue);
+        assertEquals(queue.hashCode(), deserialisedQueue.hashCode());
+    }
+
+    public void testSerializeAMQQueue_ADDR() throws Exception
+    {
+        Queue queue = new AMQQueue("ADDR:testDest2; {node: {type: queue}}");
+        assertTrue(queue instanceof Serializable);
+
+        Queue deserialisedQueue = (Queue) serialiseDeserialiseDestination(queue);
+
+        assertEquals(queue, deserialisedQueue);
+        assertEquals(queue.hashCode(), deserialisedQueue.hashCode());
+    }
+
+    public void testSerializeAMQTopic_BURL() throws Exception
+    {
+        Topic topic = new AMQTopic("BURL:topic://amq.topic/mytopic/?routingkey='mytopic'");
+        assertTrue(topic instanceof Serializable);
+
+        Topic deserialisedTopic = (Topic) serialiseDeserialiseDestination(topic);
+
+        assertEquals(topic, deserialisedTopic);
+        assertEquals(topic.hashCode(), deserialisedTopic.hashCode());
+    }
+
+    public void testSerializeAMQTopic_ADDR() throws Exception
+    {
+        Topic topic = new AMQTopic("ADDR:my-topic; {assert: always, node:{ type: topic }}");
+        assertTrue(topic instanceof Serializable);
+
+        Topic deserialisedTopic = (Topic) serialiseDeserialiseDestination(topic);
+
+        assertEquals(topic, deserialisedTopic);
+        assertEquals(topic.hashCode(), deserialisedTopic.hashCode());
+    }
+
     private void assertEmptyNodeBindings(AMQDestination dest)
     {
         assertSame("Empty node bindings should refer to the constant Collections empty list.",
                 Collections.emptyList(), dest.getNode().getBindings());
     }
 
+    private Destination serialiseDeserialiseDestination(final Destination dest) throws Exception
+    {
+        ByteArrayOutputStream bos = new ByteArrayOutputStream();
+        ObjectOutputStream oos = new ObjectOutputStream(bos);
+        oos.writeObject(dest);
+        oos.close();
+
+        ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
+        ObjectInputStream ois = new ObjectInputStream(bis);
+        Object deserializedObject = ois.readObject();
+        ois.close();
+        return (Destination)deserializedObject;
+    }
+
+
 }

Modified: qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/client/connectionurl/ConnectionURLTest.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/client/connectionurl/ConnectionURLTest.java?rev=1612097&r1=1612096&r2=1612097&view=diff
==============================================================================
--- qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/client/connectionurl/ConnectionURLTest.java (original)
+++ qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/client/connectionurl/ConnectionURLTest.java Sun Jul 20 14:39:35 2014
@@ -20,6 +20,12 @@
  */
 package org.apache.qpid.test.unit.client.connectionurl;
 
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+
 import junit.framework.TestCase;
 
 import org.apache.qpid.client.AMQBrokerDetails;
@@ -620,5 +626,29 @@ public class ConnectionURLTest extends T
 
         assertFalse("value should be false", Boolean.valueOf(connectionURL.getOption(ConnectionURL.OPTIONS_VERIFY_QUEUE_ON_SEND)));
     }
+
+    public void testSerialization() throws Exception
+    {
+        String url = "amqp://ritchiem:bob@/test?brokerlist='tcp://localhost:5672'";
+        ConnectionURL connectionurl = new AMQConnectionURL(url);
+
+
+        assertTrue(connectionurl instanceof Serializable);
+
+        ByteArrayOutputStream bos = new ByteArrayOutputStream();
+        ObjectOutputStream oos = new ObjectOutputStream(bos);
+        oos.writeObject(connectionurl);
+        oos.close();
+
+        ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
+        ObjectInputStream ois = new ObjectInputStream(bis);
+        Object deserializedObject = ois.readObject();
+        ois.close();
+
+        ConnectionURL deserialisedConnectionUrl = (AMQConnectionURL) deserializedObject;
+        assertEquals(connectionurl, deserialisedConnectionUrl);
+        assertEquals(connectionurl.hashCode(), deserialisedConnectionUrl.hashCode());
+
+    }
 }
 

Modified: qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/messaging/Address.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/messaging/Address.java?rev=1612097&r1=1612096&r2=1612097&view=diff
==============================================================================
--- qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/messaging/Address.java (original)
+++ qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/messaging/Address.java Sun Jul 20 14:39:35 2014
@@ -24,6 +24,7 @@ import org.apache.qpid.messaging.util.Ad
 
 import static org.apache.qpid.messaging.util.PyPrint.pprint;
 
+import java.io.Serializable;
 import java.util.Map;
 
 
@@ -32,9 +33,11 @@ import java.util.Map;
  *
  */
 
-public class Address
+public class Address implements Serializable
 {
 
+    private static final long serialVersionUID = 6096143531336726036L;
+
     private String _name;
     private String _subject;
     private Map _options;

Modified: qpid/trunk/qpid/java/jca/src/main/java/org/apache/qpid/ra/admin/QpidQueueImpl.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/jca/src/main/java/org/apache/qpid/ra/admin/QpidQueueImpl.java?rev=1612097&r1=1612096&r2=1612097&view=diff
==============================================================================
--- qpid/trunk/qpid/java/jca/src/main/java/org/apache/qpid/ra/admin/QpidQueueImpl.java (original)
+++ qpid/trunk/qpid/java/jca/src/main/java/org/apache/qpid/ra/admin/QpidQueueImpl.java Sun Jul 20 14:39:35 2014
@@ -33,6 +33,7 @@ import org.apache.qpid.client.AMQQueue;
 
 public class QpidQueueImpl extends AMQQueue implements QpidQueue, Externalizable
 {
+    private static final long serialVersionUID = 7952672727182960611L;
     private String _url;
 
     public QpidQueueImpl()
@@ -71,6 +72,7 @@ public class QpidQueueImpl extends AMQQu
     	return this._url;
     }
 
+    @Override
     public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException
     {
         this._url = (String)in.readObject();
@@ -86,6 +88,7 @@ public class QpidQueueImpl extends AMQQu
         }
     }
 
+    @Override
     public void writeExternal(ObjectOutput out) throws IOException
     {
         out.writeObject(this._url);

Modified: qpid/trunk/qpid/java/jca/src/main/java/org/apache/qpid/ra/admin/QpidTopicImpl.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/jca/src/main/java/org/apache/qpid/ra/admin/QpidTopicImpl.java?rev=1612097&r1=1612096&r2=1612097&view=diff
==============================================================================
--- qpid/trunk/qpid/java/jca/src/main/java/org/apache/qpid/ra/admin/QpidTopicImpl.java (original)
+++ qpid/trunk/qpid/java/jca/src/main/java/org/apache/qpid/ra/admin/QpidTopicImpl.java Sun Jul 20 14:39:35 2014
@@ -34,6 +34,7 @@ import org.apache.qpid.ra.inflow.QpidAct
 
 public class QpidTopicImpl extends AMQTopic implements QpidTopic, Externalizable
 {
+    private static final long serialVersionUID = -2872685901706214228L;
     private String _url;
 
     public QpidTopicImpl()
@@ -71,6 +72,7 @@ public class QpidTopicImpl extends AMQTo
     	return this._url;
     }
 
+    @Override
     public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException
     {
         this._url = (String)in.readObject();
@@ -86,6 +88,7 @@ public class QpidTopicImpl extends AMQTo
         }
     }
 
+    @Override
     public void writeExternal(ObjectOutput out) throws IOException
     {
         out.writeObject(this._url);



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org