activemq-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From cshan...@apache.org
Subject [6/6] activemq git commit: https://issues.apache.org/jira/browse/AMQ-6373
Date Mon, 25 Jul 2016 15:58:07 GMT
https://issues.apache.org/jira/browse/AMQ-6373

Adding a new OpenWire command called BrokerSubscriptionInfo in order to
help synchronize durable subs across a network bridge.  Added OpenWire
version 12.  For dynamicallyIncludedDestination durable subs will now be
synchronized on a bridge reconnect as long as the bridge supports
conduitSubscriptions and dynamicOnly=false


Project: http://git-wip-us.apache.org/repos/asf/activemq/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq/commit/3953b9aa
Tree: http://git-wip-us.apache.org/repos/asf/activemq/tree/3953b9aa
Diff: http://git-wip-us.apache.org/repos/asf/activemq/diff/3953b9aa

Branch: refs/heads/master
Commit: 3953b9aaefaee914bdd0702f27aef47c021ceb27
Parents: a65f5e7
Author: Christopher L. Shannon (cshannon) <christopher.l.shannon@gmail.com>
Authored: Wed Jul 20 12:36:41 2016 -0400
Committer: Christopher L. Shannon (cshannon) <christopher.l.shannon@gmail.com>
Committed: Mon Jul 25 11:56:13 2016 -0400

----------------------------------------------------------------------
 .../activemq/broker/TransportConnection.java    |  60 +-
 .../network/DemandForwardingBridgeSupport.java  |  99 ++-
 .../activemq/network/DurableConduitBridge.java  |   2 +-
 .../network/NetworkBridgeConfiguration.java     |   9 +
 activemq-client/pom.xml                         |   2 +-
 .../org/apache/activemq/command/BrokerInfo.java |  22 +-
 .../command/BrokerSubscriptionInfo.java         |  99 +++
 .../apache/activemq/command/CommandTypes.java   |   8 +-
 .../v12/ActiveMQBlobMessageMarshaller.java      | 139 ++++
 .../v12/ActiveMQBytesMessageMarshaller.java     | 114 ++++
 .../v12/ActiveMQDestinationMarshaller.java      | 114 ++++
 .../v12/ActiveMQMapMessageMarshaller.java       | 114 ++++
 .../openwire/v12/ActiveMQMessageMarshaller.java | 114 ++++
 .../v12/ActiveMQObjectMessageMarshaller.java    | 114 ++++
 .../openwire/v12/ActiveMQQueueMarshaller.java   | 114 ++++
 .../v12/ActiveMQStreamMessageMarshaller.java    | 114 ++++
 .../v12/ActiveMQTempDestinationMarshaller.java  |  99 +++
 .../v12/ActiveMQTempQueueMarshaller.java        | 114 ++++
 .../v12/ActiveMQTempTopicMarshaller.java        | 114 ++++
 .../v12/ActiveMQTextMessageMarshaller.java      | 114 ++++
 .../openwire/v12/ActiveMQTopicMarshaller.java   | 114 ++++
 .../openwire/v12/BaseCommandMarshaller.java     | 118 ++++
 .../openwire/v12/BaseDataStreamMarshaller.java  | 644 +++++++++++++++++++
 .../openwire/v12/BrokerIdMarshaller.java        | 129 ++++
 .../openwire/v12/BrokerInfoMarshaller.java      | 206 ++++++
 .../v12/BrokerSubscriptionInfoMarshaller.java   | 161 +++++
 .../v12/ConnectionControlMarshaller.java        | 169 +++++
 .../openwire/v12/ConnectionErrorMarshaller.java | 134 ++++
 .../openwire/v12/ConnectionIdMarshaller.java    | 129 ++++
 .../openwire/v12/ConnectionInfoMarshaller.java  | 201 ++++++
 .../openwire/v12/ConsumerControlMarshaller.java | 158 +++++
 .../openwire/v12/ConsumerIdMarshaller.java      | 139 ++++
 .../openwire/v12/ConsumerInfoMarshaller.java    | 260 ++++++++
 .../openwire/v12/ControlCommandMarshaller.java  | 129 ++++
 .../v12/DataArrayResponseMarshaller.java        | 151 +++++
 .../openwire/v12/DataResponseMarshaller.java    | 129 ++++
 .../openwire/v12/DestinationInfoMarshaller.java | 170 +++++
 .../openwire/v12/DiscoveryEventMarshaller.java  | 134 ++++
 .../v12/ExceptionResponseMarshaller.java        | 129 ++++
 .../openwire/v12/FlushCommandMarshaller.java    | 114 ++++
 .../openwire/v12/IntegerResponseMarshaller.java | 128 ++++
 .../openwire/v12/JournalQueueAckMarshaller.java | 134 ++++
 .../openwire/v12/JournalTopicAckMarshaller.java | 154 +++++
 .../openwire/v12/JournalTraceMarshaller.java    | 129 ++++
 .../v12/JournalTransactionMarshaller.java       | 138 ++++
 .../openwire/v12/KeepAliveInfoMarshaller.java   | 114 ++++
 .../v12/LastPartialCommandMarshaller.java       | 114 ++++
 .../v12/LocalTransactionIdMarshaller.java       | 134 ++++
 .../openwire/v12/MarshallerFactory.java         | 110 ++++
 .../openwire/v12/MessageAckMarshaller.java      | 162 +++++
 .../openwire/v12/MessageDispatchMarshaller.java | 143 ++++
 .../MessageDispatchNotificationMarshaller.java  | 144 +++++
 .../openwire/v12/MessageIdMarshaller.java       | 144 +++++
 .../openwire/v12/MessageMarshaller.java         | 316 +++++++++
 .../openwire/v12/MessagePullMarshaller.java     | 149 +++++
 .../v12/NetworkBridgeFilterMarshaller.java      | 137 ++++
 .../openwire/v12/PartialCommandMarshaller.java  | 133 ++++
 .../openwire/v12/ProducerAckMarshaller.java     | 133 ++++
 .../openwire/v12/ProducerIdMarshaller.java      | 139 ++++
 .../openwire/v12/ProducerInfoMarshaller.java    | 170 +++++
 .../openwire/v12/RemoveInfoMarshaller.java      | 134 ++++
 .../v12/RemoveSubscriptionInfoMarshaller.java   | 139 ++++
 .../openwire/v12/ReplayCommandMarshaller.java   | 132 ++++
 .../openwire/v12/ResponseMarshaller.java        | 128 ++++
 .../openwire/v12/SessionIdMarshaller.java       | 134 ++++
 .../openwire/v12/SessionInfoMarshaller.java     | 129 ++++
 .../openwire/v12/ShutdownInfoMarshaller.java    | 114 ++++
 .../v12/SubscriptionInfoMarshaller.java         | 154 +++++
 .../openwire/v12/TransactionIdMarshaller.java   |  99 +++
 .../openwire/v12/TransactionInfoMarshaller.java | 138 ++++
 .../openwire/v12/WireFormatInfoMarshaller.java  | 154 +++++
 .../openwire/v12/XATransactionIdMarshaller.java | 138 ++++
 .../apache/activemq/state/CommandVisitor.java   |   3 +
 .../activemq/state/CommandVisitorAdapter.java   |  44 ++
 .../network/DurableSyncNetworkBridgeTest.java   | 604 +++++++++++++++++
 75 files changed, 10324 insertions(+), 42 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/activemq/blob/3953b9aa/activemq-broker/src/main/java/org/apache/activemq/broker/TransportConnection.java
----------------------------------------------------------------------
diff --git a/activemq-broker/src/main/java/org/apache/activemq/broker/TransportConnection.java b/activemq-broker/src/main/java/org/apache/activemq/broker/TransportConnection.java
index 92133e8..5288dc9 100755
--- a/activemq-broker/src/main/java/org/apache/activemq/broker/TransportConnection.java
+++ b/activemq-broker/src/main/java/org/apache/activemq/broker/TransportConnection.java
@@ -20,6 +20,7 @@ import java.io.EOFException;
 import java.io.IOException;
 import java.net.SocketException;
 import java.net.URI;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -27,7 +28,6 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.Properties;
-import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.CountDownLatch;
@@ -41,9 +41,12 @@ import javax.transaction.xa.XAResource;
 
 import org.apache.activemq.advisory.AdvisorySupport;
 import org.apache.activemq.broker.region.ConnectionStatistics;
+import org.apache.activemq.broker.region.DurableTopicSubscription;
 import org.apache.activemq.broker.region.RegionBroker;
+import org.apache.activemq.broker.region.TopicRegion;
 import org.apache.activemq.command.ActiveMQDestination;
 import org.apache.activemq.command.BrokerInfo;
+import org.apache.activemq.command.BrokerSubscriptionInfo;
 import org.apache.activemq.command.Command;
 import org.apache.activemq.command.CommandTypes;
 import org.apache.activemq.command.ConnectionControl;
@@ -100,6 +103,7 @@ import org.apache.activemq.transport.Transport;
 import org.apache.activemq.transport.TransportDisposedIOException;
 import org.apache.activemq.util.IntrospectionSupport;
 import org.apache.activemq.util.MarshallingSupport;
+import org.apache.activemq.util.SubscriptionKey;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.MDC;
@@ -1373,20 +1377,58 @@ public class TransportConnection implements Connection, Task, CommandVisitor {
         this.pendingStop = pendingStop;
     }
 
+    public static BrokerSubscriptionInfo getBrokerSubscriptionInfo(final BrokerService brokerService) {
+        RegionBroker regionBroker = (RegionBroker) brokerService.getRegionBroker();
+        TopicRegion topicRegion = (TopicRegion) regionBroker.getTopicRegion();
+        List<ConsumerInfo> subscriptionInfos = new ArrayList<>();
+        for (SubscriptionKey key : topicRegion.getDurableSubscriptions().keySet()) {
+            DurableTopicSubscription sub = topicRegion.getDurableSubscriptions().get(key);
+            if (sub != null) {
+                ConsumerInfo ci = sub.getConsumerInfo().copy();
+                ci.setClientId(key.getClientId());
+                subscriptionInfos.add(ci);
+            }
+        }
+        BrokerSubscriptionInfo bsi = new BrokerSubscriptionInfo(brokerService.getBrokerName());
+        bsi.setSubscriptionInfos(subscriptionInfos.toArray(new ConsumerInfo[0]));
+        return bsi;
+    }
+
+    private NetworkBridgeConfiguration getNetworkConfiguration(final BrokerInfo info) throws IOException {
+        Properties properties = MarshallingSupport.stringToProperties(info.getNetworkProperties());
+        Map<String, String> props = createMap(properties);
+        NetworkBridgeConfiguration config = new NetworkBridgeConfiguration();
+        IntrospectionSupport.setProperties(config, props, "");
+        return config;
+    }
+
     @Override
     public Response processBrokerInfo(BrokerInfo info) {
         if (info.isSlaveBroker()) {
             LOG.error(" Slave Brokers are no longer supported - slave trying to attach is: {}", info.getBrokerName());
+        } else if (info.isNetworkConnection() && !info.isDuplexConnection()) {
+            try {
+                NetworkBridgeConfiguration config = getNetworkConfiguration(info);
+                if (config.isSyncDurableSubs() && protocolVersion.get() >= CommandTypes.PROTOCOL_VERSION_DURABLE_SYNC) {
+                    LOG.debug("SyncDurableSubs is enabled, Sending BrokerSubscriptionInfo");
+                    dispatchSync(getBrokerSubscriptionInfo(this.broker.getBrokerService()));
+                }
+            } catch (Exception e) {
+                LOG.error("Failed to respond to network bridge creation from broker {}", info.getBrokerId(), e);
+                return null;
+            }
         } else if (info.isNetworkConnection() && info.isDuplexConnection()) {
             // so this TransportConnection is the rear end of a network bridge
             // We have been requested to create a two way pipe ...
             try {
-                Properties properties = MarshallingSupport.stringToProperties(info.getNetworkProperties());
-                Map<String, String> props = createMap(properties);
-                NetworkBridgeConfiguration config = new NetworkBridgeConfiguration();
-                IntrospectionSupport.setProperties(config, props, "");
+                NetworkBridgeConfiguration config = getNetworkConfiguration(info);
                 config.setBrokerName(broker.getBrokerName());
 
+                if (config.isSyncDurableSubs() && protocolVersion.get() >= 12) {
+                    LOG.debug("SyncDurableSubs is enabled, Sending BrokerSubscriptionInfo");
+                    dispatchSync(getBrokerSubscriptionInfo(this.broker.getBrokerService()));
+                }
+
                 // check for existing duplex connection hanging about
 
                 // We first look if existing network connection already exists for the same broker Id and network connector name
@@ -1698,4 +1740,12 @@ public class TransportConnection implements Connection, Task, CommandVisitor {
     public WireFormatInfo getRemoteWireFormatInfo() {
         return wireFormatInfo;
     }
+
+    /* (non-Javadoc)
+     * @see org.apache.activemq.state.CommandVisitor#processBrokerSubscriptionInfo(org.apache.activemq.command.BrokerSubscriptionInfo)
+     */
+    @Override
+    public Response processBrokerSubscriptionInfo(BrokerSubscriptionInfo info) throws Exception {
+        return null;
+    }
 }

http://git-wip-us.apache.org/repos/asf/activemq/blob/3953b9aa/activemq-broker/src/main/java/org/apache/activemq/network/DemandForwardingBridgeSupport.java
----------------------------------------------------------------------
diff --git a/activemq-broker/src/main/java/org/apache/activemq/network/DemandForwardingBridgeSupport.java b/activemq-broker/src/main/java/org/apache/activemq/network/DemandForwardingBridgeSupport.java
index e22b265..865e60e 100644
--- a/activemq-broker/src/main/java/org/apache/activemq/network/DemandForwardingBridgeSupport.java
+++ b/activemq-broker/src/main/java/org/apache/activemq/network/DemandForwardingBridgeSupport.java
@@ -57,7 +57,9 @@ import org.apache.activemq.command.ActiveMQTempDestination;
 import org.apache.activemq.command.ActiveMQTopic;
 import org.apache.activemq.command.BrokerId;
 import org.apache.activemq.command.BrokerInfo;
+import org.apache.activemq.command.BrokerSubscriptionInfo;
 import org.apache.activemq.command.Command;
+import org.apache.activemq.command.CommandTypes;
 import org.apache.activemq.command.ConnectionError;
 import org.apache.activemq.command.ConnectionId;
 import org.apache.activemq.command.ConnectionInfo;
@@ -127,11 +129,12 @@ public abstract class DemandForwardingBridgeSupport implements NetworkBridge, Br
     protected ActiveMQDestination[] dynamicallyIncludedDestinations;
     protected ActiveMQDestination[] staticallyIncludedDestinations;
     protected ActiveMQDestination[] durableDestinations;
-    protected final ConcurrentMap<ConsumerId, DemandSubscription> subscriptionMapByLocalId = new ConcurrentHashMap<ConsumerId, DemandSubscription>();
-    protected final ConcurrentMap<ConsumerId, DemandSubscription> subscriptionMapByRemoteId = new ConcurrentHashMap<ConsumerId, DemandSubscription>();
+    protected final ConcurrentMap<ConsumerId, DemandSubscription> subscriptionMapByLocalId = new ConcurrentHashMap<>();
+    protected final ConcurrentMap<ConsumerId, DemandSubscription> subscriptionMapByRemoteId = new ConcurrentHashMap<>();
     protected final BrokerId localBrokerPath[] = new BrokerId[]{null};
     protected final CountDownLatch startedLatch = new CountDownLatch(2);
     protected final CountDownLatch localStartedLatch = new CountDownLatch(1);
+    protected final CountDownLatch staticDestinationsLatch = new CountDownLatch(1);
     protected final AtomicBoolean lastConnectSucceeded = new AtomicBoolean(false);
     protected NetworkBridgeConfiguration configuration;
     protected final NetworkBridgeFilterFactory defaultFilterFactory = new DefaultNetworkBridgeFilterFactory();
@@ -311,6 +314,7 @@ public abstract class DemandForwardingBridgeSupport implements NetworkBridge, Br
                     startedLatch.countDown();
                     startedLatch.countDown();
                     localStartedLatch.countDown();
+                    staticDestinationsLatch.countDown();
 
                     ss.throwFirstException();
                 }
@@ -440,6 +444,7 @@ public abstract class DemandForwardingBridgeSupport implements NetworkBridge, Br
         try {
             if (safeWaitUntilStarted()) {
                 setupStaticDestinations();
+                staticDestinationsLatch.countDown();
             }
         } catch (Throwable e) {
             serviceLocalException(e);
@@ -549,6 +554,10 @@ public abstract class DemandForwardingBridgeSupport implements NetworkBridge, Br
                     brokerInfo.setNetworkProperties(str);
                     brokerInfo.setBrokerId(this.localBrokerId);
                     remoteBroker.oneway(brokerInfo);
+                    if (configuration.isSyncDurableSubs() &&
+                            remoteBroker.getWireFormat().getVersion() >= CommandTypes.PROTOCOL_VERSION_DURABLE_SYNC) {
+                        remoteBroker.oneway(TransportConnection.getBrokerSubscriptionInfo(brokerService));
+                    }
                 }
                 if (remoteConnectionInfo != null) {
                     remoteBroker.oneway(remoteConnectionInfo.createRemoveCommand());
@@ -617,6 +626,31 @@ public abstract class DemandForwardingBridgeSupport implements NetworkBridge, Br
                     ackAdvisory(md.getMessage());
                 } else if (command.isBrokerInfo()) {
                     futureRemoteBrokerInfo.set((BrokerInfo) command);
+                } else if (command instanceof BrokerSubscriptionInfo) {
+                    staticDestinationsLatch.await();
+                    BrokerSubscriptionInfo subInfo = (BrokerSubscriptionInfo) command;
+                    LOG.debug("Received Remote BrokerSubscriptionInfo on {} from {}",
+                            this.brokerService.getBrokerName(), subInfo.getBrokerName());
+
+                    if (configuration.isSyncDurableSubs() && configuration.isConduitSubscriptions()
+                            && !configuration.isDynamicOnly() && subInfo.getSubscriptionInfos() != null) {
+                        if (started.get()) {
+                            for (ConsumerInfo info : subInfo.getSubscriptionInfos()) {
+                                if(!info.getSubscriptionName().startsWith(DURABLE_SUB_PREFIX) &&
+                                        matchesDynamicallyIncludedDestinations(info.getDestination())) {
+                                    serviceRemoteConsumerAdvisory(info);
+                                }
+                            }
+
+                            //After re-added, clean up any empty durables
+                            for (Iterator<DemandSubscription> i = subscriptionMapByLocalId.values().iterator(); i.hasNext(); ) {
+                                DemandSubscription ds = i.next();
+                                if (matchesDynamicallyIncludedDestinations(ds.getLocalInfo().getDestination())) {
+                                    cleanupDurableSub(ds, i);
+                                }
+                            }
+                        }
+                    }
                 } else if (command.getClass() == ConnectionError.class) {
                     ConnectionError ce = (ConnectionError) command;
                     serviceRemoteException(ce.getException());
@@ -831,24 +865,29 @@ public abstract class DemandForwardingBridgeSupport implements NetworkBridge, Br
                 DemandSubscription ds = i.next();
                 boolean removed = ds.getDurableRemoteSubs().remove(subscriptionInfo);
                 if (removed) {
-                    if (ds.getDurableRemoteSubs().isEmpty()) {
+                    cleanupDurableSub(ds, i);
+                }
+            }
+        }
+    }
 
-                        // deactivate subscriber
-                        RemoveInfo removeInfo = new RemoveInfo(ds.getLocalInfo().getConsumerId());
-                        localBroker.oneway(removeInfo);
+    private void cleanupDurableSub(final DemandSubscription ds,
+            Iterator<DemandSubscription> i) throws IOException {
+        if (ds != null && ds.getLocalDurableSubscriber() != null && ds.getDurableRemoteSubs().isEmpty()) {
 
-                        // remove subscriber
-                        RemoveSubscriptionInfo sending = new RemoveSubscriptionInfo();
-                        sending.setClientId(localClientId);
-                        sending.setSubscriptionName(ds.getLocalDurableSubscriber().getSubscriptionName());
-                        sending.setConnectionId(this.localConnectionInfo.getConnectionId());
-                        localBroker.oneway(sending);
+            // deactivate subscriber
+            RemoveInfo removeInfo = new RemoveInfo(ds.getLocalInfo().getConsumerId());
+            localBroker.oneway(removeInfo);
 
-                        //remove subscriber from map
-                        i.remove();
-                    }
-                }
-            }
+            // remove subscriber
+            RemoveSubscriptionInfo sending = new RemoveSubscriptionInfo();
+            sending.setClientId(localClientId);
+            sending.setSubscriptionName(ds.getLocalDurableSubscriber().getSubscriptionName());
+            sending.setConnectionId(this.localConnectionInfo.getConnectionId());
+            localBroker.oneway(sending);
+
+            //remove subscriber from map
+            i.remove();
         }
     }
 
@@ -1002,7 +1041,7 @@ public abstract class DemandForwardingBridgeSupport implements NetworkBridge, Br
                         });
                         if (isDuplex() && NetworkBridgeFilter.isAdvisoryInterpretedByNetworkBridge(message)) {
                             try {
-                                // never request b/c they are eventually acked async
+                                // never request b/c they are eventually                     acked async
                                 remoteBroker.oneway(message);
                             } finally {
                                 sub.decrementOutstandingResponses();
@@ -1064,6 +1103,8 @@ public abstract class DemandForwardingBridgeSupport implements NetworkBridge, Br
                     switch (command.getDataStructureType()) {
                         case WireFormatInfo.DATA_STRUCTURE_TYPE:
                             break;
+                        case BrokerSubscriptionInfo.DATA_STRUCTURE_TYPE:
+                            break;
                         default:
                             LOG.warn("Unexpected local command: {}", command);
                     }
@@ -1155,16 +1196,24 @@ public abstract class DemandForwardingBridgeSupport implements NetworkBridge, Br
 
         dests = dynamicallyIncludedDestinations;
         if (dests != null && dests.length > 0) {
+            return matchesDynamicallyIncludedDestinations(destination);
+        }
+
+        return true;
+    }
+
+    private boolean matchesDynamicallyIncludedDestinations(ActiveMQDestination destination) {
+        ActiveMQDestination[] dests = dynamicallyIncludedDestinations;
+        if (dests != null && dests.length > 0) {
             for (ActiveMQDestination dest : dests) {
                 DestinationFilter inclusionFilter = DestinationFilter.parseFilter(dest);
                 if (dest != null && inclusionFilter.matches(destination) && dest.getDestinationType() == destination.getDestinationType()) {
                     return true;
                 }
             }
-
-            return false;
         }
-        return true;
+
+        return false;
     }
 
     /**
@@ -1175,7 +1224,7 @@ public abstract class DemandForwardingBridgeSupport implements NetworkBridge, Br
         if (dests != null) {
             for (ActiveMQDestination dest : dests) {
                 if (isPermissableDestination(dest)) {
-                    DemandSubscription sub = createDemandSubscription(dest);
+                    DemandSubscription sub = createDemandSubscription(dest, null);
                     sub.setStaticallyIncluded(true);
                     try {
                         addSubscription(sub);
@@ -1348,11 +1397,15 @@ public abstract class DemandForwardingBridgeSupport implements NetworkBridge, Br
         return result;
     }
 
-    final protected DemandSubscription createDemandSubscription(ActiveMQDestination destination) {
+    final protected DemandSubscription createDemandSubscription(ActiveMQDestination destination, final String subscriptionName) {
         ConsumerInfo info = new ConsumerInfo();
         info.setNetworkSubscription(true);
         info.setDestination(destination);
 
+        if (subscriptionName != null) {
+            info.setSubscriptionName(subscriptionName);
+        }
+
         // Indicate that this subscription is being made on behalf of the remote broker.
         info.setBrokerPath(new BrokerId[]{remoteBrokerId});
 

http://git-wip-us.apache.org/repos/asf/activemq/blob/3953b9aa/activemq-broker/src/main/java/org/apache/activemq/network/DurableConduitBridge.java
----------------------------------------------------------------------
diff --git a/activemq-broker/src/main/java/org/apache/activemq/network/DurableConduitBridge.java b/activemq-broker/src/main/java/org/apache/activemq/network/DurableConduitBridge.java
index 4b6a6c7..237e272 100644
--- a/activemq-broker/src/main/java/org/apache/activemq/network/DurableConduitBridge.java
+++ b/activemq-broker/src/main/java/org/apache/activemq/network/DurableConduitBridge.java
@@ -73,7 +73,7 @@ public class DurableConduitBridge extends ConduitBridge {
                             for (Subscription subscription : topicRegion.getDurableSubscriptions().values()) {
                                 String subName = subscription.getConsumerInfo().getSubscriptionName();
                                 if (subName != null && subName.equals(candidateSubName)) {
-                                    DemandSubscription sub = createDemandSubscription(dest);
+                                    DemandSubscription sub = createDemandSubscription(dest, subName);
                                     sub.getLocalInfo().setSubscriptionName(getSubscriberName(dest));
                                     sub.setStaticallyIncluded(true);
                                     addSubscription(sub);

http://git-wip-us.apache.org/repos/asf/activemq/blob/3953b9aa/activemq-broker/src/main/java/org/apache/activemq/network/NetworkBridgeConfiguration.java
----------------------------------------------------------------------
diff --git a/activemq-broker/src/main/java/org/apache/activemq/network/NetworkBridgeConfiguration.java b/activemq-broker/src/main/java/org/apache/activemq/network/NetworkBridgeConfiguration.java
index 039aba0..9e596d4 100644
--- a/activemq-broker/src/main/java/org/apache/activemq/network/NetworkBridgeConfiguration.java
+++ b/activemq-broker/src/main/java/org/apache/activemq/network/NetworkBridgeConfiguration.java
@@ -31,6 +31,7 @@ public class NetworkBridgeConfiguration {
     private boolean conduitSubscriptions = true;
     private boolean useVirtualDestSubs;
     private boolean dynamicOnly;
+    private boolean syncDurableSubs;
     private boolean dispatchAsync = true;
     private boolean decreaseNetworkConsumerPriority;
     private int consumerPriorityBase = ConsumerInfo.NETWORK_CONSUMER_PRIORITY;
@@ -98,6 +99,14 @@ public class NetworkBridgeConfiguration {
         this.dynamicOnly = dynamicOnly;
     }
 
+    public boolean isSyncDurableSubs() {
+        return syncDurableSubs;
+    }
+
+    public void setSyncDurableSubs(boolean syncDurableSubs) {
+        this.syncDurableSubs = syncDurableSubs;
+    }
+
     /**
      * @return the bridgeTempDestinations
      */

http://git-wip-us.apache.org/repos/asf/activemq/blob/3953b9aa/activemq-client/pom.xml
----------------------------------------------------------------------
diff --git a/activemq-client/pom.xml b/activemq-client/pom.xml
index c634674..ef7aa12 100755
--- a/activemq-client/pom.xml
+++ b/activemq-client/pom.xml
@@ -308,7 +308,7 @@
               <tasks>
                 <echo>Running OpenWire Generator</echo>
                 <taskdef name="generate" classname="org.apache.activemq.openwire.tool.JavaGeneratorTask" classpathref="maven.compile.classpath" />
-                <generate version="11" basedir="${basedir}" generateTests="false" />
+                <generate version="12" basedir="${basedir}" generateTests="false" />
               </tasks>
             </configuration>
             <dependencies>

http://git-wip-us.apache.org/repos/asf/activemq/blob/3953b9aa/activemq-client/src/main/java/org/apache/activemq/command/BrokerInfo.java
----------------------------------------------------------------------
diff --git a/activemq-client/src/main/java/org/apache/activemq/command/BrokerInfo.java b/activemq-client/src/main/java/org/apache/activemq/command/BrokerInfo.java
index b542e61..685d204 100755
--- a/activemq-client/src/main/java/org/apache/activemq/command/BrokerInfo.java
+++ b/activemq-client/src/main/java/org/apache/activemq/command/BrokerInfo.java
@@ -26,9 +26,9 @@ import org.apache.activemq.util.MarshallingSupport;
  * so that the client knows which broker node he's talking to and also any peers
  * that the node has in his cluster. This is the broker helping the client out
  * in discovering other nodes in the cluster.
- * 
+ *
  * @openwire:marshaller code="2"
- * 
+ *
  */
 public class BrokerInfo extends BaseCommand {
     private static final String PASSIVE_SLAVE_KEY = "passiveSlave";
@@ -46,13 +46,13 @@ public class BrokerInfo extends BaseCommand {
     String brokerUploadUrl;
     String networkProperties;
     transient int refCount = 0;
-    
+
     public BrokerInfo copy() {
         BrokerInfo copy = new BrokerInfo();
         copy(copy);
         return copy;
     }
-    
+
     private void copy(BrokerInfo copy) {
         super.copy(copy);
         copy.brokerId = this.brokerId;
@@ -67,13 +67,14 @@ public class BrokerInfo extends BaseCommand {
         copy.connectionId = this.connectionId;
         copy.brokerUploadUrl = this.brokerUploadUrl;
         copy.networkProperties = this.networkProperties;
-    } 
+    }
 
     @Override
     public boolean isBrokerInfo() {
         return true;
     }
 
+    @Override
     public byte getDataStructureType() {
         return DATA_STRUCTURE_TYPE;
     }
@@ -122,6 +123,7 @@ public class BrokerInfo extends BaseCommand {
         this.brokerName = brokerName;
     }
 
+    @Override
     public Response visit(CommandVisitor visitor) throws Exception {
         return visitor.processBrokerInfo(this);
     }
@@ -198,7 +200,7 @@ public class BrokerInfo extends BaseCommand {
 
     /**
      * The broker assigns a each connection it accepts a connection id.
-     * 
+     *
      * @openwire:property version=2
      */
     public long getConnectionId() {
@@ -212,7 +214,7 @@ public class BrokerInfo extends BaseCommand {
     /**
      * The URL to use when uploading BLOBs to the broker or some other external
      * file/http server
-     * 
+     *
      * @openwire:property version=3
      */
     public String getBrokerUploadUrl() {
@@ -237,7 +239,7 @@ public class BrokerInfo extends BaseCommand {
     public void setNetworkProperties(String networkProperties) {
         this.networkProperties = networkProperties;
     }
-    
+
     public boolean isPassiveSlave() {
         boolean result = false;
         Properties props = getProperties();
@@ -246,7 +248,7 @@ public class BrokerInfo extends BaseCommand {
         }
         return result;
     }
-    
+
     public void setPassiveSlave(boolean value) {
         Properties props = new Properties();
         props.put(PASSIVE_SLAVE_KEY, Boolean.toString(value));
@@ -256,7 +258,7 @@ public class BrokerInfo extends BaseCommand {
             e.printStackTrace();
         }
     }
-    
+
     public Properties getProperties() {
         Properties result = null;
         try {

http://git-wip-us.apache.org/repos/asf/activemq/blob/3953b9aa/activemq-client/src/main/java/org/apache/activemq/command/BrokerSubscriptionInfo.java
----------------------------------------------------------------------
diff --git a/activemq-client/src/main/java/org/apache/activemq/command/BrokerSubscriptionInfo.java b/activemq-client/src/main/java/org/apache/activemq/command/BrokerSubscriptionInfo.java
new file mode 100644
index 0000000..57f854a
--- /dev/null
+++ b/activemq-client/src/main/java/org/apache/activemq/command/BrokerSubscriptionInfo.java
@@ -0,0 +1,99 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.activemq.command;
+
+import org.apache.activemq.state.CommandVisitor;
+
+/**
+ * Used to represent a durable subscription.
+ *
+ * @openwire:marshaller code="92"
+ *
+ */
+public class BrokerSubscriptionInfo extends BaseCommand {
+
+    public static final byte DATA_STRUCTURE_TYPE = CommandTypes.BROKER_SUBSCRIPTION_INFO;
+
+    BrokerId brokerId;
+    String brokerName;
+    ConsumerInfo subscriptionInfos[];
+
+    public BrokerSubscriptionInfo() {
+
+    }
+
+    public BrokerSubscriptionInfo(String brokerName) {
+        this.brokerName = brokerName;
+    }
+
+    public BrokerSubscriptionInfo copy() {
+        BrokerSubscriptionInfo copy = new BrokerSubscriptionInfo();
+        copy(copy);
+        return copy;
+    }
+
+    private void copy(BrokerSubscriptionInfo copy) {
+        super.copy(copy);
+        copy.subscriptionInfos = this.subscriptionInfos;
+        copy.brokerName = this.brokerName;
+        copy.brokerId = this.brokerId;
+    }
+
+    @Override
+    public Response visit(CommandVisitor visitor) throws Exception {
+        return visitor.processBrokerSubscriptionInfo(this);
+    }
+
+    @Override
+    public byte getDataStructureType() {
+        return DATA_STRUCTURE_TYPE;
+    }
+
+    /**
+     * @openwire:property version=12
+     */
+    public BrokerId getBrokerId() {
+        return brokerId;
+    }
+
+    public void setBrokerId(BrokerId brokerId) {
+        this.brokerId = brokerId;
+    }
+
+    /**
+     * @openwire:property version=12
+     */
+    public String getBrokerName() {
+        return brokerName;
+    }
+
+    public void setBrokerName(String brokerName) {
+        this.brokerName = brokerName;
+    }
+
+    /**
+     * @openwire:property version=12
+     */
+    public ConsumerInfo[] getSubscriptionInfos() {
+        return subscriptionInfos;
+    }
+
+    public void setSubscriptionInfos(ConsumerInfo[] subscriptionInfos) {
+        this.subscriptionInfos = subscriptionInfos;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/activemq/blob/3953b9aa/activemq-client/src/main/java/org/apache/activemq/command/CommandTypes.java
----------------------------------------------------------------------
diff --git a/activemq-client/src/main/java/org/apache/activemq/command/CommandTypes.java b/activemq-client/src/main/java/org/apache/activemq/command/CommandTypes.java
index e4bf463..67337fc 100755
--- a/activemq-client/src/main/java/org/apache/activemq/command/CommandTypes.java
+++ b/activemq-client/src/main/java/org/apache/activemq/command/CommandTypes.java
@@ -24,7 +24,7 @@ package org.apache.activemq.command;
 public interface CommandTypes {
 
     // What is the latest version of the openwire protocol
-    byte PROTOCOL_VERSION = 11;
+    byte PROTOCOL_VERSION = 12;
 
     // What is the latest version of the openwire protocol used in the stores
     byte PROTOCOL_STORE_VERSION = 11;
@@ -32,6 +32,9 @@ public interface CommandTypes {
     // What is the legacy version that old KahaDB store's most commonly used
     byte PROTOCOL_LEGACY_STORE_VERSION = 6;
 
+    // What is the first version that BROKER_SUBSCRIPTION_INFO is supported
+    byte PROTOCOL_VERSION_DURABLE_SYNC = 12;
+
     // A marshaling layer can use this type to specify a null object.
     byte NULL = 0;
 
@@ -93,7 +96,7 @@ public interface CommandTypes {
     //
     // Used by discovery
     //
-    // /////////////////////////////////////////////////
+    // /////////////////////////////////////////////////BROKER_SUBSCRIPTION_INFO
     byte DISCOVERY_EVENT = 40;
 
     // /////////////////////////////////////////////////
@@ -141,6 +144,7 @@ public interface CommandTypes {
 
     byte MESSAGE_DISPATCH_NOTIFICATION = 90;
     byte NETWORK_BRIDGE_FILTER = 91;
+    byte BROKER_SUBSCRIPTION_INFO = 92;
 
     // /////////////////////////////////////////////////
     //

http://git-wip-us.apache.org/repos/asf/activemq/blob/3953b9aa/activemq-client/src/main/java/org/apache/activemq/openwire/v12/ActiveMQBlobMessageMarshaller.java
----------------------------------------------------------------------
diff --git a/activemq-client/src/main/java/org/apache/activemq/openwire/v12/ActiveMQBlobMessageMarshaller.java b/activemq-client/src/main/java/org/apache/activemq/openwire/v12/ActiveMQBlobMessageMarshaller.java
new file mode 100644
index 0000000..56d1b3a
--- /dev/null
+++ b/activemq-client/src/main/java/org/apache/activemq/openwire/v12/ActiveMQBlobMessageMarshaller.java
@@ -0,0 +1,139 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.activemq.openwire.v12;
+
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+
+import org.apache.activemq.openwire.*;
+import org.apache.activemq.command.*;
+
+
+
+/**
+ * Marshalling code for Open Wire Format for ActiveMQBlobMessageMarshaller
+ *
+ *
+ * NOTE!: This file is auto generated - do not modify!
+ *        if you need to make a change, please see the modify the groovy scripts in the
+ *        under src/gram/script and then use maven openwire:generate to regenerate 
+ *        this file.
+ *
+ * 
+ */
+public class ActiveMQBlobMessageMarshaller extends ActiveMQMessageMarshaller {
+
+    /**
+     * Return the type of Data Structure we marshal
+     * @return short representation of the type data structure
+     */
+    public byte getDataStructureType() {
+        return ActiveMQBlobMessage.DATA_STRUCTURE_TYPE;
+    }
+    
+    /**
+     * @return a new object instance
+     */
+    public DataStructure createObject() {
+        return new ActiveMQBlobMessage();
+    }
+
+    /**
+     * Un-marshal an object instance from the data input stream
+     *
+     * @param o the object to un-marshal
+     * @param dataIn the data input stream to build the object from
+     * @throws IOException
+     */
+    public void tightUnmarshal(OpenWireFormat wireFormat, Object o, DataInput dataIn, BooleanStream bs) throws IOException {
+        super.tightUnmarshal(wireFormat, o, dataIn, bs);
+
+        ActiveMQBlobMessage info = (ActiveMQBlobMessage)o;
+        info.setRemoteBlobUrl(tightUnmarshalString(dataIn, bs));
+        info.setMimeType(tightUnmarshalString(dataIn, bs));
+        info.setDeletedByBroker(bs.readBoolean());
+
+    }
+
+
+    /**
+     * Write the booleans that this object uses to a BooleanStream
+     */
+    public int tightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs) throws IOException {
+
+        ActiveMQBlobMessage info = (ActiveMQBlobMessage)o;
+
+        int rc = super.tightMarshal1(wireFormat, o, bs);
+        rc += tightMarshalString1(info.getRemoteBlobUrl(), bs);
+        rc += tightMarshalString1(info.getMimeType(), bs);
+        bs.writeBoolean(info.isDeletedByBroker());
+
+        return rc + 0;
+    }
+
+    /**
+     * Write a object instance to data output stream
+     *
+     * @param o the instance to be marshaled
+     * @param dataOut the output stream
+     * @throws IOException thrown if an error occurs
+     */
+    public void tightMarshal2(OpenWireFormat wireFormat, Object o, DataOutput dataOut, BooleanStream bs) throws IOException {
+        super.tightMarshal2(wireFormat, o, dataOut, bs);
+
+        ActiveMQBlobMessage info = (ActiveMQBlobMessage)o;
+        tightMarshalString2(info.getRemoteBlobUrl(), dataOut, bs);
+        tightMarshalString2(info.getMimeType(), dataOut, bs);
+        bs.readBoolean();
+
+    }
+
+    /**
+     * Un-marshal an object instance from the data input stream
+     *
+     * @param o the object to un-marshal
+     * @param dataIn the data input stream to build the object from
+     * @throws IOException
+     */
+    public void looseUnmarshal(OpenWireFormat wireFormat, Object o, DataInput dataIn) throws IOException {
+        super.looseUnmarshal(wireFormat, o, dataIn);
+
+        ActiveMQBlobMessage info = (ActiveMQBlobMessage)o;
+        info.setRemoteBlobUrl(looseUnmarshalString(dataIn));
+        info.setMimeType(looseUnmarshalString(dataIn));
+        info.setDeletedByBroker(dataIn.readBoolean());
+
+    }
+
+
+    /**
+     * Write the booleans that this object uses to a BooleanStream
+     */
+    public void looseMarshal(OpenWireFormat wireFormat, Object o, DataOutput dataOut) throws IOException {
+
+        ActiveMQBlobMessage info = (ActiveMQBlobMessage)o;
+
+        super.looseMarshal(wireFormat, o, dataOut);
+        looseMarshalString(info.getRemoteBlobUrl(), dataOut);
+        looseMarshalString(info.getMimeType(), dataOut);
+        dataOut.writeBoolean(info.isDeletedByBroker());
+
+    }
+}

http://git-wip-us.apache.org/repos/asf/activemq/blob/3953b9aa/activemq-client/src/main/java/org/apache/activemq/openwire/v12/ActiveMQBytesMessageMarshaller.java
----------------------------------------------------------------------
diff --git a/activemq-client/src/main/java/org/apache/activemq/openwire/v12/ActiveMQBytesMessageMarshaller.java b/activemq-client/src/main/java/org/apache/activemq/openwire/v12/ActiveMQBytesMessageMarshaller.java
new file mode 100644
index 0000000..f8272c0
--- /dev/null
+++ b/activemq-client/src/main/java/org/apache/activemq/openwire/v12/ActiveMQBytesMessageMarshaller.java
@@ -0,0 +1,114 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.activemq.openwire.v12;
+
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+
+import org.apache.activemq.openwire.*;
+import org.apache.activemq.command.*;
+
+
+
+/**
+ * Marshalling code for Open Wire Format for ActiveMQBytesMessageMarshaller
+ *
+ *
+ * NOTE!: This file is auto generated - do not modify!
+ *        if you need to make a change, please see the modify the groovy scripts in the
+ *        under src/gram/script and then use maven openwire:generate to regenerate 
+ *        this file.
+ *
+ * 
+ */
+public class ActiveMQBytesMessageMarshaller extends ActiveMQMessageMarshaller {
+
+    /**
+     * Return the type of Data Structure we marshal
+     * @return short representation of the type data structure
+     */
+    public byte getDataStructureType() {
+        return ActiveMQBytesMessage.DATA_STRUCTURE_TYPE;
+    }
+    
+    /**
+     * @return a new object instance
+     */
+    public DataStructure createObject() {
+        return new ActiveMQBytesMessage();
+    }
+
+    /**
+     * Un-marshal an object instance from the data input stream
+     *
+     * @param o the object to un-marshal
+     * @param dataIn the data input stream to build the object from
+     * @throws IOException
+     */
+    public void tightUnmarshal(OpenWireFormat wireFormat, Object o, DataInput dataIn, BooleanStream bs) throws IOException {
+        super.tightUnmarshal(wireFormat, o, dataIn, bs);
+
+    }
+
+
+    /**
+     * Write the booleans that this object uses to a BooleanStream
+     */
+    public int tightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs) throws IOException {
+
+        int rc = super.tightMarshal1(wireFormat, o, bs);
+
+        return rc + 0;
+    }
+
+    /**
+     * Write a object instance to data output stream
+     *
+     * @param o the instance to be marshaled
+     * @param dataOut the output stream
+     * @throws IOException thrown if an error occurs
+     */
+    public void tightMarshal2(OpenWireFormat wireFormat, Object o, DataOutput dataOut, BooleanStream bs) throws IOException {
+        super.tightMarshal2(wireFormat, o, dataOut, bs);
+
+    }
+
+    /**
+     * Un-marshal an object instance from the data input stream
+     *
+     * @param o the object to un-marshal
+     * @param dataIn the data input stream to build the object from
+     * @throws IOException
+     */
+    public void looseUnmarshal(OpenWireFormat wireFormat, Object o, DataInput dataIn) throws IOException {
+        super.looseUnmarshal(wireFormat, o, dataIn);
+
+    }
+
+
+    /**
+     * Write the booleans that this object uses to a BooleanStream
+     */
+    public void looseMarshal(OpenWireFormat wireFormat, Object o, DataOutput dataOut) throws IOException {
+
+        super.looseMarshal(wireFormat, o, dataOut);
+
+    }
+}

http://git-wip-us.apache.org/repos/asf/activemq/blob/3953b9aa/activemq-client/src/main/java/org/apache/activemq/openwire/v12/ActiveMQDestinationMarshaller.java
----------------------------------------------------------------------
diff --git a/activemq-client/src/main/java/org/apache/activemq/openwire/v12/ActiveMQDestinationMarshaller.java b/activemq-client/src/main/java/org/apache/activemq/openwire/v12/ActiveMQDestinationMarshaller.java
new file mode 100644
index 0000000..c75b700
--- /dev/null
+++ b/activemq-client/src/main/java/org/apache/activemq/openwire/v12/ActiveMQDestinationMarshaller.java
@@ -0,0 +1,114 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.activemq.openwire.v12;
+
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+
+import org.apache.activemq.openwire.*;
+import org.apache.activemq.command.*;
+
+
+
+/**
+ * Marshalling code for Open Wire Format for ActiveMQDestinationMarshaller
+ *
+ *
+ * NOTE!: This file is auto generated - do not modify!
+ *        if you need to make a change, please see the modify the groovy scripts in the
+ *        under src/gram/script and then use maven openwire:generate to regenerate 
+ *        this file.
+ *
+ * 
+ */
+public abstract class ActiveMQDestinationMarshaller extends BaseDataStreamMarshaller {
+
+    /**
+     * Un-marshal an object instance from the data input stream
+     *
+     * @param o the object to un-marshal
+     * @param dataIn the data input stream to build the object from
+     * @throws IOException
+     */
+    public void tightUnmarshal(OpenWireFormat wireFormat, Object o, DataInput dataIn, BooleanStream bs) throws IOException {
+        super.tightUnmarshal(wireFormat, o, dataIn, bs);
+
+        ActiveMQDestination info = (ActiveMQDestination)o;
+        info.setPhysicalName(tightUnmarshalString(dataIn, bs));
+
+    }
+
+
+    /**
+     * Write the booleans that this object uses to a BooleanStream
+     */
+    public int tightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs) throws IOException {
+
+        ActiveMQDestination info = (ActiveMQDestination)o;
+
+        int rc = super.tightMarshal1(wireFormat, o, bs);
+        rc += tightMarshalString1(info.getPhysicalName(), bs);
+
+        return rc + 0;
+    }
+
+    /**
+     * Write a object instance to data output stream
+     *
+     * @param o the instance to be marshaled
+     * @param dataOut the output stream
+     * @throws IOException thrown if an error occurs
+     */
+    public void tightMarshal2(OpenWireFormat wireFormat, Object o, DataOutput dataOut, BooleanStream bs) throws IOException {
+        super.tightMarshal2(wireFormat, o, dataOut, bs);
+
+        ActiveMQDestination info = (ActiveMQDestination)o;
+        tightMarshalString2(info.getPhysicalName(), dataOut, bs);
+
+    }
+
+    /**
+     * Un-marshal an object instance from the data input stream
+     *
+     * @param o the object to un-marshal
+     * @param dataIn the data input stream to build the object from
+     * @throws IOException
+     */
+    public void looseUnmarshal(OpenWireFormat wireFormat, Object o, DataInput dataIn) throws IOException {
+        super.looseUnmarshal(wireFormat, o, dataIn);
+
+        ActiveMQDestination info = (ActiveMQDestination)o;
+        info.setPhysicalName(looseUnmarshalString(dataIn));
+
+    }
+
+
+    /**
+     * Write the booleans that this object uses to a BooleanStream
+     */
+    public void looseMarshal(OpenWireFormat wireFormat, Object o, DataOutput dataOut) throws IOException {
+
+        ActiveMQDestination info = (ActiveMQDestination)o;
+
+        super.looseMarshal(wireFormat, o, dataOut);
+        looseMarshalString(info.getPhysicalName(), dataOut);
+
+    }
+}

http://git-wip-us.apache.org/repos/asf/activemq/blob/3953b9aa/activemq-client/src/main/java/org/apache/activemq/openwire/v12/ActiveMQMapMessageMarshaller.java
----------------------------------------------------------------------
diff --git a/activemq-client/src/main/java/org/apache/activemq/openwire/v12/ActiveMQMapMessageMarshaller.java b/activemq-client/src/main/java/org/apache/activemq/openwire/v12/ActiveMQMapMessageMarshaller.java
new file mode 100644
index 0000000..3df89ea
--- /dev/null
+++ b/activemq-client/src/main/java/org/apache/activemq/openwire/v12/ActiveMQMapMessageMarshaller.java
@@ -0,0 +1,114 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.activemq.openwire.v12;
+
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+
+import org.apache.activemq.openwire.*;
+import org.apache.activemq.command.*;
+
+
+
+/**
+ * Marshalling code for Open Wire Format for ActiveMQMapMessageMarshaller
+ *
+ *
+ * NOTE!: This file is auto generated - do not modify!
+ *        if you need to make a change, please see the modify the groovy scripts in the
+ *        under src/gram/script and then use maven openwire:generate to regenerate 
+ *        this file.
+ *
+ * 
+ */
+public class ActiveMQMapMessageMarshaller extends ActiveMQMessageMarshaller {
+
+    /**
+     * Return the type of Data Structure we marshal
+     * @return short representation of the type data structure
+     */
+    public byte getDataStructureType() {
+        return ActiveMQMapMessage.DATA_STRUCTURE_TYPE;
+    }
+    
+    /**
+     * @return a new object instance
+     */
+    public DataStructure createObject() {
+        return new ActiveMQMapMessage();
+    }
+
+    /**
+     * Un-marshal an object instance from the data input stream
+     *
+     * @param o the object to un-marshal
+     * @param dataIn the data input stream to build the object from
+     * @throws IOException
+     */
+    public void tightUnmarshal(OpenWireFormat wireFormat, Object o, DataInput dataIn, BooleanStream bs) throws IOException {
+        super.tightUnmarshal(wireFormat, o, dataIn, bs);
+
+    }
+
+
+    /**
+     * Write the booleans that this object uses to a BooleanStream
+     */
+    public int tightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs) throws IOException {
+
+        int rc = super.tightMarshal1(wireFormat, o, bs);
+
+        return rc + 0;
+    }
+
+    /**
+     * Write a object instance to data output stream
+     *
+     * @param o the instance to be marshaled
+     * @param dataOut the output stream
+     * @throws IOException thrown if an error occurs
+     */
+    public void tightMarshal2(OpenWireFormat wireFormat, Object o, DataOutput dataOut, BooleanStream bs) throws IOException {
+        super.tightMarshal2(wireFormat, o, dataOut, bs);
+
+    }
+
+    /**
+     * Un-marshal an object instance from the data input stream
+     *
+     * @param o the object to un-marshal
+     * @param dataIn the data input stream to build the object from
+     * @throws IOException
+     */
+    public void looseUnmarshal(OpenWireFormat wireFormat, Object o, DataInput dataIn) throws IOException {
+        super.looseUnmarshal(wireFormat, o, dataIn);
+
+    }
+
+
+    /**
+     * Write the booleans that this object uses to a BooleanStream
+     */
+    public void looseMarshal(OpenWireFormat wireFormat, Object o, DataOutput dataOut) throws IOException {
+
+        super.looseMarshal(wireFormat, o, dataOut);
+
+    }
+}

http://git-wip-us.apache.org/repos/asf/activemq/blob/3953b9aa/activemq-client/src/main/java/org/apache/activemq/openwire/v12/ActiveMQMessageMarshaller.java
----------------------------------------------------------------------
diff --git a/activemq-client/src/main/java/org/apache/activemq/openwire/v12/ActiveMQMessageMarshaller.java b/activemq-client/src/main/java/org/apache/activemq/openwire/v12/ActiveMQMessageMarshaller.java
new file mode 100644
index 0000000..cda644c
--- /dev/null
+++ b/activemq-client/src/main/java/org/apache/activemq/openwire/v12/ActiveMQMessageMarshaller.java
@@ -0,0 +1,114 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.activemq.openwire.v12;
+
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+
+import org.apache.activemq.openwire.*;
+import org.apache.activemq.command.*;
+
+
+
+/**
+ * Marshalling code for Open Wire Format for ActiveMQMessageMarshaller
+ *
+ *
+ * NOTE!: This file is auto generated - do not modify!
+ *        if you need to make a change, please see the modify the groovy scripts in the
+ *        under src/gram/script and then use maven openwire:generate to regenerate 
+ *        this file.
+ *
+ * 
+ */
+public class ActiveMQMessageMarshaller extends MessageMarshaller {
+
+    /**
+     * Return the type of Data Structure we marshal
+     * @return short representation of the type data structure
+     */
+    public byte getDataStructureType() {
+        return ActiveMQMessage.DATA_STRUCTURE_TYPE;
+    }
+    
+    /**
+     * @return a new object instance
+     */
+    public DataStructure createObject() {
+        return new ActiveMQMessage();
+    }
+
+    /**
+     * Un-marshal an object instance from the data input stream
+     *
+     * @param o the object to un-marshal
+     * @param dataIn the data input stream to build the object from
+     * @throws IOException
+     */
+    public void tightUnmarshal(OpenWireFormat wireFormat, Object o, DataInput dataIn, BooleanStream bs) throws IOException {
+        super.tightUnmarshal(wireFormat, o, dataIn, bs);
+
+    }
+
+
+    /**
+     * Write the booleans that this object uses to a BooleanStream
+     */
+    public int tightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs) throws IOException {
+
+        int rc = super.tightMarshal1(wireFormat, o, bs);
+
+        return rc + 0;
+    }
+
+    /**
+     * Write a object instance to data output stream
+     *
+     * @param o the instance to be marshaled
+     * @param dataOut the output stream
+     * @throws IOException thrown if an error occurs
+     */
+    public void tightMarshal2(OpenWireFormat wireFormat, Object o, DataOutput dataOut, BooleanStream bs) throws IOException {
+        super.tightMarshal2(wireFormat, o, dataOut, bs);
+
+    }
+
+    /**
+     * Un-marshal an object instance from the data input stream
+     *
+     * @param o the object to un-marshal
+     * @param dataIn the data input stream to build the object from
+     * @throws IOException
+     */
+    public void looseUnmarshal(OpenWireFormat wireFormat, Object o, DataInput dataIn) throws IOException {
+        super.looseUnmarshal(wireFormat, o, dataIn);
+
+    }
+
+
+    /**
+     * Write the booleans that this object uses to a BooleanStream
+     */
+    public void looseMarshal(OpenWireFormat wireFormat, Object o, DataOutput dataOut) throws IOException {
+
+        super.looseMarshal(wireFormat, o, dataOut);
+
+    }
+}

http://git-wip-us.apache.org/repos/asf/activemq/blob/3953b9aa/activemq-client/src/main/java/org/apache/activemq/openwire/v12/ActiveMQObjectMessageMarshaller.java
----------------------------------------------------------------------
diff --git a/activemq-client/src/main/java/org/apache/activemq/openwire/v12/ActiveMQObjectMessageMarshaller.java b/activemq-client/src/main/java/org/apache/activemq/openwire/v12/ActiveMQObjectMessageMarshaller.java
new file mode 100644
index 0000000..c815a56
--- /dev/null
+++ b/activemq-client/src/main/java/org/apache/activemq/openwire/v12/ActiveMQObjectMessageMarshaller.java
@@ -0,0 +1,114 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.activemq.openwire.v12;
+
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+
+import org.apache.activemq.openwire.*;
+import org.apache.activemq.command.*;
+
+
+
+/**
+ * Marshalling code for Open Wire Format for ActiveMQObjectMessageMarshaller
+ *
+ *
+ * NOTE!: This file is auto generated - do not modify!
+ *        if you need to make a change, please see the modify the groovy scripts in the
+ *        under src/gram/script and then use maven openwire:generate to regenerate 
+ *        this file.
+ *
+ * 
+ */
+public class ActiveMQObjectMessageMarshaller extends ActiveMQMessageMarshaller {
+
+    /**
+     * Return the type of Data Structure we marshal
+     * @return short representation of the type data structure
+     */
+    public byte getDataStructureType() {
+        return ActiveMQObjectMessage.DATA_STRUCTURE_TYPE;
+    }
+    
+    /**
+     * @return a new object instance
+     */
+    public DataStructure createObject() {
+        return new ActiveMQObjectMessage();
+    }
+
+    /**
+     * Un-marshal an object instance from the data input stream
+     *
+     * @param o the object to un-marshal
+     * @param dataIn the data input stream to build the object from
+     * @throws IOException
+     */
+    public void tightUnmarshal(OpenWireFormat wireFormat, Object o, DataInput dataIn, BooleanStream bs) throws IOException {
+        super.tightUnmarshal(wireFormat, o, dataIn, bs);
+
+    }
+
+
+    /**
+     * Write the booleans that this object uses to a BooleanStream
+     */
+    public int tightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs) throws IOException {
+
+        int rc = super.tightMarshal1(wireFormat, o, bs);
+
+        return rc + 0;
+    }
+
+    /**
+     * Write a object instance to data output stream
+     *
+     * @param o the instance to be marshaled
+     * @param dataOut the output stream
+     * @throws IOException thrown if an error occurs
+     */
+    public void tightMarshal2(OpenWireFormat wireFormat, Object o, DataOutput dataOut, BooleanStream bs) throws IOException {
+        super.tightMarshal2(wireFormat, o, dataOut, bs);
+
+    }
+
+    /**
+     * Un-marshal an object instance from the data input stream
+     *
+     * @param o the object to un-marshal
+     * @param dataIn the data input stream to build the object from
+     * @throws IOException
+     */
+    public void looseUnmarshal(OpenWireFormat wireFormat, Object o, DataInput dataIn) throws IOException {
+        super.looseUnmarshal(wireFormat, o, dataIn);
+
+    }
+
+
+    /**
+     * Write the booleans that this object uses to a BooleanStream
+     */
+    public void looseMarshal(OpenWireFormat wireFormat, Object o, DataOutput dataOut) throws IOException {
+
+        super.looseMarshal(wireFormat, o, dataOut);
+
+    }
+}

http://git-wip-us.apache.org/repos/asf/activemq/blob/3953b9aa/activemq-client/src/main/java/org/apache/activemq/openwire/v12/ActiveMQQueueMarshaller.java
----------------------------------------------------------------------
diff --git a/activemq-client/src/main/java/org/apache/activemq/openwire/v12/ActiveMQQueueMarshaller.java b/activemq-client/src/main/java/org/apache/activemq/openwire/v12/ActiveMQQueueMarshaller.java
new file mode 100644
index 0000000..00fa9ca
--- /dev/null
+++ b/activemq-client/src/main/java/org/apache/activemq/openwire/v12/ActiveMQQueueMarshaller.java
@@ -0,0 +1,114 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.activemq.openwire.v12;
+
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+
+import org.apache.activemq.openwire.*;
+import org.apache.activemq.command.*;
+
+
+
+/**
+ * Marshalling code for Open Wire Format for ActiveMQQueueMarshaller
+ *
+ *
+ * NOTE!: This file is auto generated - do not modify!
+ *        if you need to make a change, please see the modify the groovy scripts in the
+ *        under src/gram/script and then use maven openwire:generate to regenerate 
+ *        this file.
+ *
+ * 
+ */
+public class ActiveMQQueueMarshaller extends ActiveMQDestinationMarshaller {
+
+    /**
+     * Return the type of Data Structure we marshal
+     * @return short representation of the type data structure
+     */
+    public byte getDataStructureType() {
+        return ActiveMQQueue.DATA_STRUCTURE_TYPE;
+    }
+    
+    /**
+     * @return a new object instance
+     */
+    public DataStructure createObject() {
+        return new ActiveMQQueue();
+    }
+
+    /**
+     * Un-marshal an object instance from the data input stream
+     *
+     * @param o the object to un-marshal
+     * @param dataIn the data input stream to build the object from
+     * @throws IOException
+     */
+    public void tightUnmarshal(OpenWireFormat wireFormat, Object o, DataInput dataIn, BooleanStream bs) throws IOException {
+        super.tightUnmarshal(wireFormat, o, dataIn, bs);
+
+    }
+
+
+    /**
+     * Write the booleans that this object uses to a BooleanStream
+     */
+    public int tightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs) throws IOException {
+
+        int rc = super.tightMarshal1(wireFormat, o, bs);
+
+        return rc + 0;
+    }
+
+    /**
+     * Write a object instance to data output stream
+     *
+     * @param o the instance to be marshaled
+     * @param dataOut the output stream
+     * @throws IOException thrown if an error occurs
+     */
+    public void tightMarshal2(OpenWireFormat wireFormat, Object o, DataOutput dataOut, BooleanStream bs) throws IOException {
+        super.tightMarshal2(wireFormat, o, dataOut, bs);
+
+    }
+
+    /**
+     * Un-marshal an object instance from the data input stream
+     *
+     * @param o the object to un-marshal
+     * @param dataIn the data input stream to build the object from
+     * @throws IOException
+     */
+    public void looseUnmarshal(OpenWireFormat wireFormat, Object o, DataInput dataIn) throws IOException {
+        super.looseUnmarshal(wireFormat, o, dataIn);
+
+    }
+
+
+    /**
+     * Write the booleans that this object uses to a BooleanStream
+     */
+    public void looseMarshal(OpenWireFormat wireFormat, Object o, DataOutput dataOut) throws IOException {
+
+        super.looseMarshal(wireFormat, o, dataOut);
+
+    }
+}

http://git-wip-us.apache.org/repos/asf/activemq/blob/3953b9aa/activemq-client/src/main/java/org/apache/activemq/openwire/v12/ActiveMQStreamMessageMarshaller.java
----------------------------------------------------------------------
diff --git a/activemq-client/src/main/java/org/apache/activemq/openwire/v12/ActiveMQStreamMessageMarshaller.java b/activemq-client/src/main/java/org/apache/activemq/openwire/v12/ActiveMQStreamMessageMarshaller.java
new file mode 100644
index 0000000..b8acc6f
--- /dev/null
+++ b/activemq-client/src/main/java/org/apache/activemq/openwire/v12/ActiveMQStreamMessageMarshaller.java
@@ -0,0 +1,114 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.activemq.openwire.v12;
+
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+
+import org.apache.activemq.openwire.*;
+import org.apache.activemq.command.*;
+
+
+
+/**
+ * Marshalling code for Open Wire Format for ActiveMQStreamMessageMarshaller
+ *
+ *
+ * NOTE!: This file is auto generated - do not modify!
+ *        if you need to make a change, please see the modify the groovy scripts in the
+ *        under src/gram/script and then use maven openwire:generate to regenerate 
+ *        this file.
+ *
+ * 
+ */
+public class ActiveMQStreamMessageMarshaller extends ActiveMQMessageMarshaller {
+
+    /**
+     * Return the type of Data Structure we marshal
+     * @return short representation of the type data structure
+     */
+    public byte getDataStructureType() {
+        return ActiveMQStreamMessage.DATA_STRUCTURE_TYPE;
+    }
+    
+    /**
+     * @return a new object instance
+     */
+    public DataStructure createObject() {
+        return new ActiveMQStreamMessage();
+    }
+
+    /**
+     * Un-marshal an object instance from the data input stream
+     *
+     * @param o the object to un-marshal
+     * @param dataIn the data input stream to build the object from
+     * @throws IOException
+     */
+    public void tightUnmarshal(OpenWireFormat wireFormat, Object o, DataInput dataIn, BooleanStream bs) throws IOException {
+        super.tightUnmarshal(wireFormat, o, dataIn, bs);
+
+    }
+
+
+    /**
+     * Write the booleans that this object uses to a BooleanStream
+     */
+    public int tightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs) throws IOException {
+
+        int rc = super.tightMarshal1(wireFormat, o, bs);
+
+        return rc + 0;
+    }
+
+    /**
+     * Write a object instance to data output stream
+     *
+     * @param o the instance to be marshaled
+     * @param dataOut the output stream
+     * @throws IOException thrown if an error occurs
+     */
+    public void tightMarshal2(OpenWireFormat wireFormat, Object o, DataOutput dataOut, BooleanStream bs) throws IOException {
+        super.tightMarshal2(wireFormat, o, dataOut, bs);
+
+    }
+
+    /**
+     * Un-marshal an object instance from the data input stream
+     *
+     * @param o the object to un-marshal
+     * @param dataIn the data input stream to build the object from
+     * @throws IOException
+     */
+    public void looseUnmarshal(OpenWireFormat wireFormat, Object o, DataInput dataIn) throws IOException {
+        super.looseUnmarshal(wireFormat, o, dataIn);
+
+    }
+
+
+    /**
+     * Write the booleans that this object uses to a BooleanStream
+     */
+    public void looseMarshal(OpenWireFormat wireFormat, Object o, DataOutput dataOut) throws IOException {
+
+        super.looseMarshal(wireFormat, o, dataOut);
+
+    }
+}

http://git-wip-us.apache.org/repos/asf/activemq/blob/3953b9aa/activemq-client/src/main/java/org/apache/activemq/openwire/v12/ActiveMQTempDestinationMarshaller.java
----------------------------------------------------------------------
diff --git a/activemq-client/src/main/java/org/apache/activemq/openwire/v12/ActiveMQTempDestinationMarshaller.java b/activemq-client/src/main/java/org/apache/activemq/openwire/v12/ActiveMQTempDestinationMarshaller.java
new file mode 100644
index 0000000..de52962
--- /dev/null
+++ b/activemq-client/src/main/java/org/apache/activemq/openwire/v12/ActiveMQTempDestinationMarshaller.java
@@ -0,0 +1,99 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.activemq.openwire.v12;
+
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+
+import org.apache.activemq.openwire.*;
+import org.apache.activemq.command.*;
+
+
+
+/**
+ * Marshalling code for Open Wire Format for ActiveMQTempDestinationMarshaller
+ *
+ *
+ * NOTE!: This file is auto generated - do not modify!
+ *        if you need to make a change, please see the modify the groovy scripts in the
+ *        under src/gram/script and then use maven openwire:generate to regenerate 
+ *        this file.
+ *
+ * 
+ */
+public abstract class ActiveMQTempDestinationMarshaller extends ActiveMQDestinationMarshaller {
+
+    /**
+     * Un-marshal an object instance from the data input stream
+     *
+     * @param o the object to un-marshal
+     * @param dataIn the data input stream to build the object from
+     * @throws IOException
+     */
+    public void tightUnmarshal(OpenWireFormat wireFormat, Object o, DataInput dataIn, BooleanStream bs) throws IOException {
+        super.tightUnmarshal(wireFormat, o, dataIn, bs);
+
+    }
+
+
+    /**
+     * Write the booleans that this object uses to a BooleanStream
+     */
+    public int tightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs) throws IOException {
+
+        int rc = super.tightMarshal1(wireFormat, o, bs);
+
+        return rc + 0;
+    }
+
+    /**
+     * Write a object instance to data output stream
+     *
+     * @param o the instance to be marshaled
+     * @param dataOut the output stream
+     * @throws IOException thrown if an error occurs
+     */
+    public void tightMarshal2(OpenWireFormat wireFormat, Object o, DataOutput dataOut, BooleanStream bs) throws IOException {
+        super.tightMarshal2(wireFormat, o, dataOut, bs);
+
+    }
+
+    /**
+     * Un-marshal an object instance from the data input stream
+     *
+     * @param o the object to un-marshal
+     * @param dataIn the data input stream to build the object from
+     * @throws IOException
+     */
+    public void looseUnmarshal(OpenWireFormat wireFormat, Object o, DataInput dataIn) throws IOException {
+        super.looseUnmarshal(wireFormat, o, dataIn);
+
+    }
+
+
+    /**
+     * Write the booleans that this object uses to a BooleanStream
+     */
+    public void looseMarshal(OpenWireFormat wireFormat, Object o, DataOutput dataOut) throws IOException {
+
+        super.looseMarshal(wireFormat, o, dataOut);
+
+    }
+}

http://git-wip-us.apache.org/repos/asf/activemq/blob/3953b9aa/activemq-client/src/main/java/org/apache/activemq/openwire/v12/ActiveMQTempQueueMarshaller.java
----------------------------------------------------------------------
diff --git a/activemq-client/src/main/java/org/apache/activemq/openwire/v12/ActiveMQTempQueueMarshaller.java b/activemq-client/src/main/java/org/apache/activemq/openwire/v12/ActiveMQTempQueueMarshaller.java
new file mode 100644
index 0000000..334db89
--- /dev/null
+++ b/activemq-client/src/main/java/org/apache/activemq/openwire/v12/ActiveMQTempQueueMarshaller.java
@@ -0,0 +1,114 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.activemq.openwire.v12;
+
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+
+import org.apache.activemq.openwire.*;
+import org.apache.activemq.command.*;
+
+
+
+/**
+ * Marshalling code for Open Wire Format for ActiveMQTempQueueMarshaller
+ *
+ *
+ * NOTE!: This file is auto generated - do not modify!
+ *        if you need to make a change, please see the modify the groovy scripts in the
+ *        under src/gram/script and then use maven openwire:generate to regenerate 
+ *        this file.
+ *
+ * 
+ */
+public class ActiveMQTempQueueMarshaller extends ActiveMQTempDestinationMarshaller {
+
+    /**
+     * Return the type of Data Structure we marshal
+     * @return short representation of the type data structure
+     */
+    public byte getDataStructureType() {
+        return ActiveMQTempQueue.DATA_STRUCTURE_TYPE;
+    }
+    
+    /**
+     * @return a new object instance
+     */
+    public DataStructure createObject() {
+        return new ActiveMQTempQueue();
+    }
+
+    /**
+     * Un-marshal an object instance from the data input stream
+     *
+     * @param o the object to un-marshal
+     * @param dataIn the data input stream to build the object from
+     * @throws IOException
+     */
+    public void tightUnmarshal(OpenWireFormat wireFormat, Object o, DataInput dataIn, BooleanStream bs) throws IOException {
+        super.tightUnmarshal(wireFormat, o, dataIn, bs);
+
+    }
+
+
+    /**
+     * Write the booleans that this object uses to a BooleanStream
+     */
+    public int tightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs) throws IOException {
+
+        int rc = super.tightMarshal1(wireFormat, o, bs);
+
+        return rc + 0;
+    }
+
+    /**
+     * Write a object instance to data output stream
+     *
+     * @param o the instance to be marshaled
+     * @param dataOut the output stream
+     * @throws IOException thrown if an error occurs
+     */
+    public void tightMarshal2(OpenWireFormat wireFormat, Object o, DataOutput dataOut, BooleanStream bs) throws IOException {
+        super.tightMarshal2(wireFormat, o, dataOut, bs);
+
+    }
+
+    /**
+     * Un-marshal an object instance from the data input stream
+     *
+     * @param o the object to un-marshal
+     * @param dataIn the data input stream to build the object from
+     * @throws IOException
+     */
+    public void looseUnmarshal(OpenWireFormat wireFormat, Object o, DataInput dataIn) throws IOException {
+        super.looseUnmarshal(wireFormat, o, dataIn);
+
+    }
+
+
+    /**
+     * Write the booleans that this object uses to a BooleanStream
+     */
+    public void looseMarshal(OpenWireFormat wireFormat, Object o, DataOutput dataOut) throws IOException {
+
+        super.looseMarshal(wireFormat, o, dataOut);
+
+    }
+}

http://git-wip-us.apache.org/repos/asf/activemq/blob/3953b9aa/activemq-client/src/main/java/org/apache/activemq/openwire/v12/ActiveMQTempTopicMarshaller.java
----------------------------------------------------------------------
diff --git a/activemq-client/src/main/java/org/apache/activemq/openwire/v12/ActiveMQTempTopicMarshaller.java b/activemq-client/src/main/java/org/apache/activemq/openwire/v12/ActiveMQTempTopicMarshaller.java
new file mode 100644
index 0000000..2ba15c9
--- /dev/null
+++ b/activemq-client/src/main/java/org/apache/activemq/openwire/v12/ActiveMQTempTopicMarshaller.java
@@ -0,0 +1,114 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.activemq.openwire.v12;
+
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+
+import org.apache.activemq.openwire.*;
+import org.apache.activemq.command.*;
+
+
+
+/**
+ * Marshalling code for Open Wire Format for ActiveMQTempTopicMarshaller
+ *
+ *
+ * NOTE!: This file is auto generated - do not modify!
+ *        if you need to make a change, please see the modify the groovy scripts in the
+ *        under src/gram/script and then use maven openwire:generate to regenerate 
+ *        this file.
+ *
+ * 
+ */
+public class ActiveMQTempTopicMarshaller extends ActiveMQTempDestinationMarshaller {
+
+    /**
+     * Return the type of Data Structure we marshal
+     * @return short representation of the type data structure
+     */
+    public byte getDataStructureType() {
+        return ActiveMQTempTopic.DATA_STRUCTURE_TYPE;
+    }
+    
+    /**
+     * @return a new object instance
+     */
+    public DataStructure createObject() {
+        return new ActiveMQTempTopic();
+    }
+
+    /**
+     * Un-marshal an object instance from the data input stream
+     *
+     * @param o the object to un-marshal
+     * @param dataIn the data input stream to build the object from
+     * @throws IOException
+     */
+    public void tightUnmarshal(OpenWireFormat wireFormat, Object o, DataInput dataIn, BooleanStream bs) throws IOException {
+        super.tightUnmarshal(wireFormat, o, dataIn, bs);
+
+    }
+
+
+    /**
+     * Write the booleans that this object uses to a BooleanStream
+     */
+    public int tightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs) throws IOException {
+
+        int rc = super.tightMarshal1(wireFormat, o, bs);
+
+        return rc + 0;
+    }
+
+    /**
+     * Write a object instance to data output stream
+     *
+     * @param o the instance to be marshaled
+     * @param dataOut the output stream
+     * @throws IOException thrown if an error occurs
+     */
+    public void tightMarshal2(OpenWireFormat wireFormat, Object o, DataOutput dataOut, BooleanStream bs) throws IOException {
+        super.tightMarshal2(wireFormat, o, dataOut, bs);
+
+    }
+
+    /**
+     * Un-marshal an object instance from the data input stream
+     *
+     * @param o the object to un-marshal
+     * @param dataIn the data input stream to build the object from
+     * @throws IOException
+     */
+    public void looseUnmarshal(OpenWireFormat wireFormat, Object o, DataInput dataIn) throws IOException {
+        super.looseUnmarshal(wireFormat, o, dataIn);
+
+    }
+
+
+    /**
+     * Write the booleans that this object uses to a BooleanStream
+     */
+    public void looseMarshal(OpenWireFormat wireFormat, Object o, DataOutput dataOut) throws IOException {
+
+        super.looseMarshal(wireFormat, o, dataOut);
+
+    }
+}

http://git-wip-us.apache.org/repos/asf/activemq/blob/3953b9aa/activemq-client/src/main/java/org/apache/activemq/openwire/v12/ActiveMQTextMessageMarshaller.java
----------------------------------------------------------------------
diff --git a/activemq-client/src/main/java/org/apache/activemq/openwire/v12/ActiveMQTextMessageMarshaller.java b/activemq-client/src/main/java/org/apache/activemq/openwire/v12/ActiveMQTextMessageMarshaller.java
new file mode 100644
index 0000000..971cb96
--- /dev/null
+++ b/activemq-client/src/main/java/org/apache/activemq/openwire/v12/ActiveMQTextMessageMarshaller.java
@@ -0,0 +1,114 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.activemq.openwire.v12;
+
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+
+import org.apache.activemq.openwire.*;
+import org.apache.activemq.command.*;
+
+
+
+/**
+ * Marshalling code for Open Wire Format for ActiveMQTextMessageMarshaller
+ *
+ *
+ * NOTE!: This file is auto generated - do not modify!
+ *        if you need to make a change, please see the modify the groovy scripts in the
+ *        under src/gram/script and then use maven openwire:generate to regenerate 
+ *        this file.
+ *
+ * 
+ */
+public class ActiveMQTextMessageMarshaller extends ActiveMQMessageMarshaller {
+
+    /**
+     * Return the type of Data Structure we marshal
+     * @return short representation of the type data structure
+     */
+    public byte getDataStructureType() {
+        return ActiveMQTextMessage.DATA_STRUCTURE_TYPE;
+    }
+    
+    /**
+     * @return a new object instance
+     */
+    public DataStructure createObject() {
+        return new ActiveMQTextMessage();
+    }
+
+    /**
+     * Un-marshal an object instance from the data input stream
+     *
+     * @param o the object to un-marshal
+     * @param dataIn the data input stream to build the object from
+     * @throws IOException
+     */
+    public void tightUnmarshal(OpenWireFormat wireFormat, Object o, DataInput dataIn, BooleanStream bs) throws IOException {
+        super.tightUnmarshal(wireFormat, o, dataIn, bs);
+
+    }
+
+
+    /**
+     * Write the booleans that this object uses to a BooleanStream
+     */
+    public int tightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs) throws IOException {
+
+        int rc = super.tightMarshal1(wireFormat, o, bs);
+
+        return rc + 0;
+    }
+
+    /**
+     * Write a object instance to data output stream
+     *
+     * @param o the instance to be marshaled
+     * @param dataOut the output stream
+     * @throws IOException thrown if an error occurs
+     */
+    public void tightMarshal2(OpenWireFormat wireFormat, Object o, DataOutput dataOut, BooleanStream bs) throws IOException {
+        super.tightMarshal2(wireFormat, o, dataOut, bs);
+
+    }
+
+    /**
+     * Un-marshal an object instance from the data input stream
+     *
+     * @param o the object to un-marshal
+     * @param dataIn the data input stream to build the object from
+     * @throws IOException
+     */
+    public void looseUnmarshal(OpenWireFormat wireFormat, Object o, DataInput dataIn) throws IOException {
+        super.looseUnmarshal(wireFormat, o, dataIn);
+
+    }
+
+
+    /**
+     * Write the booleans that this object uses to a BooleanStream
+     */
+    public void looseMarshal(OpenWireFormat wireFormat, Object o, DataOutput dataOut) throws IOException {
+
+        super.looseMarshal(wireFormat, o, dataOut);
+
+    }
+}


Mime
View raw message