diff options
| author | Keith Wall <kwall@apache.org> | 2014-01-23 11:01:02 +0000 |
|---|---|---|
| committer | Keith Wall <kwall@apache.org> | 2014-01-23 11:01:02 +0000 |
| commit | 3d82eb9c42bf4dce8ac38029a7a808d8a3aa3ce2 (patch) | |
| tree | c6d59cfe2fbdd30f50afc7d3add06806e224b2a3 /qpid/java | |
| parent | 597a1a6e9a12a8d5119fa7a3ddc0a8cd958dd8a4 (diff) | |
| parent | ac51ca3f2be3df75c54eae14a50dc2e3d758b693 (diff) | |
| download | qpid-python-3d82eb9c42bf4dce8ac38029a7a808d8a3aa3ce2.tar.gz | |
Merge changes from the trunk in revisions 1558036:1560619 using
svn merge -r 1558036:1560619 https://svn.apache.org/repos/asf/qpid/trunk
git-svn-id: https://svn.apache.org/repos/asf/qpid/branches/java-broker-bdb-ha@1560634 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java')
201 files changed, 1717 insertions, 2371 deletions
diff --git a/qpid/java/bdbstore/jmx/pom.xml b/qpid/java/bdbstore/jmx/pom.xml index 3480460972..82ece2c66f 100644 --- a/qpid/java/bdbstore/jmx/pom.xml +++ b/qpid/java/bdbstore/jmx/pom.xml @@ -49,6 +49,13 @@ </dependency> <dependency> + <groupId>log4j</groupId> + <artifactId>log4j</artifactId> + <version>${log4j-version}</version> + <scope>compile</scope> + </dependency> + + <dependency> <groupId>com.sleepycat</groupId> <artifactId>je</artifactId> <version>5.0.84</version> diff --git a/qpid/java/bdbstore/pom.xml b/qpid/java/bdbstore/pom.xml index c90f904171..ec71547038 100644 --- a/qpid/java/bdbstore/pom.xml +++ b/qpid/java/bdbstore/pom.xml @@ -41,6 +41,13 @@ </dependency> <dependency> + <groupId>log4j</groupId> + <artifactId>log4j</artifactId> + <version>${log4j-version}</version> + <scope>compile</scope> + </dependency> + + <dependency> <groupId>com.sleepycat</groupId> <artifactId>je</artifactId> <version>5.0.97</version> diff --git a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/upgrade/UpgradeFrom4To5.java b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/upgrade/UpgradeFrom4To5.java index 4c9eae6f3e..9d52241c4c 100644 --- a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/upgrade/UpgradeFrom4To5.java +++ b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/upgrade/UpgradeFrom4To5.java @@ -663,9 +663,8 @@ public class UpgradeFrom4To5 extends AbstractStoreUpgrade { final MessagePublishInfo publishBody = readMessagePublishInfo(input); final ContentHeaderBody contentHeaderBody = readContentHeaderBody(input); - final int contentChunkCount = input.readInt(); - return new MessageMetaData(publishBody, contentHeaderBody, contentChunkCount); + return new MessageMetaData(publishBody, contentHeaderBody); } catch (Exception e) { diff --git a/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBStoreUpgradeTestPreparer.java b/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBStoreUpgradeTestPreparer.java index ed6024feb1..c7e6e1f745 100644 --- a/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBStoreUpgradeTestPreparer.java +++ b/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBStoreUpgradeTestPreparer.java @@ -44,6 +44,7 @@ import javax.management.remote.JMXConnector; import javax.management.remote.JMXConnectorFactory; import javax.management.remote.JMXServiceURL; +import org.apache.log4j.Logger; import org.apache.qpid.client.AMQConnectionFactory; import org.apache.qpid.client.AMQDestination; import org.apache.qpid.client.AMQSession; @@ -64,6 +65,8 @@ import org.apache.qpid.url.URLSyntaxException; */ public class BDBStoreUpgradeTestPreparer { + private static final Logger _logger = Logger.getLogger(BDBStoreUpgradeTestPreparer.class); + public static final String TOPIC_NAME="myUpgradeTopic"; public static final String SUB_NAME="myDurSubName"; public static final String SELECTOR_SUB_NAME="mySelectorDurSubName"; @@ -131,7 +134,7 @@ public class BDBStoreUpgradeTestPreparer { public void onException(JMSException e) { - e.printStackTrace(); + _logger.error("Error setting exception listener for connection", e); } }); // Create a session on the connection, transacted to confirm delivery @@ -225,7 +228,7 @@ public class BDBStoreUpgradeTestPreparer { public void onException(JMSException e) { - e.printStackTrace(); + _logger.error("Error setting exception listener for connection", e); } }); // Create a session on the connection, transacted to confirm delivery @@ -270,7 +273,7 @@ public class BDBStoreUpgradeTestPreparer { public void onException(JMSException e) { - e.printStackTrace(); + _logger.error("Error setting exception listener for connection", e); } }); // Create a session on the connection, transacted to confirm delivery diff --git a/qpid/java/bdbstore/systests/pom.xml b/qpid/java/bdbstore/systests/pom.xml index fd229bc9d6..5cf42e8b35 100644 --- a/qpid/java/bdbstore/systests/pom.xml +++ b/qpid/java/bdbstore/systests/pom.xml @@ -27,10 +27,10 @@ <artifactId>qpid-bdbstore-systests</artifactId> <properties> - <broker.home.dir>target/qpid-broker/${project.version}</broker.home.dir> + <broker.home.dir>target${file.separator}qpid-broker${file.separator}${project.version}</broker.home.dir> <!-- test properties --> - <qpid.home>${basedir}/${broker.home.dir}</qpid.home> - <qpid.home.qbtc.output>${qpid.home}/qbtc-output</qpid.home.qbtc.output> + <qpid.home>${basedir}${file.separator}${broker.home.dir}</qpid.home> + <qpid.home.qbtc.output>${qpid.home}${file.separator}qbtc-output</qpid.home.qbtc.output> </properties> <dependencies> @@ -56,6 +56,20 @@ </dependency> <dependency> + <groupId>log4j</groupId> + <artifactId>log4j</artifactId> + <version>${log4j-version}</version> + <scope>compile</scope> + </dependency> + + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-api</artifactId> + <version>${slf4j-version}</version> + <scope>compile</scope> + </dependency> + + <dependency> <groupId>org.apache.geronimo.specs</groupId> <artifactId>geronimo-jms_1.1_spec</artifactId> <version>1.0</version> @@ -109,6 +123,9 @@ <!-- Skip the default test phase, bind to the integration-test phase below instead --> <skip>true</skip> + <systemPropertyVariables> + <log4j.configuration.file>${project.basedir}${file.separator}..${file.separator}..${file.separator}test-profiles${file.separator}log4j-test.xml</log4j.configuration.file> + </systemPropertyVariables> </configuration> <executions> <execution> diff --git a/qpid/java/bdbstore/systests/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBBackupTest.java b/qpid/java/bdbstore/systests/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBBackupTest.java index 73eaf363ad..1b9fa0be9c 100644 --- a/qpid/java/bdbstore/systests/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBBackupTest.java +++ b/qpid/java/bdbstore/systests/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBBackupTest.java @@ -34,6 +34,7 @@ import org.apache.log4j.Logger; import org.apache.qpid.test.utils.Piper; import org.apache.qpid.test.utils.QpidBrokerTestCase; import org.apache.qpid.util.FileUtils; +import org.apache.qpid.util.SystemUtils; /** * Tests the BDB backup script can successfully perform a backup and that @@ -134,7 +135,7 @@ public class BDBBackupTest extends QpidBrokerTestCase private void invokeBdbBackup(final File backupFromDir, final File backupToDir) throws Exception { - if (IS_OS_WINDOWS) + if (SystemUtils.isWindows()) { BDBBackup.main(new String[]{"-todir", backupToDir.getAbsolutePath(), "-fromdir", backupFromDir.getAbsolutePath()}); } diff --git a/qpid/java/bdbstore/systests/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBMessageStoreTest.java b/qpid/java/bdbstore/systests/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBMessageStoreTest.java index 679defcb66..fe0fcc9eee 100644 --- a/qpid/java/bdbstore/systests/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBMessageStoreTest.java +++ b/qpid/java/bdbstore/systests/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBMessageStoreTest.java @@ -100,7 +100,7 @@ public class BDBMessageStoreTest extends MessageStoreTest ContentHeaderBody chb_0_8 = createContentHeaderBody_0_8(props_0_8, bodySize); - MessageMetaData messageMetaData_0_8 = new MessageMetaData(pubInfoBody_0_8, chb_0_8, 0); + MessageMetaData messageMetaData_0_8 = new MessageMetaData(pubInfoBody_0_8, chb_0_8); StoredMessage<MessageMetaData> storedMessage_0_8 = bdbStore.addMessage(messageMetaData_0_8); long origArrivalTime_0_8 = messageMetaData_0_8.getArrivalTime(); @@ -156,7 +156,7 @@ public class BDBMessageStoreTest extends MessageStoreTest assertEquals("ContentHeader weight has changed", chb_0_8.getWeight(), returnedHeaderBody_0_8.getWeight()); assertEquals("ContentHeader bodySize has changed", chb_0_8.getBodySize(), returnedHeaderBody_0_8.getBodySize()); - BasicContentHeaderProperties returnedProperties_0_8 = (BasicContentHeaderProperties) returnedHeaderBody_0_8.getProperties(); + BasicContentHeaderProperties returnedProperties_0_8 = returnedHeaderBody_0_8.getProperties(); assertEquals("Property ContentType has changed", props_0_8.getContentTypeAsString(), returnedProperties_0_8.getContentTypeAsString()); assertEquals("Property MessageID has changed", props_0_8.getMessageIdAsString(), returnedProperties_0_8.getMessageIdAsString()); @@ -401,7 +401,7 @@ public class BDBMessageStoreTest extends MessageStoreTest ContentHeaderBody chb_0_8 = createContentHeaderBody_0_8(props_0_8, bodySize); - MessageMetaData messageMetaData_0_8 = new MessageMetaData(pubInfoBody_0_8, chb_0_8, 0); + MessageMetaData messageMetaData_0_8 = new MessageMetaData(pubInfoBody_0_8, chb_0_8); StoredMessage<MessageMetaData> storedMessage_0_8 = store.addMessage(messageMetaData_0_8); storedMessage_0_8.addContent(0, chunk1); @@ -617,5 +617,11 @@ public class BDBMessageStoreTest extends MessageStoreTest { return null; } + + @Override + public Object getConnectionReference() + { + return null; + } } } diff --git a/qpid/java/broker-core/pom.xml b/qpid/java/broker-core/pom.xml index a872bf565a..7254de0251 100644 --- a/qpid/java/broker-core/pom.xml +++ b/qpid/java/broker-core/pom.xml @@ -47,21 +47,21 @@ <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> - <version>1.2.16</version> + <version>${log4j-version}</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> - <version>1.6.4</version> + <version>${slf4j-version}</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> - <version>1.6.4</version> + <version>${slf4j-version}</version> <scope>compile</scope> </dependency> diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/AbstractExchange.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/AbstractExchange.java index ac2fa5e60d..b00d98637e 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/AbstractExchange.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/AbstractExchange.java @@ -32,7 +32,8 @@ import org.apache.qpid.server.logging.messages.BindingMessages; import org.apache.qpid.server.logging.messages.ExchangeMessages; import org.apache.qpid.server.logging.subjects.BindingLogSubject; import org.apache.qpid.server.logging.subjects.ExchangeLogSubject; -import org.apache.qpid.server.message.InboundMessage; +import org.apache.qpid.server.message.InstanceProperties; +import org.apache.qpid.server.message.ServerMessage; import org.apache.qpid.server.model.UUIDGenerator; import org.apache.qpid.server.plugin.ExchangeType; import org.apache.qpid.server.queue.AMQQueue; @@ -373,11 +374,13 @@ public abstract class AbstractExchange implements Exchange return getBindings().size(); } - public final List<? extends BaseQueue> route(final InboundMessage message) + @Override + public final List<? extends BaseQueue> route(final ServerMessage message, + final InstanceProperties instanceProperties) { _receivedMessageCount.incrementAndGet(); _receivedMessageSize.addAndGet(message.getSize()); - List<? extends BaseQueue> queues = doRoute(message); + List<? extends BaseQueue> queues = doRoute(message, instanceProperties); List<? extends BaseQueue> allQueues = queues; boolean deletedQueues = false; @@ -413,7 +416,8 @@ public abstract class AbstractExchange implements Exchange return queues; } - protected abstract List<? extends BaseQueue> doRoute(final InboundMessage message); + protected abstract List<? extends BaseQueue> doRoute(final ServerMessage message, + final InstanceProperties instanceProperties); public long getMsgReceives() { diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/DefaultExchange.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/DefaultExchange.java index 5aea60f1b5..e2582019cd 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/DefaultExchange.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/DefaultExchange.java @@ -35,7 +35,8 @@ import org.apache.qpid.server.binding.Binding; import org.apache.qpid.server.logging.LogSubject; import org.apache.qpid.server.logging.actors.CurrentActor; import org.apache.qpid.server.logging.messages.ExchangeMessages; -import org.apache.qpid.server.message.InboundMessage; +import org.apache.qpid.server.message.InstanceProperties; +import org.apache.qpid.server.message.ServerMessage; import org.apache.qpid.server.model.UUIDGenerator; import org.apache.qpid.server.plugin.ExchangeType; import org.apache.qpid.server.queue.AMQQueue; @@ -203,7 +204,7 @@ public class DefaultExchange implements Exchange } @Override - public List<AMQQueue> route(InboundMessage message) + public List<AMQQueue> route(ServerMessage message, final InstanceProperties instanceProperties) { AMQQueue q = _virtualHost.getQueue(message.getRoutingKey()); if(q == null) diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/DirectExchange.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/DirectExchange.java index 4571ec09af..2d65c22727 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/DirectExchange.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/DirectExchange.java @@ -27,8 +27,11 @@ import java.util.Set; import org.apache.log4j.Logger; import org.apache.qpid.AMQInvalidArgumentException; import org.apache.qpid.server.binding.Binding; +import org.apache.qpid.server.filter.FilterSupport; +import org.apache.qpid.server.filter.Filterable; import org.apache.qpid.server.filter.MessageFilter; -import org.apache.qpid.server.message.InboundMessage; +import org.apache.qpid.server.message.InstanceProperties; +import org.apache.qpid.server.message.ServerMessage; import org.apache.qpid.server.plugin.ExchangeType; import org.apache.qpid.server.queue.AMQQueue; import org.apache.qpid.server.queue.BaseQueue; @@ -130,7 +133,8 @@ public class DirectExchange extends AbstractExchange super(TYPE); } - public List<? extends BaseQueue> doRoute(InboundMessage payload) + @Override + public List<? extends BaseQueue> doRoute(ServerMessage payload, final InstanceProperties instanceProperties) { final String routingKey = payload.getRoutingKey(); @@ -151,7 +155,7 @@ public class DirectExchange extends AbstractExchange if(!queuesSet.contains(entry.getKey())) { MessageFilter filter = entry.getValue(); - if(filter.matches(payload)) + if(filter.matches(Filterable.Factory.newInstance(payload, instanceProperties))) { queuesSet.add(entry.getKey()); } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/Exchange.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/Exchange.java index d05e731daa..78455c9261 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/Exchange.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/Exchange.java @@ -24,7 +24,8 @@ import org.apache.qpid.AMQException; import org.apache.qpid.AMQInternalException; import org.apache.qpid.AMQSecurityException; import org.apache.qpid.server.binding.Binding; -import org.apache.qpid.server.message.InboundMessage; +import org.apache.qpid.server.message.InstanceProperties; +import org.apache.qpid.server.message.ServerMessage; import org.apache.qpid.server.plugin.ExchangeType; import org.apache.qpid.server.queue.AMQQueue; import org.apache.qpid.server.queue.BaseQueue; @@ -98,7 +99,7 @@ public interface Exchange extends ExchangeReferrer * * @return list of queues to which to route the message. */ - List<? extends BaseQueue> route(InboundMessage message); + List<? extends BaseQueue> route(ServerMessage message, final InstanceProperties instanceProperties); /** diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/FanoutExchange.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/FanoutExchange.java index 6665fe5a9d..22b0fed6b2 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/FanoutExchange.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/FanoutExchange.java @@ -29,8 +29,11 @@ import org.apache.log4j.Logger; import org.apache.qpid.AMQInvalidArgumentException; import org.apache.qpid.server.binding.Binding; +import org.apache.qpid.server.filter.FilterSupport; +import org.apache.qpid.server.filter.Filterable; import org.apache.qpid.server.filter.MessageFilter; -import org.apache.qpid.server.message.InboundMessage; +import org.apache.qpid.server.message.InstanceProperties; +import org.apache.qpid.server.message.ServerMessage; import org.apache.qpid.server.plugin.ExchangeType; import org.apache.qpid.server.queue.AMQQueue; import org.apache.qpid.server.queue.BaseQueue; @@ -66,7 +69,8 @@ public class FanoutExchange extends AbstractExchange super(TYPE); } - public ArrayList<BaseQueue> doRoute(InboundMessage payload) + @Override + public ArrayList<BaseQueue> doRoute(ServerMessage payload, final InstanceProperties instanceProperties) { for(Binding b : getBindings()) @@ -87,7 +91,7 @@ public class FanoutExchange extends AbstractExchange { for(MessageFilter filter : bindingMessageFilterMap.values()) { - if(filter.matches(payload)) + if(filter.matches(Filterable.Factory.newInstance(payload,instanceProperties))) { result.add(q); break; diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/HeadersBinding.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/HeadersBinding.java index 474c0862ad..276a38e7f8 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/HeadersBinding.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/HeadersBinding.java @@ -24,6 +24,7 @@ import org.apache.log4j.Logger; import org.apache.qpid.AMQInvalidArgumentException; import org.apache.qpid.server.binding.Binding; +import org.apache.qpid.server.filter.FilterSupport; import org.apache.qpid.server.filter.MessageFilter; import org.apache.qpid.server.message.AMQMessageHeader; @@ -31,8 +32,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; -import org.apache.qpid.server.message.InboundMessage; -import org.apache.qpid.server.queue.Filterable; +import org.apache.qpid.server.filter.Filterable; /** * Defines binding and matching based on a set of headers. @@ -135,7 +135,7 @@ class HeadersBinding } } - public boolean matches(InboundMessage message) + public boolean matches(Filterable message) { return matches(message.getMessageHeader()) && (_filter == null || _filter.matches(message)); } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/HeadersExchange.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/HeadersExchange.java index 977ac7249e..a8b0ae601c 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/HeadersExchange.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/HeadersExchange.java @@ -23,7 +23,9 @@ package org.apache.qpid.server.exchange; import org.apache.log4j.Logger; import org.apache.qpid.server.binding.Binding; -import org.apache.qpid.server.message.InboundMessage; +import org.apache.qpid.server.filter.Filterable; +import org.apache.qpid.server.message.InstanceProperties; +import org.apache.qpid.server.message.ServerMessage; import org.apache.qpid.server.plugin.ExchangeType; import org.apache.qpid.server.queue.AMQQueue; import org.apache.qpid.server.queue.BaseQueue; @@ -81,8 +83,8 @@ public class HeadersExchange extends AbstractExchange super(TYPE); } - - public ArrayList<BaseQueue> doRoute(InboundMessage payload) + @Override + public ArrayList<BaseQueue> doRoute(ServerMessage payload, final InstanceProperties instanceProperties) { if (_logger.isDebugEnabled()) { @@ -93,7 +95,7 @@ public class HeadersExchange extends AbstractExchange for (HeadersBinding hb : _bindingHeaderMatchers) { - if (hb.matches(payload)) + if (hb.matches(Filterable.Factory.newInstance(payload,instanceProperties))) { Binding b = hb.getBinding(); diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/TopicExchange.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/TopicExchange.java index 7085d72390..d86d5cd769 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/TopicExchange.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/TopicExchange.java @@ -34,7 +34,10 @@ import org.apache.qpid.server.exchange.topic.TopicExchangeResult; import org.apache.qpid.server.exchange.topic.TopicMatcherResult; import org.apache.qpid.server.exchange.topic.TopicNormalizer; import org.apache.qpid.server.exchange.topic.TopicParser; -import org.apache.qpid.server.message.InboundMessage; +import org.apache.qpid.server.filter.FilterSupport; +import org.apache.qpid.server.filter.Filterable; +import org.apache.qpid.server.message.InstanceProperties; +import org.apache.qpid.server.message.ServerMessage; import org.apache.qpid.server.plugin.ExchangeType; import org.apache.qpid.server.queue.AMQQueue; import org.apache.qpid.server.queue.BaseQueue; @@ -144,15 +147,16 @@ public class TopicExchange extends AbstractExchange } - - public ArrayList<BaseQueue> doRoute(InboundMessage payload) + @Override + public ArrayList<BaseQueue> doRoute(ServerMessage payload, final InstanceProperties instanceProperties) { final String routingKey = payload.getRoutingKey() == null ? "" : payload.getRoutingKey(); - final Collection<AMQQueue> matchedQueues = getMatchedQueues(payload, routingKey); + final Collection<AMQQueue> matchedQueues = + getMatchedQueues(Filterable.Factory.newInstance(payload,instanceProperties), routingKey); ArrayList<BaseQueue> queues; @@ -209,7 +213,7 @@ public class TopicExchange extends AbstractExchange } } - private Collection<AMQQueue> getMatchedQueues(InboundMessage message, String routingKey) + private Collection<AMQQueue> getMatchedQueues(Filterable message, String routingKey) { Collection<TopicMatcherResult> results = _parser.parse(routingKey); diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/topic/TopicExchangeResult.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/topic/TopicExchangeResult.java index 44d5f7f1d0..77060cb146 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/topic/TopicExchangeResult.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/topic/TopicExchangeResult.java @@ -21,8 +21,8 @@ package org.apache.qpid.server.exchange.topic; import org.apache.qpid.server.binding.Binding; +import org.apache.qpid.server.filter.Filterable; import org.apache.qpid.server.filter.MessageFilter; -import org.apache.qpid.server.message.InboundMessage; import org.apache.qpid.server.queue.AMQQueue; import java.util.ArrayList; @@ -168,7 +168,7 @@ public final class TopicExchangeResult implements TopicMatcherResult _filteredQueues.put(queue,newFilters); } - public Collection<AMQQueue> processMessage(InboundMessage msg, Collection<AMQQueue> queues) + public Collection<AMQQueue> processMessage(Filterable msg, Collection<AMQQueue> queues) { if(queues == null) { diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/filter/FilterManager.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/filter/FilterManager.java index b5e282038b..4992b960c4 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/filter/FilterManager.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/filter/FilterManager.java @@ -23,8 +23,6 @@ package org.apache.qpid.server.filter; // Based on like named file from r450141 of the Apache ActiveMQ project <http://www.activemq.org/site/home.html> // -import org.apache.qpid.server.queue.Filterable; - public interface FilterManager { void add(MessageFilter filter); diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/FilterSupport.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/filter/FilterSupport.java index 9968ae6f5e..b50424868a 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/FilterSupport.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/filter/FilterSupport.java @@ -19,7 +19,7 @@ * */ -package org.apache.qpid.server.exchange; +package org.apache.qpid.server.filter; import java.lang.ref.WeakReference; import java.util.Collections; @@ -30,12 +30,8 @@ import org.apache.qpid.common.AMQPFilterTypes; import org.apache.qpid.filter.SelectorParsingException; import org.apache.qpid.filter.selector.ParseException; import org.apache.qpid.filter.selector.TokenMgrError; -import org.apache.qpid.server.filter.JMSSelectorFilter; -import org.apache.qpid.server.filter.MessageFilter; -import org.apache.qpid.server.message.InboundMessage; import org.apache.qpid.server.protocol.AMQSessionModel; import org.apache.qpid.server.queue.AMQQueue; -import org.apache.qpid.server.queue.Filterable; public class FilterSupport { @@ -104,7 +100,7 @@ public class FilterSupport && ((String)args.get(AMQPFilterTypes.JMS_SELECTOR.toString())).trim().length() != 0; } - static MessageFilter createMessageFilter(final Map<String,Object> args, AMQQueue queue) throws AMQInvalidArgumentException + public static MessageFilter createMessageFilter(final Map<String,Object> args, AMQQueue queue) throws AMQInvalidArgumentException { if(argumentsContainNoLocal(args)) { @@ -133,9 +129,9 @@ public class FilterSupport public boolean matches(Filterable message) { - InboundMessage inbound = (InboundMessage) message; final AMQSessionModel exclusiveOwningSession = _queue.getExclusiveOwningSession(); - return exclusiveOwningSession == null || !exclusiveOwningSession.onSameConnection(inbound); + return exclusiveOwningSession == null || + exclusiveOwningSession.getConnectionReference() != message.getConnectionReference(); } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/filter/Filterable.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/filter/Filterable.java new file mode 100644 index 0000000000..6958ac106b --- /dev/null +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/filter/Filterable.java @@ -0,0 +1,72 @@ +/* +* +* 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.qpid.server.filter; + +import org.apache.qpid.server.message.AMQMessageHeader; +import org.apache.qpid.server.message.InstanceProperties; +import org.apache.qpid.server.message.ServerMessage; +import org.apache.qpid.server.queue.QueueEntry; +import org.apache.qpid.server.queue.QueueEntryInstanceProperties; + +public interface Filterable +{ + AMQMessageHeader getMessageHeader(); + + boolean isPersistent(); + + boolean isRedelivered(); + + Object getConnectionReference(); + + public class Factory + { + + public static Filterable newInstance(final ServerMessage message, final InstanceProperties properties) + { + return new Filterable() + { + @Override + public AMQMessageHeader getMessageHeader() + { + return message.getMessageHeader(); + } + + @Override + public boolean isPersistent() + { + return Boolean.TRUE.equals(properties.getProperty(InstanceProperties.Property.PERSISTENT)); + } + + @Override + public boolean isRedelivered() + { + return Boolean.TRUE.equals(properties.getProperty(InstanceProperties.Property.REDELIVERED)); + } + + @Override + public Object getConnectionReference() + { + return message.getConnectionReference(); + } + }; + } + } +} diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/filter/JMSSelectorFilter.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/filter/JMSSelectorFilter.java index 3d0d9a0f31..744e4e4e9d 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/filter/JMSSelectorFilter.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/filter/JMSSelectorFilter.java @@ -31,7 +31,6 @@ import org.apache.qpid.filter.SelectorParsingException; import org.apache.qpid.filter.selector.ParseException; import org.apache.qpid.filter.selector.SelectorParser; import org.apache.qpid.filter.selector.TokenMgrError; -import org.apache.qpid.server.queue.Filterable; public class JMSSelectorFilter implements MessageFilter diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/filter/MessageFilter.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/filter/MessageFilter.java index f5416af09a..d7dbbea166 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/filter/MessageFilter.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/filter/MessageFilter.java @@ -20,8 +20,6 @@ */ package org.apache.qpid.server.filter; -import org.apache.qpid.server.queue.Filterable; - public interface MessageFilter { boolean matches(Filterable message); diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/filter/NoConsumerFilter.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/filter/NoConsumerFilter.java index d3e097d22c..cf73bfa21f 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/filter/NoConsumerFilter.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/filter/NoConsumerFilter.java @@ -23,7 +23,6 @@ package org.apache.qpid.server.filter; import org.apache.log4j.Logger; import org.apache.qpid.AMQException; -import org.apache.qpid.server.queue.Filterable; public class NoConsumerFilter implements MessageFilter { diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/filter/SimpleFilterManager.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/filter/SimpleFilterManager.java index 6c158de8b5..ddbee299a1 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/filter/SimpleFilterManager.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/filter/SimpleFilterManager.java @@ -22,8 +22,6 @@ package org.apache.qpid.server.filter; import org.apache.log4j.Logger; -import org.apache.qpid.server.queue.Filterable; - import java.util.concurrent.ConcurrentLinkedQueue; public class SimpleFilterManager implements FilterManager diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/logging/log4j/LoggingManagementFacade.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/logging/log4j/LoggingManagementFacade.java index 6a961c8fa4..5b411e2d8d 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/logging/log4j/LoggingManagementFacade.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/logging/log4j/LoggingManagementFacade.java @@ -25,6 +25,8 @@ import org.apache.log4j.LogManager; import org.apache.log4j.Logger; import org.apache.log4j.xml.DOMConfigurator; import org.apache.log4j.xml.Log4jEntityResolver; +import org.apache.qpid.util.FileUtils; +import org.apache.qpid.util.SystemUtils; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; @@ -293,7 +295,9 @@ public class LoggingManagementFacade public List<String> getAvailableLoggerLevels() { return new ArrayList<String>() - {{ + { + private static final long serialVersionUID = 599203507907836466L; + { add(Level.ALL.toString()); add(Level.TRACE.toString()); add(Level.DEBUG.toString()); @@ -364,6 +368,65 @@ public class LoggingManagementFacade throw new IOException("Specified log4j XML configuration file is not writable"); } + // Swap temp file in to replace existing configuration file. + File old = new File(log4jConfigFile.getAbsoluteFile() + ".old"); + if (old.exists()) + { + old.delete(); + } + + if(!SystemUtils.isWindows()) + { + + File tmp; + Random r = new Random(); + + final String absolutePath = log4jConfigFile.getAbsolutePath(); + do + { + tmp = new File(absolutePath + r.nextInt() + ".tmp"); + } + while(tmp.exists()); + + tmp.deleteOnExit(); + + writeConfigToFile(doc, new FileOutputStream(tmp)); + + if(!log4jConfigFile.renameTo(old)) + { + //unable to rename the existing file to the backup name + LOGGER.error("Could not backup the existing log4j XML file"); + throw new IOException("Could not backup the existing log4j XML file"); + } + + if(!tmp.renameTo(new File(absolutePath))) + { + //failed to rename the new file to the required filename + + if(!old.renameTo(log4jConfigFile)) + { + //unable to return the backup to required filename + LOGGER.error("Could not rename the new log4j configuration file into place, and unable to restore original file"); + throw new IOException("Could not rename the new log4j configuration file into place, and unable to restore original file"); + } + + LOGGER.error("Could not rename the new log4j configuration file into place"); + throw new IOException("Could not rename the new log4j configuration file into place"); + } + } + else + { + // In windows we can't do a safe rename current -> old, tmp -> current as it will not allow + // a new file with the same name as current to be created while it is still open. + + // Instead we have to do an unsafe "copy current to old", "replace current contents with tmp contents" + FileUtils.copy(log4jConfigFile,old); + writeConfigToFile(doc, new FileOutputStream(log4jConfigFile)); + } + } + + private void writeConfigToFile(Document doc, FileOutputStream outputFile) throws TransformerConfigurationException, IOException + { Transformer transformer = null; transformer = TransformerFactory.newInstance().newTransformer(); @@ -371,20 +434,10 @@ public class LoggingManagementFacade transformer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, "log4j.dtd"); DOMSource source = new DOMSource(doc); - File tmp; - Random r = new Random(); - - do - { - tmp = new File(log4jConfigFile.getAbsolutePath() + r.nextInt() + ".tmp"); - } - while(tmp.exists()); - - tmp.deleteOnExit(); try { - StreamResult result = new StreamResult(new FileOutputStream(tmp)); + StreamResult result = new StreamResult(outputFile); transformer.transform(source, result); } catch (TransformerException e) @@ -392,35 +445,6 @@ public class LoggingManagementFacade LOGGER.warn("Could not transform the XML into new file: ", e); throw new IOException("Could not transform the XML into new file: ", e); } - - // Swap temp file in to replace existing configuration file. - File old = new File(log4jConfigFile.getAbsoluteFile() + ".old"); - if (old.exists()) - { - old.delete(); - } - - if(!log4jConfigFile.renameTo(old)) - { - //unable to rename the existing file to the backup name - LOGGER.error("Could not backup the existing log4j XML file"); - throw new IOException("Could not backup the existing log4j XML file"); - } - - if(!tmp.renameTo(log4jConfigFile)) - { - //failed to rename the new file to the required filename - - if(!old.renameTo(log4jConfigFile)) - { - //unable to return the backup to required filename - LOGGER.error("Could not rename the new log4j configuration file into place, and unable to restore original file"); - throw new IOException("Could not rename the new log4j configuration file into place, and unable to restore original file"); - } - - LOGGER.error("Could not rename the new log4j configuration file into place"); - throw new IOException("Could not rename the new log4j configuration file into place"); - } } //method to parse the XML configuration file, validating it in the process, and returning a DOM Document of the content. diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/message/AMQMessageHeader.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/message/AMQMessageHeader.java index 63bd1e45a0..d19f127b16 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/message/AMQMessageHeader.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/message/AMQMessageHeader.java @@ -47,10 +47,6 @@ public interface AMQMessageHeader String getReplyTo(); - String getReplyToExchange(); - String getReplyToRoutingKey(); - - Object getHeader(String name); boolean containsHeaders(Set<String> names); diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/message/AbstractServerMessageImpl.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/message/AbstractServerMessageImpl.java index 8311dbd5ff..e5aa6c1158 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/message/AbstractServerMessageImpl.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/message/AbstractServerMessageImpl.java @@ -23,9 +23,11 @@ package org.apache.qpid.server.message; import org.apache.qpid.server.store.StorableMessageMetaData; import org.apache.qpid.server.store.StoredMessage; +import java.nio.ByteBuffer; +import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicIntegerFieldUpdater; -public abstract class AbstractServerMessageImpl<T extends StorableMessageMetaData> implements ServerMessage<T> +public abstract class AbstractServerMessageImpl<X extends AbstractServerMessageImpl<X,T>, T extends StorableMessageMetaData> implements ServerMessage<T> { private static final AtomicIntegerFieldUpdater<AbstractServerMessageImpl> _refCountUpdater = @@ -33,10 +35,13 @@ public abstract class AbstractServerMessageImpl<T extends StorableMessageMetaDat private volatile int _referenceCount = 0; private final StoredMessage<T> _handle; + private final Object _connectionReference; - public AbstractServerMessageImpl(StoredMessage<T> handle) + + public AbstractServerMessageImpl(StoredMessage<T> handle, Object connectionReference) { _handle = handle; + _connectionReference = connectionReference; } public StoredMessage<T> getStoredMessage() @@ -44,16 +49,11 @@ public abstract class AbstractServerMessageImpl<T extends StorableMessageMetaDat return _handle; } - public boolean incrementReference() + private boolean incrementReference() { - return incrementReference(1); - } - - public boolean incrementReference(int count) - { - if(_refCountUpdater.addAndGet(this, count) <= 0) + if(_refCountUpdater.incrementAndGet(this) <= 0) { - _refCountUpdater.addAndGet(this, -count); + _refCountUpdater.decrementAndGet(this); return false; } else @@ -67,7 +67,7 @@ public abstract class AbstractServerMessageImpl<T extends StorableMessageMetaDat * message store. * */ - public void decrementReference() + private void decrementReference() { int count = _refCountUpdater.decrementAndGet(this); @@ -104,8 +104,72 @@ public abstract class AbstractServerMessageImpl<T extends StorableMessageMetaDat return "(HC:" + System.identityHashCode(this) + " ID:" + getMessageNumber() + " Ref:" + getReferenceCount() + ")"; } - protected int getReferenceCount() + private int getReferenceCount() { return _referenceCount; } + + @Override + final public MessageReference<X> newReference() + { + return new Reference(); + } + + @Override + final public boolean isPersistent() + { + return _handle.getMetaData().isPersistent(); + } + + @Override + final public long getMessageNumber() + { + return getStoredMessage().getMessageNumber(); + } + + @Override + final public int getContent(ByteBuffer buf, int offset) + { + return getStoredMessage().getContent(offset, buf); + } + + @Override + final public ByteBuffer getContent(int offset, int size) + { + return getStoredMessage().getContent(offset, size); + } + + final public Object getConnectionReference() + { + return _connectionReference; + }public String toString() + { + return "Message[" + debugIdentity() + "]"; + } + + private final class Reference implements MessageReference<X> + { + + private final AtomicBoolean _released = new AtomicBoolean(false); + + private Reference() + { + incrementReference(); + } + + public X getMessage() + { + return (X) AbstractServerMessageImpl.this; + } + + public void release() + { + if(!_released.getAndSet(true)) + { + decrementReference(); + } + } + + } + } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/message/InboundMessage.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/message/InboundMessage.java deleted file mode 100644 index 1b3fdb1870..0000000000 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/message/InboundMessage.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * - * 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.qpid.server.message; - - -import org.apache.qpid.server.queue.Filterable; - -public interface InboundMessage extends Filterable -{ - String getRoutingKey(); - - AMQMessageHeader getMessageHeader(); - - boolean isPersistent(); - - boolean isRedelivered(); - - long getSize(); -} diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/message/InstanceProperties.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/message/InstanceProperties.java new file mode 100644 index 0000000000..6941ed119c --- /dev/null +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/message/InstanceProperties.java @@ -0,0 +1,79 @@ +/* + * + * 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.qpid.server.message; + +import java.util.EnumMap; +import java.util.Map; + +public interface InstanceProperties +{ + + enum Property { + REDELIVERED, + PERSISTENT, + MANDATORY, + IMMEDIATE, + EXPIRATION + } + + public Object getProperty(Property prop); + + InstanceProperties EMPTY = new InstanceProperties() + { + @Override + public Object getProperty(final Property prop) + { + return null; + } + }; + + class Factory + { + public static InstanceProperties fromMap(Map<Property, Object> map) + { + final Map<Property,Object> props = new EnumMap<Property,Object>(map); + return new InstanceProperties() + { + @Override + public Object getProperty(final Property prop) + { + return props.get(prop); + } + }; + } + + public static Map<Property, Object> asMap(InstanceProperties props) + { + EnumMap<Property, Object> map = new EnumMap<Property,Object>(Property.class); + + for(Property prop : Property.values()) + { + Object value = props.getProperty(prop); + if(value != null) + { + map.put(prop,value); + } + } + + return map; + } + } +} diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/message/MessageReference.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/message/MessageReference.java index 399f8f9327..eda85507f0 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/message/MessageReference.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/message/MessageReference.java @@ -20,39 +20,8 @@ */ package org.apache.qpid.server.message; -import java.util.concurrent.atomic.AtomicBoolean; - -public abstract class MessageReference<M extends ServerMessage> +public interface MessageReference<M extends ServerMessage> { - - private final AtomicBoolean _released = new AtomicBoolean(false); - - private volatile M _message; - - public MessageReference(M message) - { - _message = message; - onReference(message); - } - - abstract protected void onReference(M message); - - abstract protected void onRelease(M message); - - public M getMessage() - { - return _message; - } - - public void release() - { - if(!_released.getAndSet(true)) - { - if(_message != null) - { - onRelease(_message); - } - } - } - + public M getMessage(); + public void release(); } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/message/ServerMessage.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/message/ServerMessage.java index e1ad2fd0ca..a4c461570f 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/message/ServerMessage.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/message/ServerMessage.java @@ -37,8 +37,6 @@ public interface ServerMessage<T extends StorableMessageMetaData> extends Enquea long getSize(); - boolean isImmediate(); - long getExpiration(); MessageReference newReference(); @@ -51,4 +49,5 @@ public interface ServerMessage<T extends StorableMessageMetaData> extends Enquea public ByteBuffer getContent(int offset, int size); + Object getConnectionReference(); } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java index 40560be379..d07e9de021 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java @@ -71,6 +71,7 @@ import org.apache.qpid.server.stats.StatisticsGatherer; import org.apache.qpid.server.store.MessageStoreCreator; import org.apache.qpid.server.util.MapValueConverter; import org.apache.qpid.server.virtualhost.VirtualHostRegistry; +import org.apache.qpid.util.SystemUtils; public class BrokerAdapter extends AbstractAdapter implements Broker, ConfigurationChangeListener { @@ -755,9 +756,7 @@ public class BrokerAdapter extends AbstractAdapter implements Broker, Configurat } else if(OPERATING_SYSTEM.equals(name)) { - return System.getProperty("os.name") + " " - + System.getProperty("os.version") + " " - + System.getProperty("os.arch"); + return SystemUtils.getOSString(); } else if(PLATFORM.equals(name)) { diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/protocol/AMQSessionModel.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/protocol/AMQSessionModel.java index a3833eebb9..75994f6d81 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/protocol/AMQSessionModel.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/protocol/AMQSessionModel.java @@ -26,7 +26,6 @@ import java.util.concurrent.ConcurrentSkipListSet; import org.apache.qpid.AMQException; import org.apache.qpid.protocol.AMQConstant; import org.apache.qpid.server.logging.LogSubject; -import org.apache.qpid.server.message.InboundMessage; import org.apache.qpid.server.queue.AMQQueue; import org.apache.qpid.server.queue.SimpleAMQQueue; @@ -76,7 +75,7 @@ public interface AMQSessionModel extends Comparable<AMQSessionModel> boolean getBlocking(); - boolean onSameConnection(InboundMessage inbound); + Object getConnectionReference(); int getUnacknowledgedMessageCount(); diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/ConflationQueueList.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/ConflationQueueList.java index 53420ded9b..000bfbfd6e 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/ConflationQueueList.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/ConflationQueueList.java @@ -202,7 +202,7 @@ public class ConflationQueueList extends SimpleQueueEntryList { if(_latestValueReference != null && _latestValueReference.compareAndSet(this, _deleteInProgress)) { - Object key = getMessageHeader().getHeader(_conflationKey); + Object key = getMessage().getMessageHeader().getHeader(_conflationKey); _latestValuesMap.remove(key,_latestValueReference); } return true; diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/Filterable.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/Filterable.java deleted file mode 100644 index 50d8f4166d..0000000000 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/Filterable.java +++ /dev/null @@ -1,32 +0,0 @@ -/* -* -* 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.qpid.server.queue; - -import org.apache.qpid.server.message.AMQMessageHeader; - -public interface Filterable -{ - AMQMessageHeader getMessageHeader(); - - boolean isPersistent(); - - boolean isRedelivered(); -} diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueEntry.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueEntry.java index c44961c457..d5c987026c 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueEntry.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueEntry.java @@ -21,10 +21,11 @@ package org.apache.qpid.server.queue; import org.apache.qpid.AMQException; +import org.apache.qpid.server.filter.Filterable; import org.apache.qpid.server.message.ServerMessage; import org.apache.qpid.server.subscription.Subscription; -public interface QueueEntry extends Comparable<QueueEntry>, Filterable +public interface QueueEntry extends Comparable<QueueEntry> { @@ -250,4 +251,6 @@ public interface QueueEntry extends Comparable<QueueEntry>, Filterable void decrementDeliveryCount(); + Filterable asFilterable(); + } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueEntryImpl.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueEntryImpl.java index 36feb27d86..1b9b0f6daa 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueEntryImpl.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueEntryImpl.java @@ -24,6 +24,7 @@ import org.apache.log4j.Logger; import org.apache.qpid.AMQException; import org.apache.qpid.server.exchange.Exchange; +import org.apache.qpid.server.filter.Filterable; import org.apache.qpid.server.message.AMQMessageHeader; import org.apache.qpid.server.message.MessageReference; import org.apache.qpid.server.message.ServerMessage; @@ -174,7 +175,7 @@ public abstract class QueueEntryImpl implements QueueEntry private boolean acquire(final EntryState state) { - boolean acquired = _stateUpdater.compareAndSet(this,AVAILABLE_STATE, state); + boolean acquired = _stateUpdater.compareAndSet(this, AVAILABLE_STATE, state); if(acquired && _stateChangeListeners != null) { @@ -246,18 +247,6 @@ public abstract class QueueEntryImpl implements QueueEntry _deliveryState |= REDELIVERED; } - public AMQMessageHeader getMessageHeader() - { - final ServerMessage message = getMessage(); - return message == null ? null : message.getMessageHeader(); - } - - public boolean isPersistent() - { - final ServerMessage message = getMessage(); - return message != null && message.isPersistent(); - } - public boolean isRedelivered() { return (_deliveryState & REDELIVERED) != 0; @@ -366,12 +355,12 @@ public abstract class QueueEntryImpl implements QueueEntry if (alternateExchange != null) { - InboundMessageAdapter inboundMessageAdapter = new InboundMessageAdapter(this); - List<? extends BaseQueue> queues = alternateExchange.route(inboundMessageAdapter); + QueueEntryInstanceProperties props = new QueueEntryInstanceProperties(this); + List<? extends BaseQueue> queues = alternateExchange.route(getMessage(), props); final ServerMessage message = getMessage(); if ((queues == null || queues.size() == 0) && alternateExchange.getAlternateExchange() != null) { - queues = alternateExchange.getAlternateExchange().route(inboundMessageAdapter); + queues = alternateExchange.getAlternateExchange().route(getMessage(), props); } @@ -507,6 +496,12 @@ public abstract class QueueEntryImpl implements QueueEntry _deliveryCountUpdater.decrementAndGet(this); } + @Override + public Filterable asFilterable() + { + return Filterable.Factory.newInstance(getMessage(), new QueueEntryInstanceProperties(this)); + } + public String toString() { return "QueueEntryImpl{" + diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/InboundMessageAdapter.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueEntryInstanceProperties.java index df26037eed..3affc69ed0 100755..100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/InboundMessageAdapter.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueEntryInstanceProperties.java @@ -18,53 +18,35 @@ * under the License. * */ - package org.apache.qpid.server.queue; -import org.apache.qpid.server.message.AMQMessageHeader; -import org.apache.qpid.server.message.InboundMessage; +import org.apache.qpid.server.message.InstanceProperties; -public class InboundMessageAdapter implements InboundMessage +public class QueueEntryInstanceProperties implements InstanceProperties { + private final QueueEntry _entry; - private QueueEntry _entry; - - InboundMessageAdapter() - { - } - - public InboundMessageAdapter(QueueEntry entry) + public QueueEntryInstanceProperties(final QueueEntry entry) { _entry = entry; } - public void setEntry(QueueEntry entry) - { - _entry = entry; - } - - public String getRoutingKey() - { - return _entry.getMessage().getRoutingKey(); - } - - public AMQMessageHeader getMessageHeader() - { - return _entry.getMessageHeader(); - } - - public boolean isPersistent() - { - return _entry.isPersistent(); - } - - public boolean isRedelivered() - { - return _entry.isRedelivered(); - } - - public long getSize() - { - return _entry.getSize(); + @Override + public Object getProperty(final Property prop) + { + switch(prop) + { + case REDELIVERED: + return _entry.isRedelivered(); + case MANDATORY: + return false; + case PERSISTENT: + return _entry.getMessage().isPersistent(); + case IMMEDIATE: + return false; + case EXPIRATION: + return _entry.getMessage().getExpiration(); + } + return null; } } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/SimpleAMQQueue.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/SimpleAMQQueue.java index b002419064..c0bc662039 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/SimpleAMQQueue.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/SimpleAMQQueue.java @@ -1358,14 +1358,14 @@ public class SimpleAMQQueue implements AMQQueue, Subscription.StateListener, Mes if(_alternateExchange != null) { - InboundMessageAdapter adapter = new InboundMessageAdapter(); for(final QueueEntry entry : entries) { - adapter.setEntry(entry); - List<? extends BaseQueue> queues = _alternateExchange.route(adapter); + + QueueEntryInstanceProperties props = new QueueEntryInstanceProperties(entry); + List<? extends BaseQueue> queues = _alternateExchange.route(entry.getMessage(), props); if((queues == null || queues.size() == 0) && _alternateExchange.getAlternateExchange() != null) { - queues = _alternateExchange.getAlternateExchange().route(adapter); + queues = _alternateExchange.getAlternateExchange().route(entry.getMessage(),props); } final ServerMessage message = entry.getMessage(); diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/registry/ApplicationRegistry.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/registry/ApplicationRegistry.java index 9d16f4b927..8e7916e4b2 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/registry/ApplicationRegistry.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/registry/ApplicationRegistry.java @@ -54,6 +54,7 @@ import org.apache.qpid.server.stats.StatisticsCounter; import org.apache.qpid.server.stats.StatisticsGatherer; import org.apache.qpid.server.virtualhost.VirtualHost; import org.apache.qpid.server.virtualhost.VirtualHostRegistry; +import org.apache.qpid.util.SystemUtils; /** @@ -339,9 +340,9 @@ public class ApplicationRegistry implements IApplicationRegistry logActor.message(BrokerMessages.PLATFORM(System.getProperty("java.vendor"), System.getProperty("java.runtime.version", System.getProperty("java.version")), - System.getProperty("os.name"), - System.getProperty("os.version"), - System.getProperty("os.arch"))); + SystemUtils.getOSName(), + SystemUtils.getOSVersion(), + SystemUtils.getOSArch())); logActor.message(BrokerMessages.MAX_MEMORY(Runtime.getRuntime().maxMemory())); } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/JsonFileConfigStore.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/JsonFileConfigStore.java index c584d148f2..c1d9838833 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/JsonFileConfigStore.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/JsonFileConfigStore.java @@ -139,26 +139,32 @@ public class JsonFileConfigStore implements DurableConfigurationStore return file.exists(); } - private void getFileLock() throws IOException, AMQStoreException + private void getFileLock() throws AMQStoreException { File lockFile = new File(_directoryName, _name + ".lck"); - lockFile.createNewFile(); - - FileOutputStream out = new FileOutputStream(lockFile); - FileChannel channel = out.getChannel(); try { + lockFile.createNewFile(); + lockFile.deleteOnExit(); + + @SuppressWarnings("resource") + FileOutputStream out = new FileOutputStream(lockFile); + FileChannel channel = out.getChannel(); _fileLock = channel.tryLock(); } + catch (IOException ioe) + { + throw new AMQStoreException("Cannot create the lock file " + lockFile.getName(), ioe); + } catch(OverlappingFileLockException e) { _fileLock = null; } + if(_fileLock == null) { - throw new AMQStoreException("Cannot get lock on file " + lockFile.getAbsolutePath() + " is another instance running?"); + throw new AMQStoreException("Cannot get lock on file " + lockFile.getAbsolutePath() + ". Is another instance running?"); } - lockFile.deleteOnExit(); } private void checkDirectoryIsWritable(String directoryName) throws AMQStoreException @@ -190,7 +196,7 @@ public class JsonFileConfigStore implements DurableConfigurationStore Map data = _objectMapper.readValue(new File(_directoryName,_configFileName),Map.class); Collection<Class<? extends ConfiguredObject>> childClasses = MODEL.getChildTypes(VirtualHost.class); - String modelVersion = (String) data.remove("modelVersion"); + data.remove("modelVersion"); Object configVersion; if((configVersion = data.remove("configVersion")) instanceof Integer) { diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/DefaultUpgraderProvider.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/DefaultUpgraderProvider.java index 8d05e719ee..6474e00c24 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/DefaultUpgraderProvider.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/DefaultUpgraderProvider.java @@ -25,7 +25,7 @@ import java.util.LinkedHashMap; import java.util.Map; import java.util.UUID; import org.apache.qpid.server.exchange.ExchangeRegistry; -import org.apache.qpid.server.exchange.FilterSupport; +import org.apache.qpid.server.filter.FilterSupport; import org.apache.qpid.server.exchange.TopicExchange; import org.apache.qpid.server.model.Binding; import org.apache.qpid.server.model.Exchange; diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/plugins/AbstractConfigurationTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/plugins/AbstractConfigurationTest.java index 674abbfeb7..0e57b60a6f 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/plugins/AbstractConfigurationTest.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/plugins/AbstractConfigurationTest.java @@ -24,6 +24,7 @@ import org.apache.commons.configuration.CompositeConfiguration; import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.XMLConfiguration; +import org.apache.log4j.Logger; import org.apache.qpid.test.utils.QpidTestCase; import java.util.List; @@ -34,6 +35,8 @@ import java.util.List; */ public class AbstractConfigurationTest extends QpidTestCase { + private static final Logger _logger = Logger.getLogger(AbstractConfigurationTest.class); + private static final double DOUBLE = 3.14; private static final long POSITIVE_LONG = 1000; private static final long NEGATIVE_LONG = -1000; @@ -101,7 +104,7 @@ public class AbstractConfigurationTest extends QpidTestCase } catch (ConfigurationException e) { - e.printStackTrace(); + _logger.error("Error setting up plugin configuration", e); fail(e.toString()); } diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/exchange/FanoutExchangeTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/exchange/FanoutExchangeTest.java index 98ff2421bc..4449cf7645 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/exchange/FanoutExchangeTest.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/exchange/FanoutExchangeTest.java @@ -40,7 +40,8 @@ import org.apache.qpid.common.AMQPFilterTypes; import org.apache.qpid.server.logging.LogActor; import org.apache.qpid.server.logging.actors.CurrentActor; import org.apache.qpid.server.message.AMQMessageHeader; -import org.apache.qpid.server.message.InboundMessage; +import org.apache.qpid.server.message.InstanceProperties; +import org.apache.qpid.server.message.ServerMessage; import org.apache.qpid.server.queue.AMQQueue; import org.apache.qpid.server.queue.BaseQueue; import org.apache.qpid.server.security.SecurityManager; @@ -128,7 +129,7 @@ public class FanoutExchangeTest extends TestCase _exchange.addBinding("key",queue2, null); - List<? extends BaseQueue> result = _exchange.route(mockMessage(true)); + List<? extends BaseQueue> result = _exchange.route(mockMessage(true),InstanceProperties.EMPTY); assertEquals("Expected message to be routed to both queues", 2, result.size()); assertTrue("Expected queue1 to be routed to", result.contains(queue1)); @@ -137,7 +138,7 @@ public class FanoutExchangeTest extends TestCase _exchange.addBinding("key2",queue2, Collections.singletonMap(AMQPFilterTypes.JMS_SELECTOR.toString(),(Object)"select = True")); - result = _exchange.route(mockMessage(true)); + result = _exchange.route(mockMessage(true),InstanceProperties.EMPTY); assertEquals("Expected message to be routed to both queues", 2, result.size()); assertTrue("Expected queue1 to be routed to", result.contains(queue1)); @@ -145,14 +146,14 @@ public class FanoutExchangeTest extends TestCase _exchange.removeBinding("key",queue2,null); - result = _exchange.route(mockMessage(true)); + result = _exchange.route(mockMessage(true),InstanceProperties.EMPTY); assertEquals("Expected message to be routed to both queues", 2, result.size()); assertTrue("Expected queue1 to be routed to", result.contains(queue1)); assertTrue("Expected queue2 to be routed to", result.contains(queue2)); - result = _exchange.route(mockMessage(false)); + result = _exchange.route(mockMessage(false),InstanceProperties.EMPTY); assertEquals("Expected message to be routed to queue1 only", 1, result.size()); assertTrue("Expected queue1 to be routed to", result.contains(queue1)); @@ -161,7 +162,7 @@ public class FanoutExchangeTest extends TestCase _exchange.addBinding("key",queue2, Collections.singletonMap(AMQPFilterTypes.JMS_SELECTOR.toString(),(Object)"select = False")); - result = _exchange.route(mockMessage(false)); + result = _exchange.route(mockMessage(false),InstanceProperties.EMPTY); assertEquals("Expected message to be routed to both queues", 2, result.size()); assertTrue("Expected queue1 to be routed to", result.contains(queue1)); assertTrue("Expected queue2 to be routed to", result.contains(queue2)); @@ -169,7 +170,7 @@ public class FanoutExchangeTest extends TestCase } - private InboundMessage mockMessage(boolean val) + private ServerMessage mockMessage(boolean val) { final AMQMessageHeader header = mock(AMQMessageHeader.class); when(header.containsHeader("select")).thenReturn(true); @@ -185,8 +186,8 @@ public class FanoutExchangeTest extends TestCase } }); - final InboundMessage inboundMessage = mock(InboundMessage.class); - when(inboundMessage.getMessageHeader()).thenReturn(header); - return inboundMessage; + final ServerMessage serverMessage = mock(ServerMessage.class); + when(serverMessage.getMessageHeader()).thenReturn(header); + return serverMessage; } } diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/exchange/HeadersBindingTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/exchange/HeadersBindingTest.java index 833df34fd8..8919599cba 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/exchange/HeadersBindingTest.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/exchange/HeadersBindingTest.java @@ -96,16 +96,6 @@ public class HeadersBindingTest extends TestCase return null; } - public String getReplyToExchange() - { - return null; //To change body of implemented methods use File | Settings | File Templates. - } - - public String getReplyToRoutingKey() - { - return null; //To change body of implemented methods use File | Settings | File Templates. - } - public Object getHeader(String name) { return _headers.get(name); diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/exchange/HeadersExchangeTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/exchange/HeadersExchangeTest.java index 757624d090..7c62530301 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/exchange/HeadersExchangeTest.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/exchange/HeadersExchangeTest.java @@ -35,7 +35,8 @@ import org.apache.qpid.common.AMQPFilterTypes; import org.apache.qpid.server.logging.LogActor; import org.apache.qpid.server.logging.actors.CurrentActor; import org.apache.qpid.server.message.AMQMessageHeader; -import org.apache.qpid.server.message.InboundMessage; +import org.apache.qpid.server.message.InstanceProperties; +import org.apache.qpid.server.message.ServerMessage; import org.apache.qpid.server.queue.AMQQueue; import org.apache.qpid.server.queue.BaseQueue; import org.apache.qpid.server.security.SecurityManager; @@ -71,9 +72,9 @@ public class HeadersExchangeTest extends TestCase } - protected void routeAndTest(InboundMessage msg, AMQQueue... expected) throws Exception + protected void routeAndTest(ServerMessage msg, AMQQueue... expected) throws Exception { - List<? extends BaseQueue> results = _exchange.route(msg); + List<? extends BaseQueue> results = _exchange.route(msg, InstanceProperties.EMPTY); List<? extends BaseQueue> unexpected = new ArrayList<BaseQueue>(results); unexpected.removeAll(Arrays.asList(expected)); assertTrue("Message delivered to unexpected queues: " + unexpected, unexpected.isEmpty()); @@ -209,7 +210,7 @@ public class HeadersExchangeTest extends TestCase } - private InboundMessage mockMessage(final Map<String, Object> headerValues) + private ServerMessage mockMessage(final Map<String, Object> headerValues) { final AMQMessageHeader header = mock(AMQMessageHeader.class); when(header.containsHeader(anyString())).then(new Answer<Boolean>() @@ -239,9 +240,9 @@ public class HeadersExchangeTest extends TestCase } }); - final InboundMessage inboundMessage = mock(InboundMessage.class); - when(inboundMessage.getMessageHeader()).thenReturn(header); - return inboundMessage; + final ServerMessage serverMessage = mock(ServerMessage.class); + when(serverMessage.getMessageHeader()).thenReturn(header); + return serverMessage; } public static junit.framework.Test suite() diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/exchange/TopicExchangeTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/exchange/TopicExchangeTest.java index 344ddd9366..4296ebd68f 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/exchange/TopicExchangeTest.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/exchange/TopicExchangeTest.java @@ -25,7 +25,7 @@ import junit.framework.Assert; import org.apache.qpid.AMQException; import org.apache.qpid.server.binding.Binding; -import org.apache.qpid.server.message.InboundMessage; +import org.apache.qpid.server.message.InstanceProperties; import org.apache.qpid.server.message.MessageReference; import org.apache.qpid.server.message.ServerMessage; import org.apache.qpid.server.model.UUIDGenerator; @@ -312,9 +312,9 @@ public class TopicExchangeTest extends QpidTestCase private int routeMessage(String routingKey, long messageNumber) throws AMQException { - InboundMessage inboundMessage = mock(InboundMessage.class); - when(inboundMessage.getRoutingKey()).thenReturn(routingKey); - List<? extends BaseQueue> queues = _exchange.route(inboundMessage); + ServerMessage serverMessage = mock(ServerMessage.class); + when(serverMessage.getRoutingKey()).thenReturn(routingKey); + List<? extends BaseQueue> queues = _exchange.route(serverMessage, InstanceProperties.EMPTY); ServerMessage message = mock(ServerMessage.class); MessageReference ref = mock(MessageReference.class); when(ref.getMessage()).thenReturn(message); diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/logging/log4j/LoggingManagementFacadeTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/logging/log4j/LoggingManagementFacadeTest.java index 72b34868ba..e55e700489 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/logging/log4j/LoggingManagementFacadeTest.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/logging/log4j/LoggingManagementFacadeTest.java @@ -19,14 +19,11 @@ */ package org.apache.qpid.server.logging.log4j; -import java.io.File; -import java.io.InputStream; import java.util.List; import java.util.Map; import org.apache.log4j.Level; import org.apache.qpid.test.utils.TestFileUtils; -import org.apache.qpid.util.FileUtils; import junit.framework.TestCase; diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/adapter/PortFactoryTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/adapter/PortFactoryTest.java index 54826b8c88..8b67db2de9 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/adapter/PortFactoryTest.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/adapter/PortFactoryTest.java @@ -382,7 +382,6 @@ public class PortFactoryTest extends QpidTestCase } catch(IllegalConfigurationException e) { - e.printStackTrace(); // pass } } diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/InboundMessageAdapterTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/InboundMessageAdapterTest.java deleted file mode 100644 index 2c7fa3a8d0..0000000000 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/InboundMessageAdapterTest.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * - * 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.qpid.server.queue; - -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -import org.apache.qpid.server.message.AMQMessageHeader; -import org.apache.qpid.server.message.ServerMessage; -import org.apache.qpid.test.utils.QpidTestCase; - -public class InboundMessageAdapterTest extends QpidTestCase -{ - private ServerMessage<?> _mockMessage; - private QueueEntry _mockQueueEntry; - private InboundMessageAdapter _inboundMessageAdapter; - - @Override - protected void setUp() throws Exception - { - super.setUp(); - _mockMessage = mock(ServerMessage.class); - _mockQueueEntry = mock(QueueEntry.class); - when(_mockQueueEntry.getMessage()).thenReturn(_mockMessage); - - _inboundMessageAdapter = new InboundMessageAdapter(_mockQueueEntry); - } - - public void testGetRoutingKey() throws Exception - { - String routingKey = getTestName(); - when(_mockMessage.getRoutingKey()).thenReturn(routingKey); - - assertEquals("Unexpected value for routing key", routingKey, _inboundMessageAdapter.getRoutingKey()); - } - - - public void testGetMessageHeader() throws Exception - { - AMQMessageHeader mockMessageHeader = mock(AMQMessageHeader.class); - when(_mockQueueEntry.getMessageHeader()).thenReturn(mockMessageHeader); - - assertSame("unexpected message header", mockMessageHeader, _inboundMessageAdapter.getMessageHeader()); - } - - public void testIsRedelivered() throws Exception - { - when(_mockQueueEntry.isRedelivered()).thenReturn(true); - assertTrue("unexpected isRedelivered value", _inboundMessageAdapter.isRedelivered()); - - when(_mockQueueEntry.isRedelivered()).thenReturn(false); - assertFalse("unexpected isRedelivered value", _inboundMessageAdapter.isRedelivered()); - } - - public void testIsPersistent() throws Exception - { - when(_mockQueueEntry.isPersistent()).thenReturn(true); - assertTrue("unexpected isPersistent value", _inboundMessageAdapter.isPersistent()); - - when(_mockQueueEntry.isPersistent()).thenReturn(false); - assertFalse("unexpected isPersistent value", _inboundMessageAdapter.isPersistent()); - } - - public void testGetSize() throws Exception - { - long size = 32526215; - when(_mockQueueEntry.getSize()).thenReturn(size); - assertEquals("unexpected getSize value", size, _inboundMessageAdapter.getSize()); - } -} diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/MockQueueEntry.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/MockQueueEntry.java index f5d4f1219d..bbaca38c79 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/MockQueueEntry.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/MockQueueEntry.java @@ -21,6 +21,7 @@ package org.apache.qpid.server.queue; import org.apache.qpid.AMQException; +import org.apache.qpid.server.filter.Filterable; import org.apache.qpid.server.message.AMQMessageHeader; import org.apache.qpid.server.message.ServerMessage; import org.apache.qpid.server.subscription.Subscription; @@ -201,7 +202,6 @@ public class MockQueueEntry implements QueueEntry return false; } - public int compareTo(QueueEntry o) { @@ -249,5 +249,9 @@ public class MockQueueEntry implements QueueEntry { } - + @Override + public Filterable asFilterable() + { + return Filterable.Factory.newInstance(_message, new QueueEntryInstanceProperties(this)); + } } diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/SimpleAMQQueueTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/SimpleAMQQueueTest.java index 4058eac99d..a7dcaf6d49 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/SimpleAMQQueueTest.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/SimpleAMQQueueTest.java @@ -30,6 +30,8 @@ import static org.mockito.Matchers.eq; import static org.mockito.Mockito.when; import java.util.Map; + +import org.apache.log4j.Logger; import org.apache.qpid.AMQException; import org.apache.qpid.AMQInternalException; import org.apache.qpid.AMQSecurityException; @@ -55,6 +57,7 @@ import java.util.concurrent.TimeUnit; public class SimpleAMQQueueTest extends QpidTestCase { + private static final Logger _logger = Logger.getLogger(SimpleAMQQueueTest.class); private SimpleAMQQueue _queue; private VirtualHost _virtualHost; @@ -1146,7 +1149,7 @@ public class SimpleAMQQueueTest extends QpidTestCase } catch (InterruptedException e) { - e.printStackTrace(); + _logger.error("Thread interrupted", e); } } diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/TestMessageMetaDataType.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/TestMessageMetaDataType.java index 25f1df7a20..bd43100cd2 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/TestMessageMetaDataType.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/TestMessageMetaDataType.java @@ -95,6 +95,12 @@ public class TestMessageMetaDataType implements MessageMetaDataType<TestMessageM } @Override + public Object getConnectionReference() + { + return null; + } + + @Override public long getExpiration() { return 0; @@ -130,11 +136,6 @@ public class TestMessageMetaDataType implements MessageMetaDataType<TestMessageM return _storedMsg; } - @Override - public boolean isImmediate() - { - return false; - } @Override public boolean isPersistent() diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/subscription/MockSubscription.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/subscription/MockSubscription.java index 508f33fd35..8d1b27e272 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/subscription/MockSubscription.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/subscription/MockSubscription.java @@ -25,7 +25,6 @@ import org.apache.qpid.AMQException; import org.apache.qpid.protocol.AMQConstant; import org.apache.qpid.server.logging.LogActor; import org.apache.qpid.server.logging.LogSubject; -import org.apache.qpid.server.message.InboundMessage; import org.apache.qpid.server.model.Port; import org.apache.qpid.server.model.Transport; import org.apache.qpid.server.protocol.AMQConnectionModel; @@ -352,9 +351,9 @@ public class MockSubscription implements Subscription } @Override - public boolean onSameConnection(InboundMessage inbound) + public Object getConnectionReference() { - return false; + return this; } @Override diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/txn/MockServerMessage.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/txn/MockServerMessage.java index aa5b555b3b..3b74110a6e 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/txn/MockServerMessage.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/txn/MockServerMessage.java @@ -98,6 +98,12 @@ class MockServerMessage implements ServerMessage throw new NotImplementedException(); } + @Override + public Object getConnectionReference() + { + return null; + } + public long getArrivalTime() { throw new NotImplementedException(); diff --git a/qpid/java/broker-plugins/access-control/pom.xml b/qpid/java/broker-plugins/access-control/pom.xml index c4b966d9ae..c63618380c 100644 --- a/qpid/java/broker-plugins/access-control/pom.xml +++ b/qpid/java/broker-plugins/access-control/pom.xml @@ -38,6 +38,13 @@ <scope>provided</scope> </dependency> + <dependency> + <groupId>log4j</groupId> + <artifactId>log4j</artifactId> + <version>${log4j-version}</version> + <scope>compile</scope> + </dependency> + <!-- test dependencies --> <dependency> <groupId>org.apache.qpid</groupId> diff --git a/qpid/java/broker-plugins/amqp-0-10-protocol/pom.xml b/qpid/java/broker-plugins/amqp-0-10-protocol/pom.xml index c24dd918e0..6bfce64240 100644 --- a/qpid/java/broker-plugins/amqp-0-10-protocol/pom.xml +++ b/qpid/java/broker-plugins/amqp-0-10-protocol/pom.xml @@ -34,6 +34,20 @@ <scope>provided</scope> </dependency> + <dependency> + <groupId>log4j</groupId> + <artifactId>log4j</artifactId> + <version>${log4j-version}</version> + <scope>compile</scope> + </dependency> + + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-api</artifactId> + <version>${slf4j-version}</version> + <scope>compile</scope> + </dependency> + <!-- test dependencies --> <dependency> <groupId>org.apache.qpid</groupId> diff --git a/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/MessageConverter_v0_10.java b/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/MessageConverter_v0_10.java index c6ae0c6e47..5244a7f51b 100644 --- a/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/MessageConverter_v0_10.java +++ b/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/MessageConverter_v0_10.java @@ -113,7 +113,6 @@ public class MessageConverter_v0_10 implements MessageConverter<ServerMessage, M deliveryProps.setExpiration(serverMsg.getExpiration()); - deliveryProps.setImmediate(serverMsg.isImmediate()); deliveryProps.setPriority(MessageDeliveryPriority.get(serverMsg.getMessageHeader().getPriority())); deliveryProps.setRoutingKey(serverMsg.getRoutingKey()); deliveryProps.setTimestamp(serverMsg.getMessageHeader().getTimestamp()); diff --git a/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/MessageMetaData_0_10.java b/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/MessageMetaData_0_10.java index 2ca680869f..2e74621814 100755 --- a/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/MessageMetaData_0_10.java +++ b/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/MessageMetaData_0_10.java @@ -21,7 +21,6 @@ package org.apache.qpid.server.protocol.v0_10; import org.apache.qpid.server.message.AMQMessageHeader; -import org.apache.qpid.server.message.InboundMessage; import org.apache.qpid.server.plugin.MessageMetaDataType; import org.apache.qpid.server.store.StorableMessageMetaData; import org.apache.qpid.transport.DeliveryProperties; @@ -37,7 +36,7 @@ import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.List; -public class MessageMetaData_0_10 implements StorableMessageMetaData, InboundMessage +public class MessageMetaData_0_10 implements StorableMessageMetaData { private Header _header; private DeliveryProperties _deliveryProps; @@ -53,8 +52,6 @@ public class MessageMetaData_0_10 implements StorableMessageMetaData, InboundMes private static final MessageMetaDataType_0_10 TYPE = new MessageMetaDataType_0_10(); private volatile ByteBuffer _encoded; - private Object _connectionReference; - public MessageMetaData_0_10(MessageTransfer xfr) { @@ -202,12 +199,6 @@ public class MessageMetaData_0_10 implements StorableMessageMetaData, InboundMes return _deliveryProps == null ? 0L : _deliveryProps.getExpiration(); } - public boolean isRedelivered() - { - // The *Message* is never redelivered, only queue entries are... - return false; - } - public long getArrivalTime() { return _arrivalTime; @@ -218,16 +209,6 @@ public class MessageMetaData_0_10 implements StorableMessageMetaData, InboundMes return _header; } - public void setConnectionReference(Object connectionReference) - { - _connectionReference = connectionReference; - } - - public Object getConnectionReference() - { - return _connectionReference; - } - private static class MetaDataFactory implements MessageMetaDataType.Factory<MessageMetaData_0_10> { public MessageMetaData_0_10 createMetaData(ByteBuffer buf) diff --git a/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/MessageTransferMessage.java b/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/MessageTransferMessage.java index 34cf6998ab..487862bcba 100644 --- a/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/MessageTransferMessage.java +++ b/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/MessageTransferMessage.java @@ -22,23 +22,18 @@ package org.apache.qpid.server.protocol.v0_10; import org.apache.qpid.server.message.AMQMessageHeader; import org.apache.qpid.server.message.AbstractServerMessageImpl; -import org.apache.qpid.server.message.InboundMessage; -import org.apache.qpid.server.message.MessageReference; import org.apache.qpid.server.store.StoredMessage; import org.apache.qpid.transport.Header; import java.nio.ByteBuffer; -public class MessageTransferMessage extends AbstractServerMessageImpl<MessageMetaData_0_10> implements InboundMessage +public class MessageTransferMessage extends AbstractServerMessageImpl<MessageTransferMessage, MessageMetaData_0_10> { - private Object _connectionRef; - public MessageTransferMessage(StoredMessage<MessageMetaData_0_10> storeMessage, Object connectionRef) { - super(storeMessage); - _connectionRef = connectionRef; + super(storeMessage, connectionRef); } private MessageMetaData_0_10 getMetaData() @@ -56,12 +51,6 @@ public class MessageTransferMessage extends AbstractServerMessageImpl<MessageMet return getMetaData().getMessageHeader(); } - public boolean isPersistent() - { - return getMetaData().isPersistent(); - } - - public boolean isRedelivered() { // The *Message* is never redelivered, only queue entries are... this is here so that filters @@ -71,7 +60,6 @@ public class MessageTransferMessage extends AbstractServerMessageImpl<MessageMet public long getSize() { - return getMetaData().getSize(); } @@ -85,32 +73,11 @@ public class MessageTransferMessage extends AbstractServerMessageImpl<MessageMet return getMetaData().getExpiration(); } - public MessageReference newReference() - { - return new TransferMessageReference(this); - } - - public long getMessageNumber() - { - return getStoredMessage().getMessageNumber(); - } - public long getArrivalTime() { return getMetaData().getArrivalTime(); } - public int getContent(ByteBuffer buf, int offset) - { - return getStoredMessage().getContent(offset, buf); - } - - - public ByteBuffer getContent(int offset, int size) - { - return getStoredMessage().getContent(offset,size); - } - public Header getHeader() { return getMetaData().getHeader(); @@ -118,13 +85,6 @@ public class MessageTransferMessage extends AbstractServerMessageImpl<MessageMet public ByteBuffer getBody() { - return getContent(0, (int)getSize()); } - - public Object getConnectionReference() - { - return _connectionRef; - } - } diff --git a/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ProtocolEngine_0_10.java b/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ProtocolEngine_0_10.java index b8fcdbfe6d..6d3babe515 100755 --- a/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ProtocolEngine_0_10.java +++ b/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ProtocolEngine_0_10.java @@ -24,7 +24,6 @@ import org.apache.qpid.protocol.ServerProtocolEngine; import org.apache.qpid.server.logging.messages.ConnectionMessages; import org.apache.qpid.server.model.Port; import org.apache.qpid.server.model.Transport; -import org.apache.qpid.server.protocol.v0_10.ServerConnection; import org.apache.qpid.transport.Sender; import org.apache.qpid.transport.network.Assembler; import org.apache.qpid.transport.network.Disassembler; @@ -156,7 +155,8 @@ public class ProtocolEngine_0_10 extends InputHandler implements ServerProtocol public void readerIdle() { - //Todo + _connection.getLogActor().message(ConnectionMessages.IDLE_CLOSE()); + _network.close(); } public String getAddress() diff --git a/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerConnection.java b/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerConnection.java index b4d591a72f..66ffd1ef94 100644 --- a/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerConnection.java +++ b/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerConnection.java @@ -73,7 +73,6 @@ public class ServerConnection extends Connection implements AMQConnectionModel, private Port _port; private AtomicLong _lastIoTime = new AtomicLong(); private boolean _blocking; - private NetworkConnection _networkConnection; private Transport _transport; private volatile boolean _stopped; @@ -528,7 +527,7 @@ public class ServerConnection extends Connection implements AMQConnectionModel, public Principal getPeerPrincipal() { - return _networkConnection.getPeerPrincipal(); + return getNetworkConnection().getPeerPrincipal(); } @Override @@ -543,16 +542,6 @@ public class ServerConnection extends Connection implements AMQConnectionModel, super.setLocalAddress(localAddress); } - public void setNetworkConnection(NetworkConnection network) - { - _networkConnection = network; - } - - public NetworkConnection getNetworkConnection() - { - return _networkConnection; - } - public void doHeartbeat() { super.doHeartBeat(); diff --git a/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerConnectionDelegate.java b/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerConnectionDelegate.java index 129a811b61..a15fea1200 100644 --- a/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerConnectionDelegate.java +++ b/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerConnectionDelegate.java @@ -236,7 +236,6 @@ public class ServerConnectionDelegate extends ServerDelegate } final NetworkConnection networkConnection = sconn.getNetworkConnection(); - if(ok.hasHeartbeat()) { int heartbeat = ok.getHeartbeat(); @@ -352,4 +351,11 @@ public class ServerConnectionDelegate extends ServerDelegate { return _clientProperties == null ? null : (String) _clientProperties.get(ConnectionStartProperties.PRODUCT); } + + @Override + protected int getHeartbeatMax() + { + int delay = (Integer)_broker.getAttribute(Broker.CONNECTION_HEART_BEAT_DELAY); + return delay == 0 ? super.getHeartbeatMax() : delay; + } } diff --git a/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSession.java b/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSession.java index abe784cefa..261c937836 100644 --- a/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSession.java +++ b/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSession.java @@ -53,9 +53,7 @@ import org.apache.qpid.server.logging.actors.CurrentActor; import org.apache.qpid.server.logging.actors.GenericActor; import org.apache.qpid.server.logging.messages.ChannelMessages; import org.apache.qpid.server.logging.subjects.ChannelLogSubject; -import org.apache.qpid.server.message.InboundMessage; import org.apache.qpid.server.message.MessageReference; -import org.apache.qpid.server.message.ServerMessage; import org.apache.qpid.server.protocol.AMQConnectionModel; import org.apache.qpid.server.protocol.AMQSessionModel; import org.apache.qpid.server.queue.AMQQueue; @@ -184,7 +182,7 @@ public class ServerSession extends Session return isCommandsFull(id); } - public void enqueue(final ServerMessage message, final List<? extends BaseQueue> queues) + public void enqueue(final MessageTransferMessage message, final List<? extends BaseQueue> queues) { if(_outstandingCredit.get() != UNLIMITED_CREDIT && _outstandingCredit.decrementAndGet() == (Integer.MAX_VALUE - PRODUCER_CREDIT_TOPUP_THRESHOLD)) @@ -766,15 +764,12 @@ public class ServerSession extends Session } } - public boolean onSameConnection(InboundMessage inbound) + @Override + public Object getConnectionReference() { - return ((inbound instanceof MessageTransferMessage) - && ((MessageTransferMessage)inbound).getConnectionReference() == getConnection().getReference()) - || ((inbound instanceof MessageMetaData_0_10) - && (((MessageMetaData_0_10)inbound).getConnectionReference())== getConnection().getReference()); + return getConnection().getReference(); } - public String toLogString() { long connectionId = super.getConnection() instanceof ServerConnection @@ -852,31 +847,25 @@ public class ServerSession extends Session private class PostEnqueueAction implements ServerTransaction.Action { - private List<? extends BaseQueue> _queues; - private ServerMessage _message; + private final MessageReference<MessageTransferMessage> _reference; + private final List<? extends BaseQueue> _queues; private final boolean _transactional; - public PostEnqueueAction(List<? extends BaseQueue> queues, ServerMessage message, final boolean transactional) + public PostEnqueueAction(List<? extends BaseQueue> queues, MessageTransferMessage message, final boolean transactional) { + _reference = message.newReference(); _transactional = transactional; - setState(queues, message); - } - - public void setState(List<? extends BaseQueue> queues, ServerMessage message) - { - _message = message; _queues = queues; } public void postCommit() { - MessageReference<?> ref = _message.newReference(); for(int i = 0; i < _queues.size(); i++) { try { BaseQueue queue = _queues.get(i); - queue.enqueue(_message, _transactional, null); + queue.enqueue(_reference.getMessage(), _transactional, null); if(queue instanceof AMQQueue) { ((AMQQueue)queue).checkCapacity(ServerSession.this); @@ -889,12 +878,13 @@ public class ServerSession extends Session throw new RuntimeException(e); } } - ref.release(); + _reference.release(); } public void onRollback() { // NO-OP + _reference.release(); } } diff --git a/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSessionDelegate.java b/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSessionDelegate.java index 041e1d3645..5b52d31255 100644 --- a/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSessionDelegate.java +++ b/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSessionDelegate.java @@ -33,6 +33,8 @@ import org.apache.qpid.server.exchange.HeadersExchange; import org.apache.qpid.server.filter.FilterManager; import org.apache.qpid.server.filter.FilterManagerFactory; import org.apache.qpid.server.logging.messages.ExchangeMessages; +import org.apache.qpid.server.message.InstanceProperties; +import org.apache.qpid.server.message.MessageReference; import org.apache.qpid.server.model.Queue; import org.apache.qpid.server.model.UUIDGenerator; import org.apache.qpid.server.plugin.ExchangeType; @@ -289,15 +291,13 @@ public class ServerSessionDelegate extends SessionDelegate { final Exchange exchange = getExchangeForMessage(ssn, xfr); - DeliveryProperties delvProps = null; - if(xfr.getHeader() != null && (delvProps = xfr.getHeader().getDeliveryProperties()) != null && delvProps.hasTtl() && !delvProps - .hasExpiration()) + final DeliveryProperties delvProps = xfr.getHeader() == null ? null : xfr.getHeader().getDeliveryProperties(); + if(delvProps != null && delvProps.hasTtl() && !delvProps.hasExpiration()) { delvProps.setExpiration(System.currentTimeMillis() + delvProps.getTtl()); } final MessageMetaData_0_10 messageMetaData = new MessageMetaData_0_10(xfr); - messageMetaData.setConnectionReference(((ServerSession)ssn).getReference()); if (!getVirtualHost(ssn).getSecurityManager().authorisePublish(messageMetaData.isImmediate(), messageMetaData.getRoutingKey(), exchange.getName())) { @@ -309,11 +309,39 @@ public class ServerSessionDelegate extends SessionDelegate } final Exchange exchangeInUse; - List<? extends BaseQueue> queues = exchange.route(messageMetaData); + final MessageStore store = getVirtualHost(ssn).getMessageStore(); + final StoredMessage<MessageMetaData_0_10> storeMessage = createStoreMessage(xfr, messageMetaData, store); + final ServerSession serverSession = (ServerSession) ssn; + final MessageTransferMessage message = new MessageTransferMessage(storeMessage, serverSession.getReference()); + MessageReference<MessageTransferMessage> reference = message.newReference(); + + final InstanceProperties instanceProperties = new InstanceProperties() + { + @Override + public Object getProperty(final Property prop) + { + switch(prop) + { + case EXPIRATION: + return message.getExpiration(); + case IMMEDIATE: + return message.isImmediate(); + case MANDATORY: + return (delvProps == null || !delvProps.getDiscardUnroutable()) && xfr.getAcceptMode() == MessageAcceptMode.EXPLICIT; + case PERSISTENT: + return message.isPersistent(); + case REDELIVERED: + return delvProps.getRedelivered(); + } + return null; + } + }; + + List<? extends BaseQueue> queues = exchange.route(message, instanceProperties); if(queues.isEmpty() && exchange.getAlternateExchange() != null) { final Exchange alternateExchange = exchange.getAlternateExchange(); - queues = alternateExchange.route(messageMetaData); + queues = alternateExchange.route(message, instanceProperties); if (!queues.isEmpty()) { exchangeInUse = alternateExchange; @@ -328,12 +356,8 @@ public class ServerSessionDelegate extends SessionDelegate exchangeInUse = exchange; } - final ServerSession serverSession = (ServerSession) ssn; if(!queues.isEmpty()) { - final MessageStore store = getVirtualHost(ssn).getMessageStore(); - final StoredMessage<MessageMetaData_0_10> storeMessage = createStoreMessage(xfr, messageMetaData, store); - MessageTransferMessage message = new MessageTransferMessage(storeMessage, serverSession.getReference()); serverSession.enqueue(message, queues); storeMessage.flushToStore(); } @@ -352,7 +376,6 @@ public class ServerSessionDelegate extends SessionDelegate } } - if(serverSession.isTransactional()) { serverSession.processed(xfr); @@ -361,6 +384,7 @@ public class ServerSessionDelegate extends SessionDelegate { serverSession.recordFuture(StoreFuture.IMMEDIATE_FUTURE, new CommandProcessedAction(serverSession, xfr)); } + reference.release(); } private StoredMessage<MessageMetaData_0_10> createStoreMessage(final MessageTransfer xfr, diff --git a/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/Subscription_0_10.java b/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/Subscription_0_10.java index 77b63906cc..f68973096a 100644 --- a/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/Subscription_0_10.java +++ b/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/Subscription_0_10.java @@ -33,13 +33,11 @@ import org.apache.qpid.server.logging.messages.SubscriptionMessages; import org.apache.qpid.server.model.Queue; import org.apache.qpid.server.plugin.MessageConverter; import org.apache.qpid.server.protocol.MessageConverterRegistry; -import org.apache.qpid.server.message.InboundMessage; import org.apache.qpid.server.message.ServerMessage; import org.apache.qpid.server.queue.AMQQueue; import org.apache.qpid.server.queue.BaseQueue; -import org.apache.qpid.server.queue.InboundMessageAdapter; -import org.apache.qpid.server.queue.QueueArgumentsConverter; import org.apache.qpid.server.queue.QueueEntry; +import org.apache.qpid.server.queue.QueueEntryInstanceProperties; import org.apache.qpid.server.subscription.Subscription; import org.apache.qpid.server.txn.AutoCommitTransaction; import org.apache.qpid.server.txn.ServerTransaction; @@ -230,7 +228,7 @@ public class Subscription_0_10 implements Subscription, FlowCreditManager.FlowCr private boolean checkFilters(QueueEntry entry) { - return (_filters == null) || _filters.allAllow(entry); + return (_filters == null) || _filters.allAllow(entry.asFilterable()); } public boolean isClosed() @@ -583,9 +581,7 @@ public class Subscription_0_10 implements Subscription, FlowCreditManager.FlowCr final ServerMessage msg = entry.getMessage(); if (alternateExchange != null) { - final InboundMessage m = new InboundMessageAdapter(entry); - - final List<? extends BaseQueue> destinationQueues = alternateExchange.route(m); + final List<? extends BaseQueue> destinationQueues = alternateExchange.route(entry.getMessage(), new QueueEntryInstanceProperties(entry)); if (destinationQueues == null || destinationQueues.isEmpty()) { diff --git a/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/TransferMessageReference.java b/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/TransferMessageReference.java deleted file mode 100644 index 0c04f22232..0000000000 --- a/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/TransferMessageReference.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * - * 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.qpid.server.protocol.v0_10; - -import org.apache.qpid.server.message.MessageReference; - -public class TransferMessageReference extends MessageReference<MessageTransferMessage> -{ - public TransferMessageReference(MessageTransferMessage message) - { - super(message); - } - - protected void onReference(MessageTransferMessage message) - { - message.incrementReference(); - } - - protected void onRelease(MessageTransferMessage message) - { - message.decrementReference(); - } -} diff --git a/qpid/java/broker-plugins/amqp-0-8-protocol/pom.xml b/qpid/java/broker-plugins/amqp-0-8-protocol/pom.xml index 2e9954bc46..0d8c8be3dd 100644 --- a/qpid/java/broker-plugins/amqp-0-8-protocol/pom.xml +++ b/qpid/java/broker-plugins/amqp-0-8-protocol/pom.xml @@ -34,6 +34,13 @@ <scope>provided</scope> </dependency> + <dependency> + <groupId>log4j</groupId> + <artifactId>log4j</artifactId> + <version>${log4j-version}</version> + <scope>compile</scope> + </dependency> + <!-- test dependencies --> <dependency> <groupId>org.apache.qpid</groupId> diff --git a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQChannel.java b/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQChannel.java index a603807f87..bb1d1949a2 100644 --- a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQChannel.java +++ b/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQChannel.java @@ -49,7 +49,6 @@ import org.apache.qpid.framing.ContentBody; import org.apache.qpid.framing.ContentHeaderBody; import org.apache.qpid.framing.FieldTable; import org.apache.qpid.framing.MethodRegistry; -import org.apache.qpid.framing.abstraction.ContentChunk; import org.apache.qpid.framing.abstraction.MessagePublishInfo; import org.apache.qpid.protocol.AMQConstant; import org.apache.qpid.server.TransactionTimeoutHelper; @@ -66,7 +65,7 @@ import org.apache.qpid.server.logging.actors.CurrentActor; import org.apache.qpid.server.logging.messages.ChannelMessages; import org.apache.qpid.server.logging.messages.ExchangeMessages; import org.apache.qpid.server.logging.subjects.ChannelLogSubject; -import org.apache.qpid.server.message.InboundMessage; +import org.apache.qpid.server.message.InstanceProperties; import org.apache.qpid.server.message.MessageReference; import org.apache.qpid.server.message.ServerMessage; import org.apache.qpid.server.protocol.v0_8.output.ProtocolOutputConverter; @@ -74,8 +73,8 @@ import org.apache.qpid.server.protocol.AMQConnectionModel; import org.apache.qpid.server.protocol.AMQSessionModel; import org.apache.qpid.server.queue.AMQQueue; import org.apache.qpid.server.queue.BaseQueue; -import org.apache.qpid.server.queue.InboundMessageAdapter; import org.apache.qpid.server.queue.QueueEntry; +import org.apache.qpid.server.queue.QueueEntryInstanceProperties; import org.apache.qpid.server.security.SecurityManager; import org.apache.qpid.server.store.MessageStore; import org.apache.qpid.server.store.StoreFuture; @@ -271,7 +270,7 @@ public class AMQChannel implements AMQSessionModel, AsyncAutoCommitTransaction.F { throw new AMQSecurityException("Permission denied: " + e.getName()); } - _currentMessage = new IncomingMessage(info, getProtocolSession().getReference()); + _currentMessage = new IncomingMessage(info); _currentMessage.setExchange(e); } @@ -291,12 +290,6 @@ public class AMQChannel implements AMQSessionModel, AsyncAutoCommitTransaction.F _currentMessage.setContentHeaderBody(contentHeaderBody); - _currentMessage.setExpiration(); - - _currentMessage.headersReceived(getProtocolSession().getLastReceivedTime()); - - _currentMessage.route(); - deliverCurrentMessageIfComplete(); } } @@ -309,56 +302,86 @@ public class AMQChannel implements AMQSessionModel, AsyncAutoCommitTransaction.F { try { - final List<? extends BaseQueue> destinationQueues = _currentMessage.getDestinationQueues(); - if(!checkMessageUserId(_currentMessage.getContentHeader())) - { - _transaction.addPostTransactionAction(new WriteReturnAction(AMQConstant.ACCESS_REFUSED, "Access Refused", _currentMessage)); - } - else + final MessageMetaData messageMetaData = + new MessageMetaData(_currentMessage.getMessagePublishInfo(), + _currentMessage.getContentHeader(), + getProtocolSession().getLastReceivedTime()); + + final StoredMessage<MessageMetaData> handle = _messageStore.addMessage(messageMetaData); + final AMQMessage amqMessage = createAMQMessage(_currentMessage, handle); + MessageReference reference = amqMessage.newReference(); + try { - if(destinationQueues == null || destinationQueues.isEmpty()) + int bodyCount = _currentMessage.getBodyCount(); + if(bodyCount > 0) + { + long bodyLengthReceived = 0; + for(int i = 0 ; i < bodyCount ; i++) + { + ContentBody contentChunk = _currentMessage.getContentChunk(i); + handle.addContent((int)bodyLengthReceived, ByteBuffer.wrap(contentChunk.getPayload())); + bodyLengthReceived += contentChunk.getSize(); + } + } + + if(!checkMessageUserId(_currentMessage.getContentHeader())) { - handleUnroutableMessage(); + _transaction.addPostTransactionAction(new WriteReturnAction(AMQConstant.ACCESS_REFUSED, "Access Refused", amqMessage)); } else { - final StoredMessage<MessageMetaData> handle = _messageStore.addMessage(_currentMessage.getMessageMetaData()); - _currentMessage.setStoredMessage(handle); - int bodyCount = _currentMessage.getBodyCount(); - if(bodyCount > 0) + final InstanceProperties instanceProperties = + new InstanceProperties() + { + @Override + public Object getProperty(final Property prop) + { + switch(prop) + { + case EXPIRATION: + return amqMessage.getExpiration(); + case IMMEDIATE: + return _currentMessage.getMessagePublishInfo().isImmediate(); + case PERSISTENT: + return amqMessage.isPersistent(); + case MANDATORY: + return _currentMessage.getMessagePublishInfo().isMandatory(); + case REDELIVERED: + return false; + } + return null; + } + }; + + final List<? extends BaseQueue> destinationQueues = + _currentMessage.getExchange().route(amqMessage, instanceProperties); + + if(destinationQueues == null || destinationQueues.isEmpty()) { - long bodyLengthReceived = 0; - for(int i = 0 ; i < bodyCount ; i++) - { - ContentChunk contentChunk = _currentMessage.getContentChunk(i); - handle.addContent((int)bodyLengthReceived, ByteBuffer.wrap(contentChunk.getData())); - bodyLengthReceived += contentChunk.getSize(); - } + handleUnroutableMessage(amqMessage); } - - _transaction.addPostTransactionAction(new ServerTransaction.Action() + else { - public void postCommit() - { - } - - public void onRollback() - { - handle.remove(); - } - }); - - _transaction.enqueue(destinationQueues, _currentMessage, new MessageDeliveryAction(_currentMessage, destinationQueues)); - incrementOutstandingTxnsIfNecessary(); - _currentMessage.getStoredMessage().flushToStore(); + _transaction.enqueue(destinationQueues, + amqMessage, + new MessageDeliveryAction(amqMessage, destinationQueues)); + incrementOutstandingTxnsIfNecessary(); + handle.flushToStore(); + + } } } + finally + { + reference.release(); + } + } finally { long bodySize = _currentMessage.getSize(); - long timestamp = ((BasicContentHeaderProperties) _currentMessage.getContentHeader().getProperties()).getTimestamp(); + long timestamp = _currentMessage.getContentHeader().getProperties().getTimestamp(); _session.registerMessageReceived(bodySize, timestamp); _currentMessage = null; } @@ -374,9 +397,9 @@ public class AMQChannel implements AMQSessionModel, AsyncAutoCommitTransaction.F * @throws AMQConnectionException if the message is mandatoryclose-on-no-route * @see AMQProtocolSession#isCloseWhenNoRoute() */ - private void handleUnroutableMessage() throws AMQConnectionException + private void handleUnroutableMessage(AMQMessage message) throws AMQConnectionException { - boolean mandatory = _currentMessage.isMandatory(); + boolean mandatory = message.isMandatory(); String description = currentMessageDescription(); boolean closeOnNoRoute = _session.isCloseWhenNoRoute(); @@ -398,13 +421,18 @@ public class AMQChannel implements AMQSessionModel, AsyncAutoCommitTransaction.F (Throwable) null); } - if (mandatory || _currentMessage.isImmediate()) + if (mandatory || message.isImmediate()) { - _transaction.addPostTransactionAction(new WriteReturnAction(AMQConstant.NO_ROUTE, "No Route for message " + currentMessageDescription(), _currentMessage)); + _transaction.addPostTransactionAction(new WriteReturnAction(AMQConstant.NO_ROUTE, "No Route for message " + currentMessageDescription(), message)); } else { - _actor.message(ExchangeMessages.DISCARDMSG(_currentMessage.getExchange().asString(), _currentMessage.getRoutingKey())); + _actor.message(ExchangeMessages.DISCARDMSG(_currentMessage.getExchangeName().asString(), + _currentMessage.getMessagePublishInfo().getRoutingKey() == null + ? null + : _currentMessage.getMessagePublishInfo() + .getRoutingKey() + .toString())); } } @@ -417,15 +445,17 @@ public class AMQChannel implements AMQSessionModel, AsyncAutoCommitTransaction.F return String.format( "[Exchange: %s, Routing key: %s]", - _currentMessage.getExchange(), - _currentMessage.getRoutingKey()); + _currentMessage.getExchangeName(), + _currentMessage.getMessagePublishInfo().getRoutingKey() == null + ? null + : _currentMessage.getMessagePublishInfo().getRoutingKey().toString()); } public void publishContentBody(ContentBody contentBody) throws AMQException { if (_currentMessage == null) { - throw new AMQException("Received content body without previously receiving a JmsPublishBody"); + throw new AMQException("Received content body without previously receiving a Content Header"); } if (_logger.isDebugEnabled()) @@ -435,10 +465,7 @@ public class AMQChannel implements AMQSessionModel, AsyncAutoCommitTransaction.F try { - final ContentChunk contentChunk = - _session.getMethodRegistry().getProtocolVersionMethodConverter().convertToContentChunk(contentBody); - - _currentMessage.addContentBodyFrame(contentChunk); + _currentMessage.addContentBodyFrame(contentBody); deliverCurrentMessageIfComplete(); } @@ -1157,24 +1184,23 @@ public class AMQChannel implements AMQSessionModel, AsyncAutoCommitTransaction.F } - private AMQMessage createAMQMessage(IncomingMessage incomingMessage) + private AMQMessage createAMQMessage(IncomingMessage incomingMessage, StoredMessage<MessageMetaData> handle) throws AMQException { - AMQMessage message = new AMQMessage(incomingMessage.getStoredMessage()); + AMQMessage message = new AMQMessage(handle, _session.getReference()); + + final BasicContentHeaderProperties properties = + incomingMessage.getContentHeader().getProperties(); - message.setExpiration(incomingMessage.getExpiration()); - message.setConnectionIdentifier(_session.getReference()); + long expiration = properties.getExpiration(); + message.setExpiration(expiration); return message; } private boolean checkMessageUserId(ContentHeaderBody header) { - AMQShortString userID = - header.getProperties() instanceof BasicContentHeaderProperties - ? ((BasicContentHeaderProperties) header.getProperties()).getUserId() - : null; - + AMQShortString userID = header.getProperties().getUserId(); return (!_messageAuthorizationRequired || _session.getAuthorizedPrincipal().getName().equals(userID == null? "" : userID.toString())); } @@ -1208,13 +1234,13 @@ public class AMQChannel implements AMQSessionModel, AsyncAutoCommitTransaction.F private class MessageDeliveryAction implements ServerTransaction.Action { - private IncomingMessage _incommingMessage; + private final MessageReference<AMQMessage> _reference; private List<? extends BaseQueue> _destinationQueues; - public MessageDeliveryAction(IncomingMessage currentMessage, + public MessageDeliveryAction(AMQMessage currentMessage, List<? extends BaseQueue> destinationQueues) { - _incommingMessage = currentMessage; + _reference = currentMessage.newReference(); _destinationQueues = destinationQueues; } @@ -1222,10 +1248,8 @@ public class AMQChannel implements AMQSessionModel, AsyncAutoCommitTransaction.F { try { - final boolean immediate = _incommingMessage.isImmediate(); - - final AMQMessage amqMessage = createAMQMessage(_incommingMessage); - MessageReference ref = amqMessage.newReference(); + AMQMessage message = _reference.getMessage(); + final boolean immediate = message.isImmediate(); for(int i = 0; i < _destinationQueues.size(); i++) { @@ -1242,7 +1266,7 @@ public class AMQChannel implements AMQSessionModel, AsyncAutoCommitTransaction.F action = null; } - queue.enqueue(amqMessage, isTransactional(), action); + queue.enqueue(message, isTransactional(), action); if(queue instanceof AMQQueue) { @@ -1251,8 +1275,8 @@ public class AMQChannel implements AMQSessionModel, AsyncAutoCommitTransaction.F } - _incommingMessage.getStoredMessage().flushToStore(); - ref.release(); + message.getStoredMessage().flushToStore(); + _reference.release(); } catch (AMQException e) { @@ -1265,6 +1289,7 @@ public class AMQChannel implements AMQSessionModel, AsyncAutoCommitTransaction.F { // Maybe keep track of entries that were created and then delete them here in case of failure // to in memory enqueue + _reference.release(); } private class ImmediateAction implements BaseQueue.PostEnqueueAction @@ -1375,28 +1400,30 @@ public class AMQChannel implements AMQSessionModel, AsyncAutoCommitTransaction.F private class WriteReturnAction implements ServerTransaction.Action { private final AMQConstant _errorCode; - private final IncomingMessage _message; private final String _description; + private final MessageReference<AMQMessage> _reference; public WriteReturnAction(AMQConstant errorCode, String description, - IncomingMessage message) + AMQMessage message) { _errorCode = errorCode; - _message = message; _description = description; + _reference = message.newReference(); } public void postCommit() { try { - _session.getProtocolOutputConverter().writeReturn(_message.getMessagePublishInfo(), - _message.getContentHeader(), - _message, + AMQMessage message = _reference.getMessage(); + _session.getProtocolOutputConverter().writeReturn(message.getMessagePublishInfo(), + message.getContentHeaderBody(), + message, _channelId, _errorCode.getCode(), AMQShortString.validValueOf(_description)); + _reference.release(); } catch (AMQException e) { @@ -1408,6 +1435,7 @@ public class AMQChannel implements AMQSessionModel, AsyncAutoCommitTransaction.F public void onRollback() { + _reference.release(); } } @@ -1468,14 +1496,10 @@ public class AMQChannel implements AMQSessionModel, AsyncAutoCommitTransaction.F } } - public boolean onSameConnection(InboundMessage inbound) + @Override + public Object getConnectionReference() { - if(inbound instanceof IncomingMessage) - { - IncomingMessage incoming = (IncomingMessage) inbound; - return getProtocolSession().getReference() == incoming.getConnectionReference(); - } - return false; + return getProtocolSession().getReference(); } public int getUnacknowledgedMessageCount() @@ -1551,9 +1575,9 @@ public class AMQChannel implements AMQSessionModel, AsyncAutoCommitTransaction.F return; } - final InboundMessage m = new InboundMessageAdapter(rejectedQueueEntry); - final List<? extends BaseQueue> destinationQueues = altExchange.route(m); + final List<? extends BaseQueue> destinationQueues = + altExchange.route(rejectedQueueEntry.getMessage(), new QueueEntryInstanceProperties(rejectedQueueEntry)); if (destinationQueues == null || destinationQueues.isEmpty()) { diff --git a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQMessage.java b/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQMessage.java index 416a4da183..833f5fb06f 100644 --- a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQMessage.java +++ b/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQMessage.java @@ -22,72 +22,43 @@ package org.apache.qpid.server.protocol.v0_8; import org.apache.log4j.Logger; -import org.apache.qpid.AMQException; import org.apache.qpid.framing.AMQShortString; import org.apache.qpid.framing.ContentHeaderBody; import org.apache.qpid.framing.abstraction.MessagePublishInfo; import org.apache.qpid.server.message.AMQMessageHeader; import org.apache.qpid.server.message.AbstractServerMessageImpl; -import org.apache.qpid.server.message.MessageReference; -import org.apache.qpid.server.queue.AMQQueue; import org.apache.qpid.server.store.StoredMessage; -import java.lang.ref.WeakReference; import java.nio.ByteBuffer; /** * A deliverable message. */ -public class AMQMessage extends AbstractServerMessageImpl<MessageMetaData> +public class AMQMessage extends AbstractServerMessageImpl<AMQMessage, MessageMetaData> { /** Used for debugging purposes. */ private static final Logger _log = Logger.getLogger(AMQMessage.class); /** Flag to indicate that this message requires 'immediate' delivery. */ - private static final byte IMMEDIATE = 0x01; - - /** - * Flag to indicate whether this message has been delivered to a consumer. Used in implementing return functionality - * for messages published with the 'immediate' flag. - */ - - private static final byte DELIVERED_TO_CONSUMER = 0x02; - - private byte _flags = 0; - private long _expiration; private final long _size; - private Object _connectionIdentifier; - private static final byte IMMEDIATE_AND_DELIVERED = (byte) (IMMEDIATE | DELIVERED_TO_CONSUMER); - public AMQMessage(StoredMessage<MessageMetaData> handle) { this(handle, null); } - public AMQMessage(StoredMessage<MessageMetaData> handle, WeakReference<AMQChannel> channelRef) + public AMQMessage(StoredMessage<MessageMetaData> handle, Object connectionReference) { - super(handle); - - - final MessageMetaData metaData = handle.getMetaData(); - _size = metaData.getContentSize(); - final MessagePublishInfo messagePublishInfo = metaData.getMessagePublishInfo(); - - if(messagePublishInfo.isImmediate()) - { - _flags |= IMMEDIATE; - } + super(handle, connectionReference); + _size = handle.getMetaData().getContentSize(); } public void setExpiration(final long expiration) { - _expiration = expiration; - } public MessageMetaData getMessageMetaData() @@ -100,21 +71,6 @@ public class AMQMessage extends AbstractServerMessageImpl<MessageMetaData> return getMessageMetaData().getContentHeaderBody(); } - public Long getMessageId() - { - return getStoredMessage().getMessageNumber(); - } - - /** - * Called selectors to determin if the message has already been sent - * - * @return _deliveredToConsumer - */ - public boolean getDeliveredToConsumer() - { - return (_flags & DELIVERED_TO_CONSUMER) != 0; - } - public String getRoutingKey() { MessageMetaData messageMetaData = getMessageMetaData(); @@ -134,24 +90,6 @@ public class AMQMessage extends AbstractServerMessageImpl<MessageMetaData> return getMessageMetaData().getMessageHeader(); } - public boolean isPersistent() - { - return getMessageMetaData().isPersistent(); - } - - /** - * Called to enforce the 'immediate' flag. - * - * @returns true if the message is marked for immediate delivery but has not been marked as delivered - * to a consumer - */ - public boolean immediateAndNotDelivered() - { - - return (_flags & IMMEDIATE_AND_DELIVERED) == IMMEDIATE; - - } - public MessagePublishInfo getMessagePublishInfo() { return getMessageMetaData().getMessagePublishInfo(); @@ -162,90 +100,27 @@ public class AMQMessage extends AbstractServerMessageImpl<MessageMetaData> return getMessageMetaData().getArrivalTime(); } - /** - * Checks to see if the message has expired. If it has the message is dequeued. - * - * @param queue The queue to check the expiration against. (Currently not used) - * - * @return true if the message has expire - * - * @throws AMQException - */ - public boolean expired(AMQQueue queue) throws AMQException - { - - if (_expiration != 0L) - { - long now = System.currentTimeMillis(); - - return (now > _expiration); - } - - return false; - } - - /** - * Called when this message is delivered to a consumer. (used to implement the 'immediate' flag functionality). - * And for selector efficiency. - */ - public void setDeliveredToConsumer() - { - _flags |= DELIVERED_TO_CONSUMER; - } - public long getSize() { return _size; - } public boolean isImmediate() { - return (_flags & IMMEDIATE) == IMMEDIATE; - } - - public long getExpiration() - { - return _expiration; - } - - public MessageReference newReference() - { - return new AMQMessageReference(this); + return getMessagePublishInfo().isImmediate(); } - public long getMessageNumber() - { - return getStoredMessage().getMessageNumber(); - } - - - public Object getConnectionIdentifier() - { - return _connectionIdentifier; - - } - public void setConnectionIdentifier(final Object connectionIdentifier) + public boolean isMandatory() { - _connectionIdentifier = connectionIdentifier; + return getMessagePublishInfo().isMandatory(); } - public String toString() - { - return "Message[" + debugIdentity() + "]: " + getMessageId() + "; ref count: " + getReferenceCount(); - } - - public int getContent(ByteBuffer buf, int offset) + public long getExpiration() { - return getStoredMessage().getContent(offset, buf); + return _expiration; } - public ByteBuffer getContent(int offset, int size) - { - return getStoredMessage().getContent(offset, size); - } - } diff --git a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQMessageReference.java b/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQMessageReference.java deleted file mode 100644 index 3adc9f70cd..0000000000 --- a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQMessageReference.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * - * 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.qpid.server.protocol.v0_8; - -import org.apache.qpid.server.message.MessageReference; - -public class AMQMessageReference extends MessageReference<AMQMessage> -{ - - - public AMQMessageReference(AMQMessage message) - { - super(message); - } - - protected void onReference(AMQMessage message) - { - message.incrementReference(); - } - - protected void onRelease(AMQMessage message) - { - message.decrementReference(); - } -} diff --git a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/ContentHeaderBodyAdapter.java b/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/ContentHeaderBodyAdapter.java deleted file mode 100644 index f5c43003a4..0000000000 --- a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/ContentHeaderBodyAdapter.java +++ /dev/null @@ -1,146 +0,0 @@ -/* - * - * 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.qpid.server.protocol.v0_8; - -import java.util.Collection; -import org.apache.qpid.framing.BasicContentHeaderProperties; -import org.apache.qpid.framing.ContentHeaderBody; -import org.apache.qpid.framing.FieldTable; - -import java.util.Set; -import org.apache.qpid.server.message.AMQMessageHeader; - -public class ContentHeaderBodyAdapter implements AMQMessageHeader -{ - private final ContentHeaderBody _contentHeaderBody; - - public ContentHeaderBodyAdapter(ContentHeaderBody contentHeaderBody) - { - _contentHeaderBody = contentHeaderBody; - } - - private BasicContentHeaderProperties getProperties() - { - return (BasicContentHeaderProperties) _contentHeaderBody.getProperties(); - } - - public String getCorrelationId() - { - return getProperties().getCorrelationIdAsString(); - } - - public long getExpiration() - { - return getProperties().getExpiration(); - } - - public String getUserId() - { - return getProperties().getUserIdAsString(); - } - - public String getAppId() - { - return getProperties().getAppIdAsString(); - } - - public String getMessageId() - { - return getProperties().getMessageIdAsString(); - } - - public String getMimeType() - { - return getProperties().getContentTypeAsString(); - } - - public String getEncoding() - { - return getProperties().getEncodingAsString(); - } - - public byte getPriority() - { - return getProperties().getPriority(); - } - - public long getTimestamp() - { - return getProperties().getTimestamp(); - } - - public String getType() - { - return getProperties().getTypeAsString(); - } - - public String getReplyTo() - { - return getProperties().getReplyToAsString(); - } - - public String getReplyToExchange() - { - // TODO - return getReplyTo(); - } - - public String getReplyToRoutingKey() - { - // TODO - return getReplyTo(); - - } - - public Object getHeader(String name) - { - FieldTable ft = getProperties().getHeaders(); - return ft.get(name); - } - - public boolean containsHeaders(Set<String> names) - { - FieldTable ft = getProperties().getHeaders(); - for(String name : names) - { - if(!ft.containsKey(name)) - { - return false; - } - } - return true; - } - - @Override - public Collection<String> getHeaderNames() - { - FieldTable ft = getProperties().getHeaders(); - return ft.keys(); - } - - public boolean containsHeader(String name) - { - FieldTable ft = getProperties().getHeaders(); - return ft.containsKey(name); - } - - -} diff --git a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/IncomingMessage.java b/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/IncomingMessage.java index 5267651a66..5a9a51ff59 100644 --- a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/IncomingMessage.java +++ b/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/IncomingMessage.java @@ -24,96 +24,44 @@ import org.apache.log4j.Logger; import org.apache.qpid.AMQException; import org.apache.qpid.framing.AMQShortString; -import org.apache.qpid.framing.BasicContentHeaderProperties; +import org.apache.qpid.framing.ContentBody; import org.apache.qpid.framing.ContentHeaderBody; -import org.apache.qpid.framing.abstraction.ContentChunk; import org.apache.qpid.framing.abstraction.MessagePublishInfo; import org.apache.qpid.server.exchange.Exchange; -import org.apache.qpid.server.message.AMQMessageHeader; -import org.apache.qpid.server.message.EnqueableMessage; -import org.apache.qpid.server.message.InboundMessage; -import org.apache.qpid.server.message.MessageContentSource; -import org.apache.qpid.server.queue.BaseQueue; -import org.apache.qpid.server.queue.Filterable; import org.apache.qpid.server.store.StoredMessage; -import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.List; -public class IncomingMessage implements Filterable, InboundMessage, EnqueableMessage, MessageContentSource +public class IncomingMessage { - /** Used for debugging purposes. */ - private static final Logger _logger = Logger.getLogger(IncomingMessage.class); - private final MessagePublishInfo _messagePublishInfo; private ContentHeaderBody _contentHeaderBody; - + private Exchange _exchange; /** * Keeps a track of how many bytes we have received in body frames */ private long _bodyLengthReceived = 0; + private List<ContentBody> _contentChunks = new ArrayList<ContentBody>(); - /** - * This is stored during routing, to know the queues to which this message should immediately be - * delivered. It is <b>cleared after delivery has been attempted</b>. Any persistent record of destinations is done - * by the message handle. - */ - private List<? extends BaseQueue> _destinationQueues; - - private long _expiration; - - private Exchange _exchange; - - private List<ContentChunk> _contentChunks = new ArrayList<ContentChunk>(); - - // we keep both the original meta data object and the store reference to it just in case the - // store would otherwise flow it to disk - - private MessageMetaData _messageMetaData; - - private StoredMessage<MessageMetaData> _storedMessageHandle; - private Object _connectionReference; - - - public IncomingMessage( - final MessagePublishInfo info - ) - { - this(info, null); - } - - public IncomingMessage(MessagePublishInfo info, Object reference) + public IncomingMessage(MessagePublishInfo info) { _messagePublishInfo = info; - _connectionReference = reference; } - public void setContentHeaderBody(final ContentHeaderBody contentHeaderBody) throws AMQException + public void setContentHeaderBody(final ContentHeaderBody contentHeaderBody) { _contentHeaderBody = contentHeaderBody; } - public void setExpiration() - { - _expiration = ((BasicContentHeaderProperties) _contentHeaderBody.getProperties()).getExpiration(); - } - - public MessageMetaData headersReceived(long currentTime) - { - _messageMetaData = new MessageMetaData(_messagePublishInfo, _contentHeaderBody, 0, currentTime); - return _messageMetaData; - } - - - public List<? extends BaseQueue> getDestinationQueues() + public MessagePublishInfo getMessagePublishInfo() { - return _destinationQueues; + return _messagePublishInfo; } - public void addContentBodyFrame(final ContentChunk contentChunk) throws AMQException + public void addContentBodyFrame(final ContentBody contentChunk) throws AMQException { _bodyLengthReceived += contentChunk.getSize(); _contentChunks.add(contentChunk); @@ -124,31 +72,14 @@ public class IncomingMessage implements Filterable, InboundMessage, EnqueableMes return (_bodyLengthReceived == getContentHeader().getBodySize()); } - public AMQShortString getExchange() + public AMQShortString getExchangeName() { return _messagePublishInfo.getExchange(); } - public String getRoutingKey() - { - return _messagePublishInfo.getRoutingKey() == null ? null : _messagePublishInfo.getRoutingKey().toString(); - } - - public String getBinding() - { - return _messagePublishInfo.getRoutingKey() == null ? null : _messagePublishInfo.getRoutingKey().toString(); - } - - - public boolean isMandatory() - { - return _messagePublishInfo.isMandatory(); - } - - - public boolean isImmediate() + public Exchange getExchange() { - return _messagePublishInfo.isImmediate(); + return _exchange; } public ContentHeaderBody getContentHeader() @@ -156,129 +87,24 @@ public class IncomingMessage implements Filterable, InboundMessage, EnqueableMes return _contentHeaderBody; } - - public AMQMessageHeader getMessageHeader() - { - return _messageMetaData.getMessageHeader(); - } - - public boolean isPersistent() - { - return getContentHeader().getProperties() instanceof BasicContentHeaderProperties && - ((BasicContentHeaderProperties) getContentHeader().getProperties()).getDeliveryMode() == - BasicContentHeaderProperties.PERSISTENT; - } - - public boolean isRedelivered() - { - return false; - } - - public long getSize() { return getContentHeader().getBodySize(); } - public long getMessageNumber() - { - return _storedMessageHandle.getMessageNumber(); - } - public void setExchange(final Exchange e) { _exchange = e; } - public void route() - { - enqueue(_exchange.route(this)); - - } - - public void enqueue(final List<? extends BaseQueue> queues) - { - _destinationQueues = queues; - } - - public MessagePublishInfo getMessagePublishInfo() - { - return _messagePublishInfo; - } - - public long getExpiration() - { - return _expiration; - } - public int getBodyCount() throws AMQException { return _contentChunks.size(); } - public ContentChunk getContentChunk(int index) + public ContentBody getContentChunk(int index) { return _contentChunks.get(index); } - - public int getContent(ByteBuffer buf, int offset) - { - int pos = 0; - int written = 0; - for(ContentChunk cb : _contentChunks) - { - ByteBuffer data = ByteBuffer.wrap(cb.getData()); - if(offset+written >= pos && offset < pos + data.limit()) - { - ByteBuffer src = data.duplicate(); - src.position(offset+written - pos); - src = src.slice(); - - if(buf.remaining() < src.limit()) - { - src.limit(buf.remaining()); - } - int count = src.limit(); - buf.put(src); - written += count; - if(buf.remaining() == 0) - { - break; - } - } - pos+=data.limit(); - } - return written; - - } - - - public ByteBuffer getContent(int offset, int size) - { - ByteBuffer buf = ByteBuffer.allocate(size); - getContent(buf,offset); - buf.flip(); - return buf; - } - - public void setStoredMessage(StoredMessage<MessageMetaData> storedMessageHandle) - { - _storedMessageHandle = storedMessageHandle; - } - - public StoredMessage<MessageMetaData> getStoredMessage() - { - return _storedMessageHandle; - } - - public Object getConnectionReference() - { - return _connectionReference; - } - - public MessageMetaData getMessageMetaData() - { - return _messageMetaData; - } } diff --git a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/MessageMetaData.java b/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/MessageMetaData.java index 4cc590d8cc..ead28c6e26 100644 --- a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/MessageMetaData.java +++ b/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/MessageMetaData.java @@ -46,11 +46,10 @@ import java.util.Set; */ public class MessageMetaData implements StorableMessageMetaData { - private MessagePublishInfo _messagePublishInfo; + private final MessagePublishInfo _messagePublishInfo; - private ContentHeaderBody _contentHeaderBody; + private final ContentHeaderBody _contentHeaderBody; - private int _contentChunkCount; private long _arrivalTime; private static final byte MANDATORY_FLAG = 1; @@ -58,59 +57,36 @@ public class MessageMetaData implements StorableMessageMetaData public static final MessageMetaDataType.Factory<MessageMetaData> FACTORY = new MetaDataFactory(); private static final MessageMetaDataType_0_8 TYPE = new MessageMetaDataType_0_8(); - public MessageMetaData(MessagePublishInfo publishBody, ContentHeaderBody contentHeaderBody, int contentChunkCount) + public MessageMetaData(MessagePublishInfo publishBody, ContentHeaderBody contentHeaderBody) { - this(publishBody,contentHeaderBody, contentChunkCount, System.currentTimeMillis()); + this(publishBody,contentHeaderBody, System.currentTimeMillis()); } - public MessageMetaData(MessagePublishInfo publishBody, ContentHeaderBody contentHeaderBody, int contentChunkCount, long arrivalTime) + public MessageMetaData(MessagePublishInfo publishBody, + ContentHeaderBody contentHeaderBody, + long arrivalTime) { _contentHeaderBody = contentHeaderBody; _messagePublishInfo = publishBody; - _contentChunkCount = contentChunkCount; _arrivalTime = arrivalTime; } - public int getContentChunkCount() - { - return _contentChunkCount; - } - - public void setContentChunkCount(int contentChunkCount) - { - _contentChunkCount = contentChunkCount; - } public ContentHeaderBody getContentHeaderBody() { return _contentHeaderBody; } - public void setContentHeaderBody(ContentHeaderBody contentHeaderBody) - { - _contentHeaderBody = contentHeaderBody; - } - public MessagePublishInfo getMessagePublishInfo() { return _messagePublishInfo; } - public void setMessagePublishInfo(MessagePublishInfo messagePublishInfo) - { - _messagePublishInfo = messagePublishInfo; - } - public long getArrivalTime() { return _arrivalTime; } - public void setArrivalTime(long arrivalTime) - { - _arrivalTime = arrivalTime; - } - public MessageMetaDataType getType() { return TYPE; @@ -169,8 +145,7 @@ public class MessageMetaData implements StorableMessageMetaData public boolean isPersistent() { - BasicContentHeaderProperties properties = (BasicContentHeaderProperties) (_contentHeaderBody.getProperties()); - return properties.getDeliveryMode() == BasicContentHeaderProperties.PERSISTENT; + return _contentHeaderBody.getProperties().getDeliveryMode() == BasicContentHeaderProperties.PERSISTENT; } private static class MetaDataFactory implements MessageMetaDataType.Factory @@ -219,7 +194,7 @@ public class MessageMetaData implements StorableMessageMetaData return routingKey; } }; - return new MessageMetaData(publishBody, chb, 0, arrivalTime); + return new MessageMetaData(publishBody, chb, arrivalTime); } catch (AMQException e) { @@ -242,7 +217,7 @@ public class MessageMetaData implements StorableMessageMetaData { private BasicContentHeaderProperties getProperties() { - return (BasicContentHeaderProperties) getContentHeaderBody().getProperties(); + return getContentHeaderBody().getProperties(); } public String getUserId() @@ -300,18 +275,6 @@ public class MessageMetaData implements StorableMessageMetaData return getProperties().getReplyToAsString(); } - public String getReplyToExchange() - { - // TODO - return getReplyTo(); - } - - public String getReplyToRoutingKey() - { - // TODO - return getReplyTo(); - } - public Object getHeader(String name) { FieldTable ft = getProperties().getHeaders(); diff --git a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/SubscriptionImpl.java b/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/SubscriptionImpl.java index d1d86fe478..d48e8b3dea 100644 --- a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/SubscriptionImpl.java +++ b/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/SubscriptionImpl.java @@ -28,6 +28,7 @@ import org.apache.qpid.framing.AMQShortString; import org.apache.qpid.framing.FieldTable; import org.apache.qpid.server.filter.FilterManager; import org.apache.qpid.server.filter.FilterManagerFactory; +import org.apache.qpid.server.filter.Filterable; import org.apache.qpid.server.flow.FlowCreditManager; import org.apache.qpid.server.logging.LogActor; import org.apache.qpid.server.logging.LogSubject; @@ -488,7 +489,7 @@ public abstract class SubscriptionImpl implements Subscription, FlowCreditManage { AMQMessage message = (AMQMessage) entry.getMessage(); - final Object publisherReference = message.getConnectionIdentifier(); + final Object publisherReference = message.getConnectionReference(); // We don't want local messages so check to see if message is one we sent Object localReference = getProtocolSession().getReference(); @@ -519,7 +520,7 @@ public abstract class SubscriptionImpl implements Subscription, FlowCreditManage private boolean checkFilters(QueueEntry msg) { - return (_filters == null) || _filters.allAllow(msg); + return (_filters == null) || _filters.allAllow(msg.asFilterable()); } public boolean isAutoClose() diff --git a/qpid/java/broker-plugins/amqp-0-8-protocol/src/test/java/org/apache/qpid/server/protocol/v0_8/AckTest.java b/qpid/java/broker-plugins/amqp-0-8-protocol/src/test/java/org/apache/qpid/server/protocol/v0_8/AckTest.java index 4ab64ca100..176d1858f1 100644 --- a/qpid/java/broker-plugins/amqp-0-8-protocol/src/test/java/org/apache/qpid/server/protocol/v0_8/AckTest.java +++ b/qpid/java/broker-plugins/amqp-0-8-protocol/src/test/java/org/apache/qpid/server/protocol/v0_8/AckTest.java @@ -119,8 +119,6 @@ public class AckTest extends QpidTestCase return new AMQShortString("rk"); } }; - final IncomingMessage msg = new IncomingMessage(publishBody); - //IncomingMessage msg2 = null; BasicContentHeaderProperties b = new BasicContentHeaderProperties(); ContentHeaderBody cb = new ContentHeaderBody(); cb.setProperties(b); @@ -131,42 +129,35 @@ public class AckTest extends QpidTestCase b.setDeliveryMode((byte) 2); } - msg.setContentHeaderBody(cb); - // we increment the reference here since we are not delivering the messaging to any queues, which is where // the reference is normally incremented. The test is easier to construct if we have direct access to the // subscription ArrayList<AMQQueue> qs = new ArrayList<AMQQueue>(); qs.add(_queue); - msg.enqueue(qs); - MessageMetaData mmd = msg.headersReceived(System.currentTimeMillis()); + MessageMetaData mmd = new MessageMetaData(publishBody,cb, System.currentTimeMillis()); final StoredMessage storedMessage = _messageStore.addMessage(mmd); - msg.setStoredMessage(storedMessage); final AMQMessage message = new AMQMessage(storedMessage); - if(msg.allContentReceived()) - { - ServerTransaction txn = new AutoCommitTransaction(_messageStore); - txn.enqueue(_queue, message, new ServerTransaction.Action() { - public void postCommit() + ServerTransaction txn = new AutoCommitTransaction(_messageStore); + txn.enqueue(_queue, message, new ServerTransaction.Action() { + public void postCommit() + { + try { - try - { - - _queue.enqueue(message); - } - catch (AMQException e) - { - throw new RuntimeException(e); - } - } - public void onRollback() + _queue.enqueue(message); + } + catch (AMQException e) { - //To change body of implemented methods use File | Settings | File Templates. + throw new RuntimeException(e); } - }); + } + + public void onRollback() + { + //To change body of implemented methods use File | Settings | File Templates. + } + }); - } // we manually send the message to the subscription //_subscription.send(new QueueEntry(_queue,msg), _queue); } diff --git a/qpid/java/broker-plugins/amqp-0-8-protocol/src/test/java/org/apache/qpid/server/protocol/v0_8/InternalTestProtocolSession.java b/qpid/java/broker-plugins/amqp-0-8-protocol/src/test/java/org/apache/qpid/server/protocol/v0_8/InternalTestProtocolSession.java index f1dfc52ba4..1680a16b42 100644 --- a/qpid/java/broker-plugins/amqp-0-8-protocol/src/test/java/org/apache/qpid/server/protocol/v0_8/InternalTestProtocolSession.java +++ b/qpid/java/broker-plugins/amqp-0-8-protocol/src/test/java/org/apache/qpid/server/protocol/v0_8/InternalTestProtocolSession.java @@ -35,6 +35,7 @@ import java.util.concurrent.atomic.AtomicLong; import javax.security.auth.Subject; +import org.apache.log4j.Logger; import org.apache.qpid.AMQException; import org.apache.qpid.framing.AMQShortString; import org.apache.qpid.framing.ContentHeaderBody; @@ -55,6 +56,7 @@ import org.apache.qpid.transport.network.NetworkConnection; public class InternalTestProtocolSession extends AMQProtocolEngine implements ProtocolOutputConverter { + private static final Logger _logger = Logger.getLogger(InternalTestProtocolSession.class); // ChannelID(LIST) -> LinkedList<Pair> private final Map<Integer, Map<AMQShortString, LinkedList<DeliveryPair>>> _channelDelivers; private AtomicInteger _deliveryCount = new AtomicInteger(0); @@ -185,7 +187,7 @@ public class InternalTestProtocolSession extends AMQProtocolEngine implements Pr } catch (InterruptedException e) { - e.printStackTrace(); + _logger.error("Thread interupted", e); } } } diff --git a/qpid/java/broker-plugins/amqp-0-8-protocol/src/test/java/org/apache/qpid/server/protocol/v0_8/MockStoredMessage.java b/qpid/java/broker-plugins/amqp-0-8-protocol/src/test/java/org/apache/qpid/server/protocol/v0_8/MockStoredMessage.java index 15573a871f..50145e5c6d 100755 --- a/qpid/java/broker-plugins/amqp-0-8-protocol/src/test/java/org/apache/qpid/server/protocol/v0_8/MockStoredMessage.java +++ b/qpid/java/broker-plugins/amqp-0-8-protocol/src/test/java/org/apache/qpid/server/protocol/v0_8/MockStoredMessage.java @@ -57,9 +57,9 @@ public class MockStoredMessage implements StoredMessage<MessageMetaData> { FieldTable headers = new FieldTable(); headers.setString(headerName, headerValue == null? null :String.valueOf(headerValue)); - ((BasicContentHeaderProperties)chb.getProperties()).setHeaders(headers); + ( chb.getProperties()).setHeaders(headers); } - _metaData = new MessageMetaData(info, chb, 0); + _metaData = new MessageMetaData(info, chb); _content = ByteBuffer.allocate(_metaData.getContentSize()); } diff --git a/qpid/java/broker-plugins/amqp-0-8-protocol/src/test/java/org/apache/qpid/server/protocol/v0_8/ReferenceCountingTest.java b/qpid/java/broker-plugins/amqp-0-8-protocol/src/test/java/org/apache/qpid/server/protocol/v0_8/ReferenceCountingTest.java index 87fbcfa9b3..227e9794da 100644 --- a/qpid/java/broker-plugins/amqp-0-8-protocol/src/test/java/org/apache/qpid/server/protocol/v0_8/ReferenceCountingTest.java +++ b/qpid/java/broker-plugins/amqp-0-8-protocol/src/test/java/org/apache/qpid/server/protocol/v0_8/ReferenceCountingTest.java @@ -81,7 +81,7 @@ public class ReferenceCountingTest extends QpidTestCase - MessageMetaData mmd = new MessageMetaData(info, chb, 0); + MessageMetaData mmd = new MessageMetaData(info, chb); StoredMessage storedMessage = _store.addMessage(mmd); @@ -139,7 +139,7 @@ public class ReferenceCountingTest extends QpidTestCase final ContentHeaderBody chb = createPersistentContentHeader(); - MessageMetaData mmd = new MessageMetaData(info, chb, 0); + MessageMetaData mmd = new MessageMetaData(info, chb); StoredMessage storedMessage = _store.addMessage(mmd); AMQMessage message = new AMQMessage(storedMessage); diff --git a/qpid/java/broker-plugins/amqp-1-0-protocol/pom.xml b/qpid/java/broker-plugins/amqp-1-0-protocol/pom.xml index 31b42ef0e2..97db18011d 100644 --- a/qpid/java/broker-plugins/amqp-1-0-protocol/pom.xml +++ b/qpid/java/broker-plugins/amqp-1-0-protocol/pom.xml @@ -40,6 +40,14 @@ <version>0.26-SNAPSHOT</version> <scope>compile</scope> </dependency> + + <dependency> + <groupId>log4j</groupId> + <artifactId>log4j</artifactId> + <version>${log4j-version}</version> + <scope>compile</scope> + </dependency> + </dependencies> <build> diff --git a/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Connection_1_0.java b/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Connection_1_0.java index 4cb9767514..4082f22e9c 100644 --- a/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Connection_1_0.java +++ b/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Connection_1_0.java @@ -51,6 +51,8 @@ public class Connection_1_0 implements ConnectionEventListener private final ConnectionEndpoint _conn; private final long _connectionId; private final Collection<Session_1_0> _sessions = Collections.synchronizedCollection(new ArrayList<Session_1_0>()); + private final Object _reference = new Object(); + public static interface Task @@ -79,6 +81,11 @@ public class Connection_1_0 implements ConnectionEventListener } + public Object getReference() + { + return _reference; + } + public void remoteSessionCreation(SessionEndpoint endpoint) { Session_1_0 session = new Session_1_0(_vhost, this); diff --git a/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ExchangeDestination.java b/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ExchangeDestination.java index 2cef27267b..3b981b46b8 100644 --- a/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ExchangeDestination.java +++ b/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ExchangeDestination.java @@ -27,6 +27,8 @@ import org.apache.qpid.amqp_1_0.type.messaging.Accepted; import org.apache.qpid.amqp_1_0.type.messaging.TerminusDurability; import org.apache.qpid.amqp_1_0.type.messaging.TerminusExpiryPolicy; import org.apache.qpid.server.exchange.Exchange; +import org.apache.qpid.server.message.InstanceProperties; +import org.apache.qpid.server.message.MessageReference; import org.apache.qpid.server.queue.BaseQueue; import org.apache.qpid.server.txn.ServerTransaction; @@ -53,34 +55,71 @@ public class ExchangeDestination implements ReceivingDestination, SendingDestina public Outcome send(final Message_1_0 message, ServerTransaction txn) { - final List<? extends BaseQueue> queues = _exchange.route(message); + final InstanceProperties instanceProperties = + new InstanceProperties() + { + + @Override + public Object getProperty(final Property prop) + { + switch(prop) + { + case MANDATORY: + return false; + case REDELIVERED: + return false; + case PERSISTENT: + return message.isPersistent(); + case IMMEDIATE: + return false; + case EXPIRATION: + return message.getExpiration(); + } + return null; + }}; - txn.enqueue(queues,message, new ServerTransaction.Action() + List<? extends BaseQueue> queues = _exchange.route(message, instanceProperties); + + if(queues == null || queues.isEmpty()) { + Exchange altExchange = _exchange.getAlternateExchange(); + if(altExchange != null) + { + queues = altExchange.route(message, instanceProperties); + } + } - BaseQueue[] _queues = queues.toArray(new BaseQueue[queues.size()]); + if(queues != null && !queues.isEmpty()) + { + final BaseQueue[] baseQueues = queues.toArray(new BaseQueue[queues.size()]); - public void postCommit() + txn.enqueue(queues,message, new ServerTransaction.Action() { - for(int i = 0; i < _queues.length; i++) + MessageReference _reference = message.newReference(); + + public void postCommit() { - try - { - _queues[i].enqueue(message); - } - catch (AMQException e) + for(int i = 0; i < baseQueues.length; i++) { - // TODO - throw new RuntimeException(e); + try + { + baseQueues[i].enqueue(message); + } + catch (AMQException e) + { + // TODO + throw new RuntimeException(e); + } } + _reference.release(); } - } - public void onRollback() - { - // NO-OP - } - }); + public void onRollback() + { + _reference.release(); + } + }); + } return ACCEPTED; } diff --git a/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/MessageConverter_to_1_0.java b/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/MessageConverter_to_1_0.java index 5925bf0c32..78ca9ff2a6 100644 --- a/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/MessageConverter_to_1_0.java +++ b/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/MessageConverter_to_1_0.java @@ -272,7 +272,7 @@ public abstract class MessageConverter_to_1_0<M extends ServerMessage> implement @Override public void remove() { - serverMessage.getStoredMessage().remove(); + throw new UnsupportedOperationException(); } }; } diff --git a/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/MessageMetaData_1_0.java b/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/MessageMetaData_1_0.java index 8d48d70d9a..8db6c86fc4 100755 --- a/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/MessageMetaData_1_0.java +++ b/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/MessageMetaData_1_0.java @@ -22,6 +22,8 @@ package org.apache.qpid.server.protocol.v1_0; import java.nio.ByteBuffer; import java.util.*; + +import org.apache.log4j.Logger; import org.apache.qpid.amqp_1_0.codec.ValueHandler; import org.apache.qpid.amqp_1_0.messaging.SectionDecoder; import org.apache.qpid.amqp_1_0.messaging.SectionEncoder; @@ -44,6 +46,7 @@ import org.apache.qpid.server.store.StorableMessageMetaData; public class MessageMetaData_1_0 implements StorableMessageMetaData { + private static final Logger _logger = Logger.getLogger(MessageMetaData_1_0.class); // TODO move to somewhere more useful public static final Symbol JMS_TYPE = Symbol.valueOf("x-opt-jms-type"); public static final MessageMetaDataType.Factory<MessageMetaData_1_0> FACTORY = new MetaDataFactory(); @@ -275,7 +278,7 @@ public class MessageMetaData_1_0 implements StorableMessageMetaData } catch (AmqpErrorException e) { - e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. + _logger.error("Decoding read section error", e); throw new IllegalArgumentException(e); } } @@ -501,16 +504,6 @@ public class MessageMetaData_1_0 implements StorableMessageMetaData } } - public String getReplyToExchange() - { - return null; //TODO - } - - public String getReplyToRoutingKey() - { - return null; //TODO - } - public String getAppId() { //TODO diff --git a/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Message_1_0.java b/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Message_1_0.java index 9b11c0f48d..66094f52f0 100644 --- a/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Message_1_0.java +++ b/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Message_1_0.java @@ -21,35 +21,22 @@ package org.apache.qpid.server.protocol.v1_0; -import java.lang.ref.WeakReference; import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.List; -import java.util.concurrent.atomic.AtomicIntegerFieldUpdater; -import org.apache.qpid.server.message.InboundMessage; -import org.apache.qpid.server.message.MessageReference; -import org.apache.qpid.server.message.ServerMessage; +import org.apache.qpid.server.message.AbstractServerMessageImpl; import org.apache.qpid.server.store.StoredMessage; -public class Message_1_0 implements ServerMessage<MessageMetaData_1_0>, InboundMessage +public class Message_1_0 extends AbstractServerMessageImpl<Message_1_0, MessageMetaData_1_0> { - - private static final AtomicIntegerFieldUpdater<Message_1_0> _refCountUpdater = - AtomicIntegerFieldUpdater.newUpdater(Message_1_0.class, "_referenceCount"); - - private volatile int _referenceCount = 0; - - private final StoredMessage<MessageMetaData_1_0> _storedMessage; private List<ByteBuffer> _fragments; - private WeakReference<Session_1_0> _session; private long _arrivalTime; public Message_1_0(final StoredMessage<MessageMetaData_1_0> storedMessage) { - _storedMessage = storedMessage; - _session = null; + super(storedMessage, null); _fragments = restoreFragments(storedMessage); } @@ -75,11 +62,10 @@ public class Message_1_0 implements ServerMessage<MessageMetaData_1_0>, InboundM public Message_1_0(final StoredMessage<MessageMetaData_1_0> storedMessage, final List<ByteBuffer> fragments, - final Session_1_0 session) + final Object connectionReference) { - _storedMessage = storedMessage; + super(storedMessage, connectionReference); _fragments = fragments; - _session = new WeakReference<Session_1_0>(session); _arrivalTime = System.currentTimeMillis(); } @@ -98,7 +84,7 @@ public class Message_1_0 implements ServerMessage<MessageMetaData_1_0>, InboundM private MessageMetaData_1_0 getMessageMetaData() { - return _storedMessage.getMetaData(); + return getStoredMessage().getMetaData(); } public MessageMetaData_1_0.MessageHeader_1_0 getMessageHeader() @@ -106,16 +92,6 @@ public class Message_1_0 implements ServerMessage<MessageMetaData_1_0>, InboundM return getMessageMetaData().getMessageHeader(); } - public StoredMessage getStoredMessage() - { - return _storedMessage; - } - - public boolean isPersistent() - { - return getMessageMetaData().isPersistent(); - } - public boolean isRedelivered() { // TODO @@ -136,121 +112,19 @@ public class Message_1_0 implements ServerMessage<MessageMetaData_1_0>, InboundM return size; } - public boolean isImmediate() - { - return false; - } - public long getExpiration() { return getMessageHeader().getExpiration(); } - public MessageReference<Message_1_0> newReference() - { - return new Reference(this); - } - - public long getMessageNumber() - { - return _storedMessage.getMessageNumber(); - } - public long getArrivalTime() { return _arrivalTime; } - public int getContent(final ByteBuffer buf, final int offset) - { - return _storedMessage.getContent(offset, buf); - } - - public ByteBuffer getContent(int offset, int size) - { - ByteBuffer buf = ByteBuffer.allocate(size); - buf.limit(getContent(buf, offset)); - - return buf; - } - public List<ByteBuffer> getFragments() { return _fragments; } - public Session_1_0 getSession() - { - return _session == null ? null : _session.get(); - } - - - public boolean incrementReference() - { - if(_refCountUpdater.incrementAndGet(this) <= 0) - { - _refCountUpdater.decrementAndGet(this); - return false; - } - else - { - return true; - } - } - - /** - * Threadsafe. This will decrement the reference count and when it reaches zero will remove the message from the - * message store. - */ - - public void decrementReference() - { - int count = _refCountUpdater.decrementAndGet(this); - - // note that the operation of decrementing the reference count and then removing the message does not - // have to be atomic since the ref count starts at 1 and the exchange itself decrements that after - // the message has been passed to all queues. i.e. we are - // not relying on the all the increments having taken place before the delivery manager decrements. - if (count == 0) - { - // set the reference count way below 0 so that we can detect that the message has been deleted - // this is to guard against the message being spontaneously recreated (from the mgmt console) - // by copying from other queues at the same time as it is being removed. - _refCountUpdater.set(this,Integer.MIN_VALUE/2); - - // must check if the handle is null since there may be cases where we decide to throw away a message - // and the handle has not yet been constructed - if (_storedMessage != null) - { - _storedMessage.remove(); - } - } - else - { - if (count < 0) - { - throw new RuntimeException("Reference count for message id " + getMessageNumber() - + " has gone below 0."); - } - } - } - - public static class Reference extends MessageReference<Message_1_0> - { - public Reference(Message_1_0 message) - { - super(message); - } - - protected void onReference(Message_1_0 message) - { - message.incrementReference(); - } - - protected void onRelease(Message_1_0 message) - { - message.decrementReference(); - } - - } } diff --git a/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/QueueDestination.java b/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/QueueDestination.java index af3f0b7872..b9c10b925f 100644 --- a/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/QueueDestination.java +++ b/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/QueueDestination.java @@ -20,18 +20,17 @@ */ package org.apache.qpid.server.protocol.v1_0; +import org.apache.log4j.Logger; import org.apache.qpid.amqp_1_0.type.Outcome; import org.apache.qpid.amqp_1_0.type.messaging.Accepted; -import org.apache.qpid.AMQException; import org.apache.qpid.server.queue.AMQQueue; import org.apache.qpid.server.txn.ServerTransaction; -import java.util.Arrays; - public class QueueDestination implements SendingDestination, ReceivingDestination { + private static final Logger _logger = Logger.getLogger(QueueDestination.class); private static final Accepted ACCEPTED = new Accepted(); private static final Outcome[] OUTCOMES = new Outcome[] { ACCEPTED }; @@ -80,7 +79,7 @@ public class QueueDestination implements SendingDestination, ReceivingDestinatio } catch(Exception e) { - e.printStackTrace(); + _logger.error("Send error", e); throw new RuntimeException(e); } return ACCEPTED; diff --git a/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ReceivingLink_1_0.java b/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ReceivingLink_1_0.java index 4efa053204..df39ed667e 100644 --- a/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ReceivingLink_1_0.java +++ b/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ReceivingLink_1_0.java @@ -43,6 +43,7 @@ import org.apache.qpid.amqp_1_0.type.transaction.TransactionalState; import org.apache.qpid.amqp_1_0.type.transport.Detach; import org.apache.qpid.amqp_1_0.type.transport.ReceiverSettleMode; import org.apache.qpid.amqp_1_0.type.transport.Transfer; +import org.apache.qpid.server.message.MessageReference; import org.apache.qpid.server.store.StoredMessage; import org.apache.qpid.server.txn.AutoCommitTransaction; import org.apache.qpid.server.txn.ServerTransaction; @@ -170,8 +171,8 @@ public class ReceivingLink_1_0 implements ReceivingLinkListener, Link_1_0, Deliv storedMessage.flushToStore(); - Message_1_0 message = new Message_1_0(storedMessage, fragments, getSession()); - + Message_1_0 message = new Message_1_0(storedMessage, fragments, getSession().getConnection().getReference()); + MessageReference<Message_1_0> reference = message.newReference(); Binary transactionId = null; org.apache.qpid.amqp_1_0.type.DeliveryState xfrState = xfr.getState(); @@ -241,6 +242,8 @@ public class ReceivingLink_1_0 implements ReceivingLinkListener, Link_1_0, Deliv } }); } + + reference.release(); } } diff --git a/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/SendingLink_1_0.java b/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/SendingLink_1_0.java index 0351de3e00..034927c56b 100644 --- a/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/SendingLink_1_0.java +++ b/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/SendingLink_1_0.java @@ -27,6 +27,8 @@ import java.util.List; import java.util.Map; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; + +import org.apache.log4j.Logger; import org.apache.qpid.AMQException; import org.apache.qpid.AMQInternalException; import org.apache.qpid.AMQSecurityException; @@ -64,7 +66,6 @@ import org.apache.qpid.server.filter.JMSSelectorFilter; import org.apache.qpid.server.filter.SimpleFilterManager; import org.apache.qpid.server.model.UUIDGenerator; import org.apache.qpid.server.queue.AMQQueue; -import org.apache.qpid.server.queue.AMQQueueFactory; import org.apache.qpid.server.queue.QueueEntry; import org.apache.qpid.server.txn.AutoCommitTransaction; import org.apache.qpid.server.txn.ServerTransaction; @@ -72,6 +73,8 @@ import org.apache.qpid.server.virtualhost.VirtualHost; public class SendingLink_1_0 implements SendingLinkListener, Link_1_0, DeliveryStateHandler { + private static final Logger _logger = Logger.getLogger(SendingLink_1_0.class); + private VirtualHost _vhost; private SendingDestination _destination; @@ -319,7 +322,8 @@ public class SendingLink_1_0 implements SendingLinkListener, Link_1_0, DeliveryS } catch (AMQException e) { - e.printStackTrace(); //TODO. + //TODO + _logger.error("Error removing queue", e); } } } @@ -342,14 +346,15 @@ public class SendingLink_1_0 implements SendingLinkListener, Link_1_0, DeliveryS } catch (AMQSecurityException e) { - e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. + _logger.error("Security error", e); } catch (AMQInternalException e) { - e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. - } catch (AMQException e) + _logger.error("Internal error", e); + } + catch (AMQException e) { - e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. + _logger.error("Error", e); } _subscription = new Subscription_1_0(this, qd, true); @@ -370,7 +375,8 @@ public class SendingLink_1_0 implements SendingLinkListener, Link_1_0, DeliveryS } catch (AMQException e) { - e.printStackTrace(); //TODO + //TODO + _logger.error("Error registering subscription", e); } } @@ -398,7 +404,8 @@ public class SendingLink_1_0 implements SendingLinkListener, Link_1_0, DeliveryS } catch (AMQException e) { - e.printStackTrace(); //TODO + //TODO + _logger.error("Error unregistering subscription", e); } Modified state = new Modified(); @@ -423,7 +430,8 @@ public class SendingLink_1_0 implements SendingLinkListener, Link_1_0, DeliveryS } catch(AMQException e) { - e.printStackTrace(); // TODO - Implement + //TODO + _logger.error("Error removing queue", e); } } diff --git a/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Session_1_0.java b/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Session_1_0.java index d3962c779c..823e4cb16d 100644 --- a/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Session_1_0.java +++ b/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Session_1_0.java @@ -21,6 +21,8 @@ package org.apache.qpid.server.protocol.v1_0; import java.text.MessageFormat; + +import org.apache.log4j.Logger; import org.apache.qpid.amqp_1_0.transport.LinkEndpoint; import org.apache.qpid.amqp_1_0.transport.ReceivingLinkEndpoint; import org.apache.qpid.amqp_1_0.transport.SendingLinkEndpoint; @@ -39,13 +41,11 @@ import org.apache.qpid.AMQSecurityException; import org.apache.qpid.protocol.AMQConstant; import org.apache.qpid.server.exchange.Exchange; import org.apache.qpid.server.logging.LogSubject; -import org.apache.qpid.server.message.InboundMessage; import org.apache.qpid.server.model.UUIDGenerator; import org.apache.qpid.server.protocol.AMQConnectionModel; import org.apache.qpid.server.protocol.AMQSessionModel; import org.apache.qpid.server.protocol.LinkRegistry; import org.apache.qpid.server.queue.AMQQueue; -import org.apache.qpid.server.queue.AMQQueueFactory; import org.apache.qpid.server.txn.AutoCommitTransaction; import org.apache.qpid.server.txn.ServerTransaction; import org.apache.qpid.server.virtualhost.VirtualHost; @@ -56,6 +56,7 @@ import static org.apache.qpid.server.logging.subjects.LogSubjectFormat.CHANNEL_F public class Session_1_0 implements SessionEventListener, AMQSessionModel, LogSubject { + private static final Logger _logger = Logger.getLogger(Session_1_0.class); private static final Symbol LIFETIME_POLICY = Symbol.valueOf("lifetime-policy"); private VirtualHost _vhost; private AutoCommitTransaction _transaction; @@ -155,7 +156,7 @@ public class Session_1_0 implements SessionEventListener, AMQSessionModel, LogSu } catch(AmqpErrorException e) { - e.printStackTrace(); + _logger.error("Error creating sending link", e); destination = null; sendingLinkEndpoint.setSource(null); error = e.getError(); @@ -355,7 +356,8 @@ public class Session_1_0 implements SessionEventListener, AMQSessionModel, LogSu } catch (AMQException e) { - e.printStackTrace(); //TODO. + //TODO + _logger.error("Error removing queue from vhost", e); } } } @@ -388,10 +390,13 @@ public class Session_1_0 implements SessionEventListener, AMQSessionModel, LogSu } catch (AMQSecurityException e) { - e.printStackTrace(); //TODO. - } catch (AMQException e) + //TODO + _logger.error("Security error", e); + } + catch (AMQException e) { - e.printStackTrace(); //TODO + //TODO + _logger.error("Error", e); } return queue; @@ -533,10 +538,9 @@ public class Session_1_0 implements SessionEventListener, AMQSessionModel, LogSu } @Override - public boolean onSameConnection(InboundMessage inbound) + public Object getConnectionReference() { - // TODO - return false; + return getConnection().getReference(); } @Override diff --git a/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Subscription_1_0.java b/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Subscription_1_0.java index b9695ba87a..e5f3a52e3b 100644 --- a/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Subscription_1_0.java +++ b/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Subscription_1_0.java @@ -57,7 +57,8 @@ import org.apache.qpid.server.queue.QueueEntry; import org.apache.qpid.server.subscription.Subscription; import org.apache.qpid.server.txn.ServerTransaction; -class Subscription_1_0 implements Subscription +class + Subscription_1_0 implements Subscription { private SendingLink_1_0 _link; @@ -149,7 +150,7 @@ class Subscription_1_0 implements Subscription { if(entry.getMessage() instanceof Message_1_0) { - if(_noLocal && ((Message_1_0)entry.getMessage()).getSession() == getSession()) + if(_noLocal && ((Message_1_0)entry.getMessage()).getConnectionReference() == getSession().getConnection().getReference()) { return false; } @@ -164,7 +165,7 @@ class Subscription_1_0 implements Subscription private boolean checkFilters(final QueueEntry entry) { - return (_filters == null) || _filters.allAllow(entry); + return (_filters == null) || _filters.allAllow(entry.asFilterable()); } public boolean isClosed() diff --git a/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/TxnCoordinatorLink_1_0.java b/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/TxnCoordinatorLink_1_0.java index a05d14816a..10d4811916 100644 --- a/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/TxnCoordinatorLink_1_0.java +++ b/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/TxnCoordinatorLink_1_0.java @@ -20,13 +20,13 @@ */ package org.apache.qpid.server.protocol.v1_0; +import org.apache.log4j.Logger; import org.apache.qpid.amqp_1_0.messaging.SectionDecoder; import org.apache.qpid.amqp_1_0.messaging.SectionDecoderImpl; import org.apache.qpid.amqp_1_0.transport.LinkEndpoint; import org.apache.qpid.amqp_1_0.transport.ReceivingLinkEndpoint; import org.apache.qpid.amqp_1_0.transport.ReceivingLinkListener; import org.apache.qpid.amqp_1_0.type.*; -import org.apache.qpid.amqp_1_0.type.DeliveryState; import org.apache.qpid.amqp_1_0.type.messaging.*; import org.apache.qpid.amqp_1_0.type.transaction.Declare; import org.apache.qpid.amqp_1_0.type.transaction.Declared; @@ -42,6 +42,7 @@ import java.util.*; public class TxnCoordinatorLink_1_0 implements ReceivingLinkListener, Link_1_0 { + private static final Logger _logger = Logger.getLogger(TxnCoordinatorLink_1_0.class); private VirtualHost _vhost; private ReceivingLinkEndpoint _endpoint; @@ -149,7 +150,8 @@ public class TxnCoordinatorLink_1_0 implements ReceivingLinkListener, Link_1_0 } catch (AmqpErrorException e) { - e.printStackTrace(); //TODO. + //TODO + _logger.error("AMQP error", e); } } diff --git a/qpid/java/broker-plugins/amqp-msg-conv-0-8-to-0-10/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v0_10/MessageConverter_0_10_to_0_8.java b/qpid/java/broker-plugins/amqp-msg-conv-0-8-to-0-10/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v0_10/MessageConverter_0_10_to_0_8.java index 92bccf871f..f1843de8ac 100644 --- a/qpid/java/broker-plugins/amqp-msg-conv-0-8-to-0-10/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v0_10/MessageConverter_0_10_to_0_8.java +++ b/qpid/java/broker-plugins/amqp-msg-conv-0-8-to-0-10/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v0_10/MessageConverter_0_10_to_0_8.java @@ -225,7 +225,6 @@ public class MessageConverter_0_10_to_0_8 implements MessageConverter<MessageTra { return new MessageMetaData(convertPublishBody(message), convertContentHeaderBody(message, vhost), - 1, message.getArrivalTime()); } diff --git a/qpid/java/broker-plugins/amqp-msg-conv-0-8-to-0-10/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v0_10/MessageConverter_0_8_to_0_10.java b/qpid/java/broker-plugins/amqp-msg-conv-0-8-to-0-10/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v0_10/MessageConverter_0_8_to_0_10.java index e1e8fbd9d3..544099f1f2 100644 --- a/qpid/java/broker-plugins/amqp-msg-conv-0-8-to-0-10/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v0_10/MessageConverter_0_8_to_0_10.java +++ b/qpid/java/broker-plugins/amqp-msg-conv-0-8-to-0-10/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v0_10/MessageConverter_0_8_to_0_10.java @@ -121,7 +121,7 @@ public class MessageConverter_0_8_to_0_10 implements MessageConverter<AMQMessag body.flip(); BasicContentHeaderProperties properties = - (BasicContentHeaderProperties) message_0_8.getContentHeaderBody().getProperties(); + message_0_8.getContentHeaderBody().getProperties(); final AMQShortString exchange = message_0_8.getMessagePublishInfo().getExchange(); if(exchange != null) diff --git a/qpid/java/broker-plugins/amqp-msg-conv-0-8-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v1_0/MessageConverter_0_8_to_1_0.java b/qpid/java/broker-plugins/amqp-msg-conv-0-8-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v1_0/MessageConverter_0_8_to_1_0.java index 0d9d59ff56..bbea177260 100644 --- a/qpid/java/broker-plugins/amqp-msg-conv-0-8-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v1_0/MessageConverter_0_8_to_1_0.java +++ b/qpid/java/broker-plugins/amqp-msg-conv-0-8-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v1_0/MessageConverter_0_8_to_1_0.java @@ -56,7 +56,7 @@ public class MessageConverter_0_8_to_1_0 extends MessageConverter_to_1_0<AMQMess header.setDurable(serverMessage.isPersistent()); BasicContentHeaderProperties contentHeader = - (BasicContentHeaderProperties) serverMessage.getContentHeaderBody().getProperties(); + serverMessage.getContentHeaderBody().getProperties(); header.setPriority(UnsignedByte.valueOf(contentHeader.getPriority())); final long expiration = serverMessage.getExpiration(); diff --git a/qpid/java/broker-plugins/derby-store/pom.xml b/qpid/java/broker-plugins/derby-store/pom.xml index 51578a5db6..9b55875aa8 100644 --- a/qpid/java/broker-plugins/derby-store/pom.xml +++ b/qpid/java/broker-plugins/derby-store/pom.xml @@ -41,6 +41,13 @@ <scope>compile</scope> </dependency> + <dependency> + <groupId>log4j</groupId> + <artifactId>log4j</artifactId> + <version>${log4j-version}</version> + <scope>compile</scope> + </dependency> + <!-- test dependencies --> <dependency> <groupId>org.apache.qpid</groupId> diff --git a/qpid/java/broker-plugins/jdbc-store/pom.xml b/qpid/java/broker-plugins/jdbc-store/pom.xml index 1cc75d8465..ca861a42f3 100644 --- a/qpid/java/broker-plugins/jdbc-store/pom.xml +++ b/qpid/java/broker-plugins/jdbc-store/pom.xml @@ -34,6 +34,13 @@ <scope>provided</scope> </dependency> + <dependency> + <groupId>log4j</groupId> + <artifactId>log4j</artifactId> + <version>${log4j-version}</version> + <scope>compile</scope> + </dependency> + <!-- test dependencies --> <dependency> <groupId>org.apache.qpid</groupId> diff --git a/qpid/java/broker-plugins/management-http/pom.xml b/qpid/java/broker-plugins/management-http/pom.xml index 36925369fe..abc754902a 100644 --- a/qpid/java/broker-plugins/management-http/pom.xml +++ b/qpid/java/broker-plugins/management-http/pom.xml @@ -35,6 +35,20 @@ </dependency> <dependency> + <groupId>log4j</groupId> + <artifactId>log4j</artifactId> + <version>${log4j-version}</version> + <scope>compile</scope> + </dependency> + + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-api</artifactId> + <version>${slf4j-version}</version> + <scope>compile</scope> + </dependency> + + <dependency> <groupId>org.apache.geronimo.specs</groupId> <artifactId>geronimo-servlet_2.5_spec</artifactId> <version>1.2</version> diff --git a/qpid/java/broker-plugins/management-jmx/pom.xml b/qpid/java/broker-plugins/management-jmx/pom.xml index 8fd525e7d6..8a06fcf185 100644 --- a/qpid/java/broker-plugins/management-jmx/pom.xml +++ b/qpid/java/broker-plugins/management-jmx/pom.xml @@ -41,6 +41,13 @@ <scope>compile</scope> </dependency> + <dependency> + <groupId>log4j</groupId> + <artifactId>log4j</artifactId> + <version>${log4j-version}</version> + <scope>compile</scope> + </dependency> + <!-- test dependencies --> <dependency> <groupId>org.apache.qpid</groupId> diff --git a/qpid/java/broker/pom.xml b/qpid/java/broker/pom.xml index 7f09d5c046..6eb51a4b2e 100644 --- a/qpid/java/broker/pom.xml +++ b/qpid/java/broker/pom.xml @@ -40,12 +40,12 @@ <scope>compile</scope> </dependency> - <dependency> - <groupId>log4j</groupId> - <artifactId>log4j</artifactId> - <version>1.2.16</version> - <scope>compile</scope> - </dependency> + <dependency> + <groupId>log4j</groupId> + <artifactId>log4j</artifactId> + <version>${log4j-version}</version> + <scope>compile</scope> + </dependency> <dependency> <groupId>commons-cli</groupId> diff --git a/qpid/java/client/pom.xml b/qpid/java/client/pom.xml index e97b5b7a0d..3d9508eb16 100644 --- a/qpid/java/client/pom.xml +++ b/qpid/java/client/pom.xml @@ -43,7 +43,7 @@ <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> - <version>1.6.4</version> + <version>${slf4j-version}</version> <scope>compile</scope> </dependency> @@ -54,13 +54,6 @@ <version>0.26-SNAPSHOT</version> <scope>test</scope> </dependency> - - <dependency> - <groupId>log4j</groupId> - <artifactId>log4j</artifactId> - <version>1.2.16</version> - <scope>test</scope> - </dependency> </dependencies> <build> diff --git a/qpid/java/client/src/main/java/org/apache/qpid/client/message/AMQMessageDelegate_0_8.java b/qpid/java/client/src/main/java/org/apache/qpid/client/message/AMQMessageDelegate_0_8.java index fe9f9f4d00..dbfbb743ec 100644 --- a/qpid/java/client/src/main/java/org/apache/qpid/client/message/AMQMessageDelegate_0_8.java +++ b/qpid/java/client/src/main/java/org/apache/qpid/client/message/AMQMessageDelegate_0_8.java @@ -30,7 +30,6 @@ 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.framing.ContentHeaderProperties; import org.apache.qpid.url.AMQBindingURL; import org.apache.qpid.url.BindingURL; @@ -73,7 +72,7 @@ public class AMQMessageDelegate_0_8 extends AbstractAMQMessageDelegate private static final boolean STRICT_AMQP_COMPLIANCE = Boolean.parseBoolean(System.getProperties().getProperty(AMQSession.STRICT_AMQP, AMQSession.STRICT_AMQP_DEFAULT)); - private ContentHeaderProperties _contentHeaderProperties; + private BasicContentHeaderProperties _contentHeaderProperties; // The base set of items that needs to be set. private AMQMessageDelegate_0_8(BasicContentHeaderProperties properties, long deliveryTag) @@ -81,7 +80,7 @@ public class AMQMessageDelegate_0_8 extends AbstractAMQMessageDelegate super(deliveryTag); _contentHeaderProperties = properties; _readableProperties = (_contentHeaderProperties != null); - _headerAdapter = new JMSHeaderAdapter(_readableProperties ? ((BasicContentHeaderProperties) _contentHeaderProperties).getHeaders() + _headerAdapter = new JMSHeaderAdapter(_readableProperties ? _contentHeaderProperties.getHeaders() : (new BasicContentHeaderProperties()).getHeaders() ); } @@ -90,7 +89,7 @@ public class AMQMessageDelegate_0_8 extends AbstractAMQMessageDelegate { this(new BasicContentHeaderProperties(), -1); _readableProperties = false; - _headerAdapter = new JMSHeaderAdapter(((BasicContentHeaderProperties) _contentHeaderProperties).getHeaders()); + _headerAdapter = new JMSHeaderAdapter(_contentHeaderProperties.getHeaders()); } @@ -337,7 +336,7 @@ public class AMQMessageDelegate_0_8 extends AbstractAMQMessageDelegate public BasicContentHeaderProperties getContentHeaderProperties() { - return (BasicContentHeaderProperties) _contentHeaderProperties; + return _contentHeaderProperties; } @@ -443,7 +442,7 @@ public class AMQMessageDelegate_0_8 extends AbstractAMQMessageDelegate //NOTE: if the JMSX Property is a non AMQP property then we must check _strictAMQP and throw as below. if (propertyName.equals(CustomJMSXProperty.JMSXUserID.toString())) { - return ((BasicContentHeaderProperties) _contentHeaderProperties).getUserIdAsString(); + return _contentHeaderProperties.getUserIdAsString(); } else { diff --git a/qpid/java/client/src/main/java/org/apache/qpid/client/message/AbstractJMSMessageFactory.java b/qpid/java/client/src/main/java/org/apache/qpid/client/message/AbstractJMSMessageFactory.java index 608567674a..e52ff9acb2 100644 --- a/qpid/java/client/src/main/java/org/apache/qpid/client/message/AbstractJMSMessageFactory.java +++ b/qpid/java/client/src/main/java/org/apache/qpid/client/message/AbstractJMSMessageFactory.java @@ -101,7 +101,7 @@ public abstract class AbstractJMSMessageFactory implements MessageFactory } AMQMessageDelegate delegate = new AMQMessageDelegate_0_8(messageNbr, - (BasicContentHeaderProperties) contentHeader.getProperties(), + contentHeader.getProperties(), exchange, routingKey, queueDestinationCache, topicDestinationCache); return createMessage(delegate, data); diff --git a/qpid/java/client/src/main/java/org/apache/qpid/client/message/MessageFactoryRegistry.java b/qpid/java/client/src/main/java/org/apache/qpid/client/message/MessageFactoryRegistry.java index 4154003b23..7e1ce20238 100644 --- a/qpid/java/client/src/main/java/org/apache/qpid/client/message/MessageFactoryRegistry.java +++ b/qpid/java/client/src/main/java/org/apache/qpid/client/message/MessageFactoryRegistry.java @@ -110,7 +110,7 @@ public class MessageFactoryRegistry AMQSession_0_8.DestinationCache<AMQTopic> topicDestinationCache) throws AMQException, JMSException { - BasicContentHeaderProperties properties = (BasicContentHeaderProperties) contentHeader.getProperties(); + BasicContentHeaderProperties properties = contentHeader.getProperties(); // Get the message content type. This may be null for pure AMQP messages, but will always be set for JMS over // AMQP. When the type is null, it can only be assumed that the message is a byte message. diff --git a/qpid/java/client/src/main/java/org/apache/qpid/client/transport/ClientConnectionDelegate.java b/qpid/java/client/src/main/java/org/apache/qpid/client/transport/ClientConnectionDelegate.java index e9b946d5b7..51354a5941 100644 --- a/qpid/java/client/src/main/java/org/apache/qpid/client/transport/ClientConnectionDelegate.java +++ b/qpid/java/client/src/main/java/org/apache/qpid/client/transport/ClientConnectionDelegate.java @@ -179,12 +179,9 @@ public class ClientConnectionDelegate extends ClientDelegate } @Override - public void connectionHeartbeat(Connection conn, ConnectionHeartbeat hearbeat) + public void connectionHeartbeat(Connection conn, ConnectionHeartbeat heartbeat) { - // ClientDelegate simply responds to heartbeats with heartbeats _heartbeatListener.heartbeatReceived(); - super.connectionHeartbeat(conn, hearbeat); - _heartbeatListener.heartbeatSent(); } @@ -192,4 +189,11 @@ public class ClientConnectionDelegate extends ClientDelegate { _heartbeatListener = listener == null ? HeartbeatListener.DEFAULT : listener; } + + @Override + public void writerIdle(final Connection connection) + { + super.writerIdle(connection); + _heartbeatListener.heartbeatSent(); + } } diff --git a/qpid/java/client/src/test/java/org/apache/qpid/client/protocol/AMQProtocolHandlerTest.java b/qpid/java/client/src/test/java/org/apache/qpid/client/protocol/AMQProtocolHandlerTest.java index 4c9448cb39..70fcfcedb8 100644 --- a/qpid/java/client/src/test/java/org/apache/qpid/client/protocol/AMQProtocolHandlerTest.java +++ b/qpid/java/client/src/test/java/org/apache/qpid/client/protocol/AMQProtocolHandlerTest.java @@ -179,7 +179,7 @@ public class AMQProtocolHandlerTest extends TestCase } catch (Exception e) { - e.printStackTrace(); + _logger.error(e.getMessage(), e); fail(e.getMessage()); } } diff --git a/qpid/java/client/src/test/java/org/apache/qpid/test/unit/message/MessageConverterTest.java b/qpid/java/client/src/test/java/org/apache/qpid/test/unit/message/MessageConverterTest.java index 04122a6d51..9bd7062c7b 100644 --- a/qpid/java/client/src/test/java/org/apache/qpid/test/unit/message/MessageConverterTest.java +++ b/qpid/java/client/src/test/java/org/apache/qpid/test/unit/message/MessageConverterTest.java @@ -22,6 +22,7 @@ package org.apache.qpid.test.unit.message; import junit.framework.TestCase; +import org.apache.log4j.Logger; import org.apache.qpid.client.AMQConnection; import org.apache.qpid.client.AMQQueue; import org.apache.qpid.client.AMQSession; @@ -42,7 +43,7 @@ import javax.jms.TextMessage; public class MessageConverterTest extends TestCase { - + private static final Logger _logger = Logger.getLogger(MessageConverterTest.class); public static final String JMS_CORR_ID = "QPIDID_01"; public static final int JMS_DELIV_MODE = 1; public static final String JMS_TYPE = "test.jms.type"; @@ -134,8 +135,8 @@ public class MessageConverterTest extends TestCase } catch (JMSException e) { + _logger.error("An error occured testing the property values", e); fail("An error occured testing the property values" + e.getCause()); - e.printStackTrace(); } } diff --git a/qpid/java/common/pom.xml b/qpid/java/common/pom.xml index 7aa4cd2a0c..d931c799a3 100644 --- a/qpid/java/common/pom.xml +++ b/qpid/java/common/pom.xml @@ -34,12 +34,12 @@ </properties> <dependencies> - <dependency> - <groupId>org.slf4j</groupId> - <artifactId>slf4j-api</artifactId> - <version>1.6.4</version> - <scope>compile</scope> - </dependency> + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-api</artifactId> + <version>${slf4j-version}</version> + <scope>compile</scope> + </dependency> <!-- test dependencies --> <dependency> @@ -49,12 +49,6 @@ <scope>test</scope> </dependency> - <dependency> - <groupId>log4j</groupId> - <artifactId>log4j</artifactId> - <version>1.2.16</version> - <scope>test</scope> - </dependency> </dependencies> <build> diff --git a/qpid/java/common/src/main/java/org/apache/qpid/framing/BasicContentHeaderProperties.java b/qpid/java/common/src/main/java/org/apache/qpid/framing/BasicContentHeaderProperties.java index 366c8231a1..60dac24cfc 100644 --- a/qpid/java/common/src/main/java/org/apache/qpid/framing/BasicContentHeaderProperties.java +++ b/qpid/java/common/src/main/java/org/apache/qpid/framing/BasicContentHeaderProperties.java @@ -27,7 +27,7 @@ import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; -public class BasicContentHeaderProperties implements CommonContentHeaderProperties +public class BasicContentHeaderProperties { //persistent & non-persistent constants, values as per JMS DeliveryMode public static final int NON_PERSISTENT = 1; diff --git a/qpid/java/common/src/main/java/org/apache/qpid/framing/CommonContentHeaderProperties.java b/qpid/java/common/src/main/java/org/apache/qpid/framing/CommonContentHeaderProperties.java deleted file mode 100644 index 7162c37062..0000000000 --- a/qpid/java/common/src/main/java/org/apache/qpid/framing/CommonContentHeaderProperties.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * - * 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.qpid.framing; - -public interface CommonContentHeaderProperties extends ContentHeaderProperties -{ - AMQShortString getContentType(); - - void setContentType(AMQShortString contentType); - - FieldTable getHeaders(); - - void setHeaders(FieldTable headers); - - byte getDeliveryMode(); - - void setDeliveryMode(byte deliveryMode); - - byte getPriority(); - - void setPriority(byte priority); - - AMQShortString getCorrelationId(); - - void setCorrelationId(AMQShortString correlationId); - - AMQShortString getReplyTo(); - - void setReplyTo(AMQShortString replyTo); - - long getExpiration(); - - void setExpiration(long expiration); - - AMQShortString getMessageId(); - - void setMessageId(AMQShortString messageId); - - long getTimestamp(); - - void setTimestamp(long timestamp); - - AMQShortString getType(); - - void setType(AMQShortString type); - - AMQShortString getUserId(); - - void setUserId(AMQShortString userId); - - AMQShortString getAppId(); - - void setAppId(AMQShortString appId); - - AMQShortString getClusterId(); - - void setClusterId(AMQShortString clusterId); - - AMQShortString getEncoding(); - - void setEncoding(AMQShortString encoding); -} diff --git a/qpid/java/common/src/main/java/org/apache/qpid/framing/ContentHeaderBody.java b/qpid/java/common/src/main/java/org/apache/qpid/framing/ContentHeaderBody.java index f6fa89a91c..131d796af4 100644 --- a/qpid/java/common/src/main/java/org/apache/qpid/framing/ContentHeaderBody.java +++ b/qpid/java/common/src/main/java/org/apache/qpid/framing/ContentHeaderBody.java @@ -39,7 +39,7 @@ public class ContentHeaderBody implements AMQBody private long bodySize; /** must never be null */ - private ContentHeaderProperties properties; + private BasicContentHeaderProperties properties; public ContentHeaderBody() { @@ -57,13 +57,13 @@ public class ContentHeaderBody implements AMQBody } - public ContentHeaderBody(ContentHeaderProperties props, int classId) + public ContentHeaderBody(BasicContentHeaderProperties props, int classId) { properties = props; this.classId = classId; } - public ContentHeaderBody(int classId, int weight, ContentHeaderProperties props, long bodySize) + public ContentHeaderBody(int classId, int weight, BasicContentHeaderProperties props, long bodySize) { this(props, classId); this.weight = weight; @@ -121,12 +121,12 @@ public class ContentHeaderBody implements AMQBody return new AMQFrame(channelId, body); } - public ContentHeaderProperties getProperties() + public BasicContentHeaderProperties getProperties() { return properties; } - public void setProperties(ContentHeaderProperties props) + public void setProperties(BasicContentHeaderProperties props) { properties = props; } diff --git a/qpid/java/common/src/main/java/org/apache/qpid/framing/ContentHeaderProperties.java b/qpid/java/common/src/main/java/org/apache/qpid/framing/ContentHeaderProperties.java deleted file mode 100644 index 2e1b988aa3..0000000000 --- a/qpid/java/common/src/main/java/org/apache/qpid/framing/ContentHeaderProperties.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * - * 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.qpid.framing; - -import java.io.DataInput; -import java.io.DataOutput; -import java.io.IOException; - - -/** - * There will be an implementation of this interface for each content type. All content types have associated - * header properties and this provides a way to encode and decode them. - */ -public interface ContentHeaderProperties -{ - /** - * Writes the property list to the buffer, in a suitably encoded form. - * @param buffer The buffer to write to - */ - void writePropertyListPayload(DataOutput buffer) throws IOException; - - /** - * Populates the properties from buffer. - * @param buffer The buffer to read from. - * @param propertyFlags he property flags. - * @throws AMQFrameDecodingException when the buffer does not contain valid data - */ - void populatePropertiesFromBuffer(DataInput buffer, int propertyFlags, int size) - throws AMQFrameDecodingException, IOException; - - /** - * @return the size of the encoded property list in bytes. - */ - int getPropertyListSize(); - - /** - * Gets the property flags. Property flags indicate which properties are set in the list. The - * position and meaning of each flag is defined in the protocol specification for the particular - * content type with which these properties are associated. - * @return flags - */ - int getPropertyFlags(); - -} diff --git a/qpid/java/common/src/main/java/org/apache/qpid/framing/ContentHeaderPropertiesFactory.java b/qpid/java/common/src/main/java/org/apache/qpid/framing/ContentHeaderPropertiesFactory.java index ff97c0b28f..55961db06b 100644 --- a/qpid/java/common/src/main/java/org/apache/qpid/framing/ContentHeaderPropertiesFactory.java +++ b/qpid/java/common/src/main/java/org/apache/qpid/framing/ContentHeaderPropertiesFactory.java @@ -38,11 +38,11 @@ public class ContentHeaderPropertiesFactory { } - public ContentHeaderProperties createContentHeaderProperties(int classId, int propertyFlags, + public BasicContentHeaderProperties createContentHeaderProperties(int classId, int propertyFlags, DataInput buffer, int size) throws AMQFrameDecodingException, IOException { - ContentHeaderProperties properties; + BasicContentHeaderProperties properties; // AMQP version change: "Hardwired" version to major=8, minor=0 // TODO: Change so that the actual version is obtained from // the ProtocolInitiation object for this session. diff --git a/qpid/java/common/src/main/java/org/apache/qpid/framing/abstraction/ContentChunk.java b/qpid/java/common/src/main/java/org/apache/qpid/framing/abstraction/ContentChunk.java deleted file mode 100644 index 470b7b05e3..0000000000 --- a/qpid/java/common/src/main/java/org/apache/qpid/framing/abstraction/ContentChunk.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * - * 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.qpid.framing.abstraction; - -public interface ContentChunk -{ - int getSize(); - byte[] getData(); - - void reduceToFit(); -} diff --git a/qpid/java/common/src/main/java/org/apache/qpid/framing/abstraction/MessagePublishInfoConverter.java b/qpid/java/common/src/main/java/org/apache/qpid/framing/abstraction/MessagePublishInfoConverter.java deleted file mode 100644 index 01d1a8a17b..0000000000 --- a/qpid/java/common/src/main/java/org/apache/qpid/framing/abstraction/MessagePublishInfoConverter.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * - * 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.qpid.framing.abstraction; - -import org.apache.qpid.framing.AMQMethodBody; - - -public interface MessagePublishInfoConverter -{ - public MessagePublishInfo convertToInfo(AMQMethodBody body); - public AMQMethodBody convertToBody(MessagePublishInfo info); - -} diff --git a/qpid/java/common/src/main/java/org/apache/qpid/framing/abstraction/ProtocolVersionMethodConverter.java b/qpid/java/common/src/main/java/org/apache/qpid/framing/abstraction/ProtocolVersionMethodConverter.java index d1e53d6907..b3897771c5 100644 --- a/qpid/java/common/src/main/java/org/apache/qpid/framing/abstraction/ProtocolVersionMethodConverter.java +++ b/qpid/java/common/src/main/java/org/apache/qpid/framing/abstraction/ProtocolVersionMethodConverter.java @@ -21,14 +21,10 @@ package org.apache.qpid.framing.abstraction; -import org.apache.qpid.framing.AMQBody; +import org.apache.qpid.framing.AMQMethodBody; -public interface ProtocolVersionMethodConverter extends MessagePublishInfoConverter +public interface ProtocolVersionMethodConverter { - AMQBody convertToBody(ContentChunk contentBody); - ContentChunk convertToContentChunk(AMQBody body); - - void configure(); - - AMQBody convertToBody(byte[] input); + public MessagePublishInfo convertToInfo(AMQMethodBody body); + public AMQMethodBody convertToBody(MessagePublishInfo info); } diff --git a/qpid/java/common/src/main/java/org/apache/qpid/framing/amqp_0_9/MethodConverter_0_9.java b/qpid/java/common/src/main/java/org/apache/qpid/framing/amqp_0_9/MethodConverter_0_9.java index b3eb1211a5..6456eacab1 100644 --- a/qpid/java/common/src/main/java/org/apache/qpid/framing/amqp_0_9/MethodConverter_0_9.java +++ b/qpid/java/common/src/main/java/org/apache/qpid/framing/amqp_0_9/MethodConverter_0_9.java @@ -21,13 +21,10 @@ package org.apache.qpid.framing.amqp_0_9; -import org.apache.qpid.framing.AMQBody; import org.apache.qpid.framing.AMQMethodBody; import org.apache.qpid.framing.AMQShortString; import org.apache.qpid.framing.BasicPublishBody; -import org.apache.qpid.framing.ContentBody; import org.apache.qpid.framing.abstraction.AbstractMethodConverter; -import org.apache.qpid.framing.abstraction.ContentChunk; import org.apache.qpid.framing.abstraction.MessagePublishInfo; import org.apache.qpid.framing.abstraction.MessagePublishInfoImpl; import org.apache.qpid.framing.abstraction.ProtocolVersionMethodConverter; @@ -35,48 +32,12 @@ import org.apache.qpid.framing.abstraction.ProtocolVersionMethodConverter; public class MethodConverter_0_9 extends AbstractMethodConverter implements ProtocolVersionMethodConverter { - private int _basicPublishClassId; - private int _basicPublishMethodId; public MethodConverter_0_9() { super((byte)0,(byte)9); - - - } - - public AMQBody convertToBody(ContentChunk contentChunk) - { - if(contentChunk instanceof ContentChunk_0_9) - { - return ((ContentChunk_0_9)contentChunk).toBody(); - } - else - { - return new ContentBody(contentChunk.getData()); - } - } - - public ContentChunk convertToContentChunk(AMQBody body) - { - final ContentBody contentBodyChunk = (ContentBody) body; - - return new ContentChunk_0_9(contentBodyChunk); - - } - - public void configure() - { - - _basicPublishClassId = org.apache.qpid.framing.amqp_0_9.BasicPublishBodyImpl.CLASS_ID; - _basicPublishMethodId = BasicPublishBodyImpl.METHOD_ID; - } - public AMQBody convertToBody(byte[] data) - { - return new ContentBody(data); - } public MessagePublishInfo convertToInfo(AMQMethodBody methodBody) { @@ -103,33 +64,4 @@ public class MethodConverter_0_9 extends AbstractMethodConverter implements Prot } - private static class ContentChunk_0_9 implements ContentChunk - { - private final ContentBody _contentBodyChunk; - - public ContentChunk_0_9(final ContentBody contentBodyChunk) - { - _contentBodyChunk = contentBodyChunk; - } - - public int getSize() - { - return _contentBodyChunk.getSize(); - } - - public byte[] getData() - { - return _contentBodyChunk.getPayload(); - } - - public void reduceToFit() - { - _contentBodyChunk.reduceBufferToFit(); - } - - public AMQBody toBody() - { - return _contentBodyChunk; - } - } } diff --git a/qpid/java/common/src/main/java/org/apache/qpid/framing/amqp_0_91/MethodConverter_0_91.java b/qpid/java/common/src/main/java/org/apache/qpid/framing/amqp_0_91/MethodConverter_0_91.java index d33749d795..e25dc8a022 100644 --- a/qpid/java/common/src/main/java/org/apache/qpid/framing/amqp_0_91/MethodConverter_0_91.java +++ b/qpid/java/common/src/main/java/org/apache/qpid/framing/amqp_0_91/MethodConverter_0_91.java @@ -21,61 +21,22 @@ package org.apache.qpid.framing.amqp_0_91; -import org.apache.qpid.framing.AMQBody; import org.apache.qpid.framing.AMQMethodBody; import org.apache.qpid.framing.AMQShortString; import org.apache.qpid.framing.BasicPublishBody; -import org.apache.qpid.framing.ContentBody; import org.apache.qpid.framing.abstraction.AbstractMethodConverter; -import org.apache.qpid.framing.abstraction.ContentChunk; import org.apache.qpid.framing.abstraction.MessagePublishInfo; import org.apache.qpid.framing.abstraction.MessagePublishInfoImpl; import org.apache.qpid.framing.abstraction.ProtocolVersionMethodConverter; public class MethodConverter_0_91 extends AbstractMethodConverter implements ProtocolVersionMethodConverter { - private int _basicPublishClassId; - private int _basicPublishMethodId; public MethodConverter_0_91() { super((byte)0,(byte)9); - - - } - - public AMQBody convertToBody(ContentChunk contentChunk) - { - if(contentChunk instanceof ContentChunk_0_9) - { - return ((ContentChunk_0_9)contentChunk).toBody(); - } - else - { - return new ContentBody(contentChunk.getData()); - } - } - - public ContentChunk convertToContentChunk(AMQBody body) - { - final ContentBody contentBodyChunk = (ContentBody) body; - - return new ContentChunk_0_9(contentBodyChunk); - - } - - public void configure() - { - - _basicPublishClassId = BasicPublishBodyImpl.CLASS_ID; - _basicPublishMethodId = BasicPublishBodyImpl.METHOD_ID; - } - public AMQBody convertToBody(byte[] data) - { - return new ContentBody(data); - } public MessagePublishInfo convertToInfo(AMQMethodBody methodBody) { @@ -102,33 +63,4 @@ public class MethodConverter_0_91 extends AbstractMethodConverter implements Pro } - private static class ContentChunk_0_9 implements ContentChunk - { - private final ContentBody _contentBodyChunk; - - public ContentChunk_0_9(final ContentBody contentBodyChunk) - { - _contentBodyChunk = contentBodyChunk; - } - - public int getSize() - { - return _contentBodyChunk.getSize(); - } - - public byte[] getData() - { - return _contentBodyChunk.getPayload(); - } - - public void reduceToFit() - { - _contentBodyChunk.reduceBufferToFit(); - } - - public AMQBody toBody() - { - return _contentBodyChunk; - } - } }
\ No newline at end of file diff --git a/qpid/java/common/src/main/java/org/apache/qpid/framing/amqp_8_0/MethodConverter_8_0.java b/qpid/java/common/src/main/java/org/apache/qpid/framing/amqp_8_0/MethodConverter_8_0.java index 575816db4f..5e50c2b3fb 100644 --- a/qpid/java/common/src/main/java/org/apache/qpid/framing/amqp_8_0/MethodConverter_8_0.java +++ b/qpid/java/common/src/main/java/org/apache/qpid/framing/amqp_8_0/MethodConverter_8_0.java @@ -21,71 +21,21 @@ package org.apache.qpid.framing.amqp_8_0; -import org.apache.qpid.framing.AMQBody; import org.apache.qpid.framing.AMQMethodBody; import org.apache.qpid.framing.AMQShortString; import org.apache.qpid.framing.BasicPublishBody; -import org.apache.qpid.framing.ContentBody; import org.apache.qpid.framing.abstraction.AbstractMethodConverter; -import org.apache.qpid.framing.abstraction.ContentChunk; import org.apache.qpid.framing.abstraction.MessagePublishInfo; import org.apache.qpid.framing.abstraction.MessagePublishInfoImpl; import org.apache.qpid.framing.abstraction.ProtocolVersionMethodConverter; public class MethodConverter_8_0 extends AbstractMethodConverter implements ProtocolVersionMethodConverter { - private int _basicPublishClassId; - private int _basicPublishMethodId; - public MethodConverter_8_0() { super((byte)8,(byte)0); - - - } - - public AMQBody convertToBody(ContentChunk contentChunk) - { - return new ContentBody(contentChunk.getData()); } - public ContentChunk convertToContentChunk(AMQBody body) - { - final ContentBody contentBodyChunk = (ContentBody) body; - - return new ContentChunk() - { - - public int getSize() - { - return contentBodyChunk.getSize(); - } - - public byte[] getData() - { - return contentBodyChunk.getPayload(); - } - - public void reduceToFit() - { - contentBodyChunk.reduceBufferToFit(); - } - }; - - } - - public void configure() - { - - _basicPublishClassId = BasicPublishBodyImpl.CLASS_ID; - _basicPublishMethodId = BasicPublishBodyImpl.METHOD_ID; - - } - - public AMQBody convertToBody(byte[] data) - { - return new ContentBody(data); - } public MessagePublishInfo convertToInfo(AMQMethodBody methodBody) { diff --git a/qpid/java/common/src/main/java/org/apache/qpid/properties/ConnectionStartProperties.java b/qpid/java/common/src/main/java/org/apache/qpid/properties/ConnectionStartProperties.java index 6f9d872f98..b2bcc1836e 100644 --- a/qpid/java/common/src/main/java/org/apache/qpid/properties/ConnectionStartProperties.java +++ b/qpid/java/common/src/main/java/org/apache/qpid/properties/ConnectionStartProperties.java @@ -24,6 +24,7 @@ import java.lang.management.ManagementFactory; import java.lang.management.RuntimeMXBean; import org.apache.qpid.transport.util.Logger; +import org.apache.qpid.util.SystemUtils; /** * Constants for the various properties clients can @@ -88,11 +89,11 @@ public class ConnectionStartProperties fullSystemInfo.append(", "); fullSystemInfo.append(System.getProperty("java.vendor")); fullSystemInfo.append(", "); - fullSystemInfo.append(System.getProperty("os.arch")); + fullSystemInfo.append(SystemUtils.getOSArch()); fullSystemInfo.append(", "); - fullSystemInfo.append(System.getProperty("os.name")); + fullSystemInfo.append(SystemUtils.getOSName()); fullSystemInfo.append(", "); - fullSystemInfo.append(System.getProperty("os.version")); + fullSystemInfo.append(SystemUtils.getOSVersion()); fullSystemInfo.append(", "); fullSystemInfo.append(System.getProperty("sun.os.patch.level")); diff --git a/qpid/java/common/src/main/java/org/apache/qpid/transport/ClientDelegate.java b/qpid/java/common/src/main/java/org/apache/qpid/transport/ClientDelegate.java index 75eb0e19a7..d48cd1754c 100644 --- a/qpid/java/common/src/main/java/org/apache/qpid/transport/ClientDelegate.java +++ b/qpid/java/common/src/main/java/org/apache/qpid/transport/ClientDelegate.java @@ -143,6 +143,8 @@ public class ClientDelegate extends ConnectionDelegate actualHeartbeatInterval); int idleTimeout = (int)(actualHeartbeatInterval * 1000 * heartbeatTimeoutFactor); + conn.getNetworkConnection().setMaxReadIdle((int)(actualHeartbeatInterval*heartbeatTimeoutFactor)); + conn.getNetworkConnection().setMaxWriteIdle(actualHeartbeatInterval); conn.setIdleTimeout(idleTimeout); int channelMax = tune.getChannelMax(); diff --git a/qpid/java/common/src/main/java/org/apache/qpid/transport/Connection.java b/qpid/java/common/src/main/java/org/apache/qpid/transport/Connection.java index cdca726148..3547205df1 100644 --- a/qpid/java/common/src/main/java/org/apache/qpid/transport/Connection.java +++ b/qpid/java/common/src/main/java/org/apache/qpid/transport/Connection.java @@ -70,6 +70,7 @@ public class Connection extends ConnectionInvoker public static final int MIN_USABLE_CHANNEL_NUM = 0; private long _lastSendTime; private long _lastReadTime; + private NetworkConnection _networkConnection; public enum State { NEW, CLOSED, OPENING, OPEN, CLOSING, CLOSE_RCVD, RESUMING } @@ -229,12 +230,13 @@ public class Connection extends ConnectionInvoker addConnectionListener((ConnectionListener)secureReceiver); } - NetworkConnection network = transport.connect(settings, secureReceiver, new ConnectionActivity()); + _networkConnection = transport.connect(settings, secureReceiver, new ConnectionActivity()); - setRemoteAddress(network.getRemoteAddress()); - setLocalAddress(network.getLocalAddress()); - final Sender<ByteBuffer> secureSender = securityLayer.sender(network.getSender()); + setRemoteAddress(_networkConnection.getRemoteAddress()); + setLocalAddress(_networkConnection.getLocalAddress()); + + final Sender<ByteBuffer> secureSender = securityLayer.sender(_networkConnection.getSender()); if(secureSender instanceof ConnectionListener) { addConnectionListener((ConnectionListener)secureSender); @@ -785,14 +787,26 @@ public class Connection extends ConnectionInvoker @Override public void writerIdle() { + getConnectionDelegate().writerIdle(Connection.this); connectionHeartbeat(); } @Override public void readerIdle() { - // TODO - + log.error("Closing connection as no heartbeat or other activity detected within specified interval"); + _networkConnection.close(); } } + + + public void setNetworkConnection(NetworkConnection network) + { + _networkConnection = network; + } + + public NetworkConnection getNetworkConnection() + { + return _networkConnection; + } } diff --git a/qpid/java/common/src/main/java/org/apache/qpid/transport/ConnectionDelegate.java b/qpid/java/common/src/main/java/org/apache/qpid/transport/ConnectionDelegate.java index fdd35d49ef..b3379890f3 100644 --- a/qpid/java/common/src/main/java/org/apache/qpid/transport/ConnectionDelegate.java +++ b/qpid/java/common/src/main/java/org/apache/qpid/transport/ConnectionDelegate.java @@ -105,4 +105,9 @@ public abstract class ConnectionDelegate ssn.closed(); } } + + public void writerIdle(final Connection connection) + { + connection.doHeartBeat(); + } } diff --git a/qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/IoReceiver.java b/qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/IoReceiver.java index 06a43e21c6..0ab195ced8 100644 --- a/qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/IoReceiver.java +++ b/qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/IoReceiver.java @@ -26,6 +26,7 @@ import org.apache.qpid.transport.Receiver; import org.apache.qpid.transport.TransportException; import org.apache.qpid.transport.network.Ticker; import org.apache.qpid.transport.util.Logger; +import org.apache.qpid.util.SystemUtils; import javax.net.ssl.SSLSocket; import java.io.IOException; @@ -57,8 +58,7 @@ final class IoReceiver implements Runnable, Closeable private Ticker _ticker; static { - String osName = System.getProperty("os.name"); - shutdownBroken = osName == null ? false : osName.matches("(?i).*windows.*"); + shutdownBroken = SystemUtils.isWindows(); } public IoReceiver(Socket socket, Receiver<ByteBuffer> receiver, int bufferSize, long timeout) diff --git a/qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/IoSender.java b/qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/IoSender.java index 17400cca8b..56a4b28978 100644 --- a/qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/IoSender.java +++ b/qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/IoSender.java @@ -143,7 +143,7 @@ public final class IoSender implements Runnable, Sender<ByteBuffer> { // pass } - elapsed += System.currentTimeMillis() - start; + elapsed = System.currentTimeMillis() - start; } checkNotAlreadyClosed(); diff --git a/qpid/java/common/src/main/java/org/apache/qpid/url/BindingURLParser.java b/qpid/java/common/src/main/java/org/apache/qpid/url/BindingURLParser.java index ee823978b4..8e93a907d6 100644 --- a/qpid/java/common/src/main/java/org/apache/qpid/url/BindingURLParser.java +++ b/qpid/java/common/src/main/java/org/apache/qpid/url/BindingURLParser.java @@ -443,17 +443,17 @@ public class BindingURLParser for (String url: urls) { - System.out.println("URL " + url); + _logger.info("URL " + url); AMQBindingURL bindingURL = new AMQBindingURL(url); parser.parse(url,bindingURL); - System.out.println("\nX " + bindingURL.toString() + " \n"); + _logger.info("\nX " + bindingURL.toString() + " \n"); } } catch(Exception e) { - e.printStackTrace(); + _logger.error("Error with binding urls", e); } } diff --git a/qpid/java/common/src/main/java/org/apache/qpid/util/FileUtils.java b/qpid/java/common/src/main/java/org/apache/qpid/util/FileUtils.java index 7362099070..f48103c650 100644 --- a/qpid/java/common/src/main/java/org/apache/qpid/util/FileUtils.java +++ b/qpid/java/common/src/main/java/org/apache/qpid/util/FileUtils.java @@ -129,7 +129,6 @@ public class FileUtils StringBuffer inBuffer = new StringBuffer(); - String line; int read; while ((read = is.read(data)) != -1) @@ -157,6 +156,7 @@ public class FileUtils * * @return An input stream for the file or resource, or null if one could not be opened. */ + @SuppressWarnings("resource") public static InputStream openFileOrDefaultResource(String filename, String defaultResource, ClassLoader cl) { InputStream is = null; @@ -173,7 +173,6 @@ public class FileUtils { is = null; } - if (is == null) { // failed on filesystem, so try on classpath @@ -332,6 +331,8 @@ public class FileUtils public static class UnableToCopyException extends Exception { + private static final long serialVersionUID = 956249157141857044L; + UnableToCopyException(String msg) { super(msg); diff --git a/qpid/java/common/src/main/java/org/apache/qpid/util/SystemUtils.java b/qpid/java/common/src/main/java/org/apache/qpid/util/SystemUtils.java new file mode 100644 index 0000000000..55c7ae9b96 --- /dev/null +++ b/qpid/java/common/src/main/java/org/apache/qpid/util/SystemUtils.java @@ -0,0 +1,81 @@ +/* + * + * 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.qpid.util; + +/** + * SystemUtils provides some simple helper methods for working with the current + * Operating System. + * + * It follows the convention of wrapping all checked exceptions as runtimes, so + * code using these methods is free of try-catch blocks but does not expect to + * recover from errors. + */ +public class SystemUtils +{ + + public static final String UNKNOWN_OS = "unknown"; + public static final String UNKNOWN_VERSION = "na"; + public static final String UNKNOWN_ARCH = "unknown"; + + private static final String _osName = System.getProperty("os.name", UNKNOWN_OS); + private static final String _osVersion = System.getProperty("os.version", UNKNOWN_VERSION); + private static final String _osArch = System.getProperty("os.arch", UNKNOWN_ARCH); + + private static final boolean _isWindows = _osName.toLowerCase().contains("windows"); + + private SystemUtils() + { + } + + public final static String getOSName() + { + return _osName; + } + + public final static String getOSVersion() + { + return _osVersion; + } + + public final static String getOSArch() + { + return _osArch; + } + + public final static boolean isWindows() + { + return _isWindows; + } + + public final static String getOSConfigSuffix() + { + if (_osName.contains(" ")) + { + return _osName.substring(0, _osName.indexOf(' ')).toLowerCase(); + } + return _osName; + } + + public final static String getOSString() + { + return _osName + " " + _osVersion + " " + _osArch; + } +} diff --git a/qpid/java/common/src/test/java/org/apache/qpid/transport/ConnectionTest.java b/qpid/java/common/src/test/java/org/apache/qpid/transport/ConnectionTest.java index 12bbd20228..46d1887496 100644 --- a/qpid/java/common/src/test/java/org/apache/qpid/transport/ConnectionTest.java +++ b/qpid/java/common/src/test/java/org/apache/qpid/transport/ConnectionTest.java @@ -20,6 +20,7 @@ */ package org.apache.qpid.transport; +import org.apache.log4j.Logger; import org.apache.qpid.test.utils.QpidTestCase; import org.apache.qpid.transport.network.ConnectionBinding; import org.apache.qpid.transport.network.io.IoAcceptor; @@ -41,6 +42,7 @@ import java.util.concurrent.TimeUnit; */ public class ConnectionTest extends QpidTestCase implements SessionListener { + private static final Logger _logger = Logger.getLogger(ConnectionTest.class); private int port; private volatile boolean queue = false; private List<MessageTransfer> messages = new ArrayList<MessageTransfer>(); @@ -155,7 +157,6 @@ public class ConnectionTest extends QpidTestCase implements SessionListener { final Connection conn = new Connection(); conn.setConnectionDelegate(new ClientDelegate(new ConnectionSettings())); - conn.addConnectionListener(new ConnectionListener() { public void opened(Connection conn) {} @@ -240,7 +241,6 @@ public class ConnectionTest extends QpidTestCase implements SessionListener } catch (IOException e) { - e.printStackTrace(); fail("Unable to start Server for test due to:" + e.getMessage()); } @@ -349,7 +349,10 @@ public class ConnectionTest extends QpidTestCase implements SessionListener Thread.sleep(6000); send(ssn, "SINK 3"); ssn.sync(); - System.out.println(messages); + if (_logger.isDebugEnabled()) + { + _logger.debug(messages); + } assertEquals(1, messages.size()); assertEquals("SINK 3", messages.get(0).getBodyString()); } diff --git a/qpid/java/common/src/test/java/org/apache/qpid/transport/network/io/IoAcceptor.java b/qpid/java/common/src/test/java/org/apache/qpid/transport/network/io/IoAcceptor.java index 641bc5fa34..bb864cd434 100644 --- a/qpid/java/common/src/test/java/org/apache/qpid/transport/network/io/IoAcceptor.java +++ b/qpid/java/common/src/test/java/org/apache/qpid/transport/network/io/IoAcceptor.java @@ -20,6 +20,7 @@ */ package org.apache.qpid.transport.network.io; +import org.apache.log4j.Logger; import org.apache.qpid.transport.Binding; import org.apache.qpid.transport.TransportException; @@ -38,7 +39,9 @@ import java.nio.ByteBuffer; public class IoAcceptor<E> extends Thread { + private static final Logger _logger = Logger.getLogger(IoAcceptor.class); + private volatile boolean _closed = false; private ServerSocket socket; private Binding<E,ByteBuffer> binding; @@ -59,6 +62,8 @@ public class IoAcceptor<E> extends Thread */ public void close() throws IOException { + _closed = true; + if (!socket.isClosed()) { socket.close(); @@ -73,7 +78,7 @@ public class IoAcceptor<E> extends Thread public void run() { - while (true) + while (!_closed) { try { @@ -82,9 +87,36 @@ public class IoAcceptor<E> extends Thread } catch (IOException e) { - throw new TransportException(e); + if (!_closed) + { + _logger.error("Error in IoAcceptor thread", e); + closeSocketIfNecessary(socket); + try + { + Thread.sleep(1000); + } + catch (InterruptedException ie) + { + _logger.debug("Stopping io acceptor due to interrupt request"); + _closed = true; + } + } } } } + private void closeSocketIfNecessary(final ServerSocket socket) + { + if(socket != null) + { + try + { + socket.close(); + } + catch (IOException e) + { + _logger.debug("Exception while closing socket", e); + } + } + } } diff --git a/qpid/java/ivy.nexus.xml b/qpid/java/ivy.nexus.xml index ee0ec27d48..e301bcb0cf 100644 --- a/qpid/java/ivy.nexus.xml +++ b/qpid/java/ivy.nexus.xml @@ -117,6 +117,12 @@ <artifact name="qpid-broker-plugins-jdbc-provider-bone" type="jar.asc" ext="jar.asc"/> <artifact name="qpid-broker-plugins-jdbc-provider-bone" type="source" ext="jar" e:classifier="sources"/> <artifact name="qpid-broker-plugins-jdbc-provider-bone" type="source.asc" ext="jar.asc" e:classifier="sources"/> + <artifact name="qpid-broker-plugins-websocket" type="pom" ext="pom"/> + <artifact name="qpid-broker-plugins-websocket" type="pom.asc" ext="pom.asc"/> + <artifact name="qpid-broker-plugins-websocket" type="jar" ext="jar"/> + <artifact name="qpid-broker-plugins-websocket" type="jar.asc" ext="jar.asc"/> + <artifact name="qpid-broker-plugins-websocket" type="source" ext="jar" e:classifier="sources"/> + <artifact name="qpid-broker-plugins-websocket" type="source.asc" ext="jar.asc" e:classifier="sources"/> <artifact name="qpid-amqp-1-0-common" type="pom" ext="pom"/> <artifact name="qpid-amqp-1-0-common" type="pom.asc" ext="pom.asc"/> <artifact name="qpid-amqp-1-0-common" type="jar" ext="jar"/> diff --git a/qpid/java/jca/example/src/main/java/org/apache/qpid/jca/example/client/QpidTestClient.java b/qpid/java/jca/example/src/main/java/org/apache/qpid/jca/example/client/QpidTestClient.java index a5a33e36ec..f21b8ea07d 100644 --- a/qpid/java/jca/example/src/main/java/org/apache/qpid/jca/example/client/QpidTestClient.java +++ b/qpid/java/jca/example/src/main/java/org/apache/qpid/jca/example/client/QpidTestClient.java @@ -120,8 +120,7 @@ public class QpidTestClient } catch(Exception e) { - e.printStackTrace(); - _log.error(e.getMessage()); + _log.error(e.getMessage(),e); } finally { diff --git a/qpid/java/jca/pom.xml b/qpid/java/jca/pom.xml index 467175db90..859b8aabac 100644 --- a/qpid/java/jca/pom.xml +++ b/qpid/java/jca/pom.xml @@ -34,6 +34,13 @@ </dependency> <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-api</artifactId> + <version>${slf4j-version}</version> + <scope>compile</scope> + </dependency> + + <dependency> <groupId>org.apache.geronimo.specs</groupId> <artifactId>geronimo-j2ee-connector_1.5_spec</artifactId> <version>2.0.0</version> @@ -104,6 +111,14 @@ </exclusion> </exclusions> </dependency> + + <!-- test dependencies --> + <dependency> + <groupId>org.apache.qpid</groupId> + <artifactId>qpid-test-utils</artifactId> + <version>0.26-SNAPSHOT</version> + <scope>test</scope> + </dependency> </dependencies> <build> diff --git a/qpid/java/jca/rar/pom.xml b/qpid/java/jca/rar/pom.xml index 192f34255d..fca35dba14 100644 --- a/qpid/java/jca/rar/pom.xml +++ b/qpid/java/jca/rar/pom.xml @@ -24,7 +24,7 @@ </parent> <modelVersion>4.0.0</modelVersion> - <artifactId>qpid-rar</artifactId> + <artifactId>qpid-ra</artifactId> <packaging>rar</packaging> <dependencies> diff --git a/qpid/java/perftests/pom.xml b/qpid/java/perftests/pom.xml index 25d0cce626..2a1dbd4350 100644 --- a/qpid/java/perftests/pom.xml +++ b/qpid/java/perftests/pom.xml @@ -26,10 +26,10 @@ <artifactId>qpid-perftests</artifactId> <properties> - <broker.home.dir>target/qpid-broker/${project.version}</broker.home.dir> + <broker.home.dir>target${file.separator}qpid-broker${file.separator}${project.version}</broker.home.dir> <!-- test properties --> - <qpid.home>${basedir}/${broker.home.dir}</qpid.home> - <qpid.home.qbtc.output>${qpid.home}/qbtc-output</qpid.home.qbtc.output> + <qpid.home>${basedir}${file.separator}${broker.home.dir}</qpid.home> + <qpid.home.qbtc.output>${qpid.home}${file.separator}qbtc-output</qpid.home.qbtc.output> </properties> <dependencies> @@ -42,34 +42,26 @@ </dependency> <dependency> - <groupId>org.apache.geronimo.specs</groupId> - <artifactId>geronimo-jms_1.1_spec</artifactId> - <version>1.0</version> - <scope>provided</scope> + <groupId>log4j</groupId> + <artifactId>log4j</artifactId> + <version>${log4j-version}</version> + <scope>compile</scope> </dependency> - <!-- logging deps --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> - <version>1.6.4</version> + <version>${slf4j-version}</version> <scope>compile</scope> </dependency> <dependency> - <groupId>org.slf4j</groupId> - <artifactId>slf4j-log4j12</artifactId> - <version>1.6.4</version> - <scope>compile</scope> + <groupId>org.apache.geronimo.specs</groupId> + <artifactId>geronimo-jms_1.1_spec</artifactId> + <version>1.0</version> + <scope>provided</scope> </dependency> - <dependency> - <groupId>log4j</groupId> - <artifactId>log4j</artifactId> - <version>1.2.16</version> - <scope>compile</scope> - </dependency> - <!-- other deps --> <dependency> <groupId>commons-lang</groupId> @@ -262,6 +254,9 @@ <excludes> <exclude>**/org/apache/qpid/systest/**/*.java</exclude> </excludes> + <systemPropertyVariables> + <log4j.configuration.file>${project.basedir}${file.separator}..${file.separator}test-profiles${file.separator}log4j-test.xml</log4j.configuration.file> + </systemPropertyVariables> </configuration> <executions> <execution> diff --git a/qpid/java/perftests/visualisation-jfc/pom.xml b/qpid/java/perftests/visualisation-jfc/pom.xml index da84df1d2e..d677491a03 100644 --- a/qpid/java/perftests/visualisation-jfc/pom.xml +++ b/qpid/java/perftests/visualisation-jfc/pom.xml @@ -37,7 +37,7 @@ <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> - <version>1.6.4</version> + <version>${slf4j-version}</version> <scope>compile</scope> </dependency> diff --git a/qpid/java/perftests/visualisation-jfc/src/test/java/org/apache/qpid/disttest/charting/chartbuilder/ChartProductionTest.java b/qpid/java/perftests/visualisation-jfc/src/test/java/org/apache/qpid/disttest/charting/chartbuilder/ChartProductionTest.java index 7af3a6b35e..024af6dd57 100644 --- a/qpid/java/perftests/visualisation-jfc/src/test/java/org/apache/qpid/disttest/charting/chartbuilder/ChartProductionTest.java +++ b/qpid/java/perftests/visualisation-jfc/src/test/java/org/apache/qpid/disttest/charting/chartbuilder/ChartProductionTest.java @@ -28,6 +28,7 @@ import java.util.Date; import java.util.Iterator; import java.util.List; +import org.apache.log4j.Logger; import org.apache.qpid.disttest.charting.ChartType; import org.apache.qpid.disttest.charting.definition.ChartingDefinition; import org.apache.qpid.disttest.charting.definition.SeriesDefinition; @@ -49,6 +50,7 @@ import org.jfree.data.general.Dataset; */ public class ChartProductionTest extends QpidTestCase { + private static final Logger _logger = Logger.getLogger(ChartProductionTest.class); private static final String TEST_CHARTTITLE = "TEST_CHARTTITLE"; private static final String TEST_CHARTSUBTITLE = "TEST_CHARTSUBTITLE"; private static final String TEST_XAXIS = "TEST_XAXIS"; @@ -95,7 +97,7 @@ public class ChartProductionTest extends QpidTestCase } else { - System.out.println("Charting directory for manual observation " + chartDir); + _logger.info("Charting directory for manual observation " + chartDir); } _writer.setOutputDirectory(chartDir); diff --git a/qpid/java/pom.xml b/qpid/java/pom.xml index 1b313b3514..c8875fb39b 100644 --- a/qpid/java/pom.xml +++ b/qpid/java/pom.xml @@ -29,12 +29,10 @@ <packaging>pom</packaging> <!-- ###### TODO ###### - - Fix the jca/rar pom module name, it should be qpid-ra not qpid-rar. - Add the Excludes files, log4j config, etc test resources to a module (qpid-test-utils?) which can be used (extracted?) by the others to prevent them having to reference outside their directly for the files. - - Fix what the systests/perftests do to copy the test-profiles dir to the necessary location. - - Fix the log4j configuration property to work with all the modules, resolve the currently generated log4j exceptions during test runs. - - Add project details such as Website, Mailing List, SCM. + - Fix what the systests/perftests do to copy the test-profiles dir to the necessary location. + - Fix the log4j configuration property to work with all the modules. - Fix the version numbers in all the modules. - Decide on a final name for this parent module, qpid-project isnt necessarily appropriate given it doesnt encompass the whole project. - Test deploying the modules to a local Nexus instance (by overriding the repo properties locally). @@ -59,6 +57,9 @@ - Remove the QBTC output file mechanics, rely on Surefire to do it? - JUnit test profiles instead of Exludes files? --> + <prerequisites> + <maven>3.0.0</maven> + </prerequisites> <properties> <!-- dependency version numbers --> @@ -67,6 +68,8 @@ <!-- test dependency version numbers --> <junit-version>3.8.1</junit-version> <mockito-version>1.9.0</mockito-version> + <log4j-version>1.2.16</log4j-version> + <slf4j-version>1.6.4</slf4j-version> <!-- plugin version numbers --> <maven-antrun-plugin-version>1.7</maven-antrun-plugin-version> @@ -102,13 +105,12 @@ <java.target>1.6</java.target> <!-- enforcer plugin config properties --> - <supported-maven-version-range>[3.0.0,)</supported-maven-version-range> <supported-test-profiles-regex>(java-mms.0-9-1|java-mms.0-10)</supported-test-profiles-regex> <!-- test properties --> <qpid.home>${basedir}</qpid.home> <!-- override for broker tests --> - <qpid.home.qbtc.output>${qpid.home}/target/qbtc-output</qpid.home.qbtc.output> <!-- override for broker tests --> - <qpid.work>${project.build.directory}/QPID_WORK</qpid.work> + <qpid.home.qbtc.output>${qpid.home}${file.separator}target${file.separator}qbtc-output</qpid.home.qbtc.output> <!-- override for broker tests --> + <qpid.work>${project.build.directory}${file.separator}QPID_WORK</qpid.work> <profile.excludes.java-mms.0-10>JavaTransientExcludes Java010Excludes</profile.excludes.java-mms.0-10> <broker.version.java-mms.0-10>v0_10</broker.version.java-mms.0-10> @@ -132,6 +134,27 @@ <version>${mockito-version}</version> <scope>test</scope> </dependency> + + <dependency> + <groupId>log4j</groupId> + <artifactId>log4j</artifactId> + <version>${log4j-version}</version> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-api</artifactId> + <version>${slf4j-version}</version> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-log4j12</artifactId> + <version>${slf4j-version}</version> + <scope>test</scope> + </dependency> </dependencies> <modules> @@ -409,7 +432,7 @@ <java.naming.factory.initial>org.apache.qpid.jndi.PropertiesFileInitialContextFactory</java.naming.factory.initial> <java.naming.provider.url>test-profiles${file.separator}test-provider.properties</java.naming.provider.url> - <broker.config>${qpid.home}/etc/config-systests.json</broker.config> + <broker.config>${qpid.home}${file.separator}etc${file.separator}config-systests.json</broker.config> <messagestore.class.name>org.apache.qpid.server.store.MemoryMessageStore</messagestore.class.name> <broker.protocol.excludes></broker.protocol.excludes> <broker.persistent>false</broker.persistent> @@ -422,8 +445,8 @@ <amqj.protocol.logging.level>debug</amqj.protocol.logging.level> <root.logging.level>warn</root.logging.level> - <log4j.configuration.file>test-profiles${file.separator}log4j-test.xml</log4j.configuration.file> - <log4j.configuration>file://${basedir}${file.separator}..${file.separator}test-profiles${file.separator}log4j-test.xml</log4j.configuration> + <log4j.configuration.file>${project.basedir}${file.separator}test-profiles${file.separator}log4j-test.xml</log4j.configuration.file> + <log4j.configuration>log4j-test.xml</log4j.configuration> <log4j.debug>false</log4j.debug> @@ -450,13 +473,13 @@ <broker.version>${broker.version.java-mms.0-10}</broker.version> <qpid.broker_default_amqp_protocol_excludes>${qpid.broker_default_amqp_protocol_excludes.java-mms.0-10}</qpid.broker_default_amqp_protocol_excludes> <broker.stopped>Exception</broker.stopped> - <broker.command>${qpid.home}/bin/qpid-server -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE</broker.command> + <broker.command>${qpid.home}${file.separator}bin${file.separator}qpid-server -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE</broker.command> + <broker.command.windows>${qpid.home}${file.separator}bin${file.separator}qpid-server.bat -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE</broker.command.windows> <broker.ready>BRK-1004</broker.ready> <profile>${profile}</profile> - <!-- This must be a child of qpid home currently - due to the horrible mechanics of QBTC --> + <!-- This must be a child of qpid home currently due to the horrible mechanics of QBTC --> <test.output>${qpid.home.qbtc.output}</test.output> </systemPropertyVariables> </configuration> @@ -474,9 +497,6 @@ </goals> <configuration> <rules> - <requireMavenVersion> - <version>${supported-maven-version-range}</version> - </requireMavenVersion> <requireProperty> <property>profile</property> <message>You must set a test profile!</message> @@ -497,6 +517,41 @@ </plugins> </build> + <description> + Apache Qpidâ„¢ makes messaging tools that speak AMQP and support many languages and platforms. + AMQP is an open internet protocol for reliably sending and receiving messages. It makes it possible for everyone to build a diverse, coherent messaging ecosystem. + </description> + + <url>http://qpid.apache.org</url> + + <issueManagement> + <system>JIRA</system> + <url>https://issues.apache.org/jira/browse/QPID</url> + </issueManagement> + + <mailingLists> + <mailingList> + <name>Apache Qpid Users</name> + <subscribe>users-subscribe@qpid.apache.org</subscribe> + <unsubscribe>users-unsubscribe@qpid.apache.org</unsubscribe> + <post>users@qpid.apache.org</post> + <archive>http://mail-archives.apache.org/mod_mbox/qpid-users/</archive> + </mailingList> + <mailingList> + <name>Apache Qpid Developers</name> + <subscribe>dev-subscribe@qpid.apache.org</subscribe> + <unsubscribe>dev-unsubscribe@qpid.apache.org</unsubscribe> + <post>dev@qpid.apache.org</post> + <archive>http://mail-archives.apache.org/mod_mbox/qpid-dev/</archive> + </mailingList> + </mailingLists> + + <scm> + <connection>scm:svn:http://svn.apache.org/repos/asf/qpid/trunk/qpid</connection> + <developerConnection>scm:svn:https://svn.apache.org/repos/asf/qpid/trunk/qpid</developerConnection> + <url>http://svn.apache.org/viewvc/qpid/</url> + </scm> + <reporting> <plugins> <plugin> diff --git a/qpid/java/qpid-test-utils/pom.xml b/qpid/java/qpid-test-utils/pom.xml index 4e90eb334c..17422d5378 100644 --- a/qpid/java/qpid-test-utils/pom.xml +++ b/qpid/java/qpid-test-utils/pom.xml @@ -33,12 +33,12 @@ <scope>compile</scope> </dependency> - <dependency> - <groupId>log4j</groupId> - <artifactId>log4j</artifactId> - <version>1.2.16</version> - <scope>provided</scope> - </dependency> + <dependency> + <groupId>log4j</groupId> + <artifactId>log4j</artifactId> + <version>${log4j-version}</version> + <scope>compile</scope> + </dependency> <dependency> <groupId>org.apache.geronimo.specs</groupId> diff --git a/qpid/java/qpid-test-utils/src/main/resources/log4j-test.xml b/qpid/java/qpid-test-utils/src/main/resources/log4j-test.xml new file mode 100644 index 0000000000..58205752e1 --- /dev/null +++ b/qpid/java/qpid-test-utils/src/main/resources/log4j-test.xml @@ -0,0 +1,67 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + 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. +--> + +<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> + +<!-- ===================================================================== --> +<!-- --> +<!-- Log4j configuration for unit tests --> +<!-- --> +<!-- ===================================================================== --> + +<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> + <appender name="console" class="org.apache.log4j.ConsoleAppender"> + <param name="Target" value="System.out"/> + <param name="ImmediateFlush" value="true"/> + <param name="Follow" value="true"/> + <layout class="org.apache.log4j.PatternLayout"> + <param name="ConversionPattern" value="%t %d %p [%c{4}] %m%n"/> + </layout> + </appender> + + <logger name="org.apache.qpid"> + <level value="${amqj.logging.level}"/> + </logger> + + <logger name="qpid.message"> + <level value="INFO"/> + </logger> + + <logger name="qpid.protocol"> + <level value="${amqj.protocol.logging.level}"/> + </logger> + + <logger name="org.apache.qpid.test.utils.QpidTestCase"> + <level value="ALL"/> + </logger> + + <logger name="org.apache.commons"> + <level value="WARN"/> + </logger> + + <logger name="apache.commons.configuration.ConfigurationFactory"> + <level value="ERROR"/> + </logger> + + <root> + <level value="${root.logging.level}"/> + <appender-ref ref="console" /> + </root> +</log4j:configuration> diff --git a/qpid/java/systests/pom.xml b/qpid/java/systests/pom.xml index 62f1a89480..98086bbe9e 100644 --- a/qpid/java/systests/pom.xml +++ b/qpid/java/systests/pom.xml @@ -26,10 +26,10 @@ <artifactId>qpid-systests</artifactId> <properties> - <broker.home.dir>target/qpid-broker/${project.version}</broker.home.dir> + <broker.home.dir>target${file.separator}qpid-broker${file.separator}${project.version}</broker.home.dir> <!-- test properties --> - <qpid.home>${basedir}/${broker.home.dir}</qpid.home> - <qpid.home.qbtc.output>${qpid.home}/qbtc-output</qpid.home.qbtc.output> + <qpid.home>${basedir}${file.separator}${broker.home.dir}</qpid.home> + <qpid.home.qbtc.output>${qpid.home}${file.separator}qbtc-output</qpid.home.qbtc.output> </properties> <dependencies> @@ -55,6 +55,20 @@ <scope>compile</scope> </dependency> + <dependency> + <groupId>log4j</groupId> + <artifactId>log4j</artifactId> + <version>${log4j-version}</version> + <scope>compile</scope> + </dependency> + + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-api</artifactId> + <version>${slf4j-version}</version> + <scope>compile</scope> + </dependency> + <!-- client deps --> <dependency> <groupId>org.apache.qpid</groupId> @@ -242,6 +256,9 @@ <!-- Skip the default test phase, bind to the integration-test phase below instead --> <skip>true</skip> + <systemPropertyVariables> + <log4j.configuration.file>${project.basedir}${file.separator}..${file.separator}test-profiles${file.separator}log4j-test.xml</log4j.configuration.file> + </systemPropertyVariables> </configuration> <executions> <execution> diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/ra/QpidRAConnectionTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/ra/QpidRAConnectionTest.java index 0ca90ac2ea..b274edf164 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/ra/QpidRAConnectionTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/ra/QpidRAConnectionTest.java @@ -20,6 +20,7 @@ */ package org.apache.qpid.ra; +import org.apache.log4j.Logger; import org.apache.qpid.test.utils.QpidBrokerTestCase; import javax.jms.Connection; @@ -33,6 +34,8 @@ import org.apache.qpid.ra.QpidResourceAdapter; public class QpidRAConnectionTest extends QpidBrokerTestCase { + private static final Logger _logger = Logger.getLogger(QpidRAConnectionTest.class); + private static final String BROKER_PORT = "15672"; private static final String URL = "amqp://guest:guest@client/test?brokerlist='tcp://localhost:" + BROKER_PORT + "?sasl_mechs='PLAIN''"; @@ -55,7 +58,7 @@ public class QpidRAConnectionTest extends QpidBrokerTestCase } catch(Exception e) { - e.printStackTrace(); + _logger.error("Commit threw exception", e); assertTrue(e instanceof javax.jms.IllegalStateException); } diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/scripts/QpidPasswdTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/scripts/QpidPasswdTest.java index 1158a1d220..e483660f4c 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/scripts/QpidPasswdTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/scripts/QpidPasswdTest.java @@ -23,6 +23,7 @@ import java.util.concurrent.TimeUnit; import org.apache.qpid.test.utils.Piper; import org.apache.qpid.test.utils.QpidTestCase; +import org.apache.qpid.util.SystemUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -35,6 +36,10 @@ public class QpidPasswdTest extends QpidTestCase public void testRunScript() throws Exception { + if(SystemUtils.isWindows()) + { + return; + } Process process = null; try { diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/server/exchange/ReturnUnroutableMandatoryMessageTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/server/exchange/ReturnUnroutableMandatoryMessageTest.java index 69b529cf40..9f145cd62c 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/server/exchange/ReturnUnroutableMandatoryMessageTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/server/exchange/ReturnUnroutableMandatoryMessageTest.java @@ -60,7 +60,7 @@ public class ReturnUnroutableMandatoryMessageTest extends QpidBrokerTestCase imp if (workdir == null || workdir.equals("")) { String tempdir = System.getProperty("java.io.tmpdir"); - System.out.println("QPID_WORK not set using tmp directory: " + tempdir); + _logger.info("QPID_WORK not set using tmp directory: " + tempdir); System.setProperty("QPID_WORK", tempdir); } } @@ -290,14 +290,7 @@ public class ReturnUnroutableMandatoryMessageTest extends QpidBrokerTestCase imp { Exception linkedException = null; - try - { - linkedException = jmsException.getLinkedException(); - } - catch (Exception e) - { - e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. - } + linkedException = jmsException.getLinkedException(); if (linkedException instanceof AMQNoRouteException) { AMQNoRouteException noRoute = (AMQNoRouteException) linkedException; diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/server/failover/FailoverMethodTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/server/failover/FailoverMethodTest.java index babe2d207d..9e2bd28c43 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/server/failover/FailoverMethodTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/server/failover/FailoverMethodTest.java @@ -29,6 +29,7 @@ import org.apache.qpid.AMQException; import org.apache.qpid.client.AMQConnection; import org.apache.qpid.client.AMQConnectionURL; import org.apache.qpid.test.utils.QpidBrokerTestCase; +import org.apache.qpid.util.SystemUtils; import javax.jms.ExceptionListener; import javax.jms.JMSException; @@ -49,6 +50,12 @@ public class FailoverMethodTest extends QpidBrokerTestCase implements ExceptionL */ public void testFailoverRoundRobinDelay() throws Exception { + if (SystemUtils.isWindows()) + { + //TODO Test requires redevelopment - timings/behaviour on windows mean it fails + return; + } + //note: The first broker has no connect delay and the default 1 retry // while the tcp:localhost broker has 3 retries with a 2s connect delay String connectionString = "amqp://guest:guest@/test?brokerlist=" + @@ -77,7 +84,7 @@ public class FailoverMethodTest extends QpidBrokerTestCase implements ExceptionL long duration = (end - start); //Failover should take more that 6 seconds. - // 3 Retires + // 3 Retries // so VM Broker NoDelay 0 (Connect) NoDelay 0 // then TCP NoDelay 0 Delay 1 Delay 2 Delay 3 // so 3 delays of 2s in total for connection @@ -99,6 +106,12 @@ public class FailoverMethodTest extends QpidBrokerTestCase implements ExceptionL public void testFailoverSingleDelay() throws Exception { + if (SystemUtils.isWindows()) + { + //TODO Test requires redevelopment - timings/behaviour on windows mean it fails + return; + } + String connectionString = "amqp://guest:guest@/test?brokerlist='tcp://localhost:" + getPort() + "?connectdelay='2000',retries='3''"; AMQConnectionURL url = new AMQConnectionURL(connectionString); @@ -123,7 +136,7 @@ public class FailoverMethodTest extends QpidBrokerTestCase implements ExceptionL long duration = (end - start); //Failover should take more that 6 seconds. - // 3 Retires + // 3 Retries // so NoDelay 0 (Connect) NoDelay 0 Delay 1 Delay 2 Delay 3 // so 3 delays of 2s in total for connection // so max time is 6 seconds of delay + 1 second of runtime. == 7 seconds @@ -151,16 +164,9 @@ public class FailoverMethodTest extends QpidBrokerTestCase implements ExceptionL */ public void testNoFailover() throws Exception { - if (!isInternalBroker()) + if (SystemUtils.isWindows()) { - // QPID-3359 - // These tests always used to be inVM tests, then QPID-2815, with removal of ivVM, - // converted the test to use QpidBrokerTestCase. However, since then we notice this - // test fails on slower CI boxes. It turns out the test design is *extremely* - // sensitive the length of time the broker takes to start up. - // - // Making the test a same-VM test to temporarily avoid the issue. In long term, test - // needs redesigned to avoid the issue. + //TODO Test requires redevelopment - timings/behaviour on windows mean it fails return; } @@ -185,7 +191,7 @@ public class FailoverMethodTest extends QpidBrokerTestCase implements ExceptionL try { //Wait before starting broker - // The wait should allow atleast 1 retries to fail before broker is ready + // The wait should allow at least 1 retries to fail before broker is ready Thread.sleep(750); startBroker(); } @@ -198,15 +204,13 @@ public class FailoverMethodTest extends QpidBrokerTestCase implements ExceptionL brokerStart.start(); long start = System.currentTimeMillis(); - //Start the connection so it will use the retries AMQConnection connection = new AMQConnection(url); long end = System.currentTimeMillis(); - long duration = (end - start); - // Check that we actually had a delay had a delay in connection + // Check that we actually had a delay in connection assertTrue("Initial connection should be longer than 1 delay : " + CONNECT_DELAY + " <:(" + duration + ")", duration > CONNECT_DELAY); @@ -222,8 +226,7 @@ public class FailoverMethodTest extends QpidBrokerTestCase implements ExceptionL stopBroker(); _failoverComplete.await(30, TimeUnit.SECONDS); - assertEquals("failoverLatch was not decremented in given timeframe", - 0, _failoverComplete.getCount()); + assertEquals("failoverLatch was not decremented in given timeframe", 0, _failoverComplete.getCount()); end = System.currentTimeMillis(); diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/server/queue/PriorityQueueTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/server/queue/PriorityQueueTest.java index a6c9885568..7b2dd3239d 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/server/queue/PriorityQueueTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/server/queue/PriorityQueueTest.java @@ -20,6 +20,7 @@ */ package org.apache.qpid.server.queue; +import org.apache.log4j.Logger; import org.apache.qpid.AMQException; import org.apache.qpid.client.AMQConnection; import org.apache.qpid.client.AMQDestination; @@ -246,6 +247,8 @@ public class PriorityQueueTest extends QpidBrokerTestCase private static class ReflectingMessageListener implements MessageListener { + private static final Logger _logger = Logger.getLogger(PriorityQueueTest.ReflectingMessageListener.class); + private Session _prodSess; private Session _consSess; private CountDownLatch _latch; @@ -270,7 +273,7 @@ public class PriorityQueueTest extends QpidBrokerTestCase { _latch.countDown(); long msgNum = _origCount - _latch.getCount(); - System.out.println("Received message " + msgNum + " with ID: " + message.getIntProperty("msg")); + _logger.info("Received message " + msgNum + " with ID: " + message.getIntProperty("msg")); if(_latch.getCount() > 0) { @@ -287,7 +290,7 @@ public class PriorityQueueTest extends QpidBrokerTestCase } catch(Throwable t) { - t.printStackTrace(); + _logger.error(t.getMessage(), t); _lastThrown = t; } } diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/server/queue/ProducerFlowControlTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/server/queue/ProducerFlowControlTest.java index 8bebcc703d..427508954d 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/server/queue/ProducerFlowControlTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/server/queue/ProducerFlowControlTest.java @@ -37,6 +37,7 @@ import javax.jms.MessageProducer; import javax.jms.Queue; import javax.jms.Session; +import org.apache.log4j.Logger; import org.apache.qpid.AMQException; import org.apache.qpid.client.AMQDestination; import org.apache.qpid.client.AMQSession; @@ -47,6 +48,8 @@ import org.apache.qpid.test.utils.JMXTestUtils; public class ProducerFlowControlTest extends AbstractTestLogging { + private static final Logger _logger = Logger.getLogger(ProducerFlowControlTest.class); + private static final int TIMEOUT = 10000; private Connection producerConnection; @@ -94,7 +97,7 @@ public class ProducerFlowControlTest extends AbstractTestLogging } catch (IOException e) { - e.printStackTrace(); + _logger.error("Error closing jmxUtils", e); } } producerConnection.close(); @@ -426,7 +429,7 @@ public class ProducerFlowControlTest extends AbstractTestLogging } catch (AMQException e) { - e.printStackTrace(); + _logger.error("Error performing sync", e); throw new RuntimeException(e); } diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/server/store/MessageStoreTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/server/store/MessageStoreTest.java index 5d8a1fe23c..710a6c5731 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/server/store/MessageStoreTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/server/store/MessageStoreTest.java @@ -26,6 +26,7 @@ import java.util.Collection; import java.util.Collections; import org.apache.commons.configuration.PropertiesConfiguration; +import org.apache.log4j.Logger; import org.apache.qpid.AMQException; import org.apache.qpid.AMQStoreException; import org.apache.qpid.common.AMQPFilterTypes; @@ -40,6 +41,7 @@ import org.apache.qpid.server.configuration.VirtualHostConfiguration; import org.apache.qpid.server.exchange.DirectExchange; import org.apache.qpid.server.exchange.Exchange; import org.apache.qpid.server.exchange.TopicExchange; +import org.apache.qpid.server.message.InstanceProperties; import org.apache.qpid.server.model.Queue; import org.apache.qpid.server.protocol.v0_8.AMQMessage; import org.apache.qpid.server.protocol.v0_8.MessageMetaData; @@ -50,8 +52,6 @@ import org.apache.qpid.server.queue.AMQPriorityQueue; import org.apache.qpid.server.queue.AMQQueue; import org.apache.qpid.server.queue.BaseQueue; import org.apache.qpid.server.queue.ConflationQueue; -import org.apache.qpid.server.protocol.v0_8.IncomingMessage; -import org.apache.qpid.server.queue.QueueArgumentsConverter; import org.apache.qpid.server.queue.SimpleAMQQueue; import org.apache.qpid.server.txn.AutoCommitTransaction; import org.apache.qpid.server.txn.ServerTransaction; @@ -77,6 +77,8 @@ import static org.mockito.Mockito.when; */ public class MessageStoreTest extends QpidTestCase { + private static final Logger _logger = Logger.getLogger(MessageStoreTest.class); + public static final int DEFAULT_PRIORTY_LEVEL = 5; public static final String SELECTOR_VALUE = "Test = 'MST'"; public static final String LVQ_KEY = "MST-LVQ-KEY"; @@ -180,7 +182,7 @@ public class MessageStoreTest extends QpidTestCase } catch (Exception e) { - e.printStackTrace(); + _logger.error("Error closing virtual host", e); fail(e.getMessage()); } } @@ -191,7 +193,7 @@ public class MessageStoreTest extends QpidTestCase } catch (Exception e) { - e.printStackTrace(); + _logger.error("Error creating virtual host", e); fail(e.getMessage()); } @@ -615,61 +617,41 @@ public class MessageStoreTest extends QpidTestCase MessagePublishInfo messageInfo = new TestMessagePublishInfo(exchange, false, false, routingKey); - final IncomingMessage currentMessage; - - - currentMessage = new IncomingMessage(messageInfo); - - currentMessage.setExchange(exchange); - ContentHeaderBody headerBody = new ContentHeaderBody(BasicConsumeBodyImpl.CLASS_ID,0,properties,0l); - try - { - currentMessage.setContentHeaderBody(headerBody); - } - catch (AMQException e) - { - fail(e.getMessage()); - } + MessageMetaData mmd = new MessageMetaData(messageInfo, headerBody, System.currentTimeMillis()); - currentMessage.setExpiration(); + final StoredMessage<MessageMetaData> storedMessage = getVirtualHost().getMessageStore().addMessage(mmd); + storedMessage.flushToStore(); + final AMQMessage currentMessage = new AMQMessage(storedMessage); - MessageMetaData mmd = currentMessage.headersReceived(System.currentTimeMillis()); - currentMessage.setStoredMessage(getVirtualHost().getMessageStore().addMessage(mmd)); - currentMessage.getStoredMessage().flushToStore(); - currentMessage.route(); + final List<? extends BaseQueue> destinationQueues = exchange.route(currentMessage, InstanceProperties.EMPTY); - // check and deliver if header says body length is zero - if (currentMessage.allContentReceived()) - { - ServerTransaction trans = new AutoCommitTransaction(getVirtualHost().getMessageStore()); - final List<? extends BaseQueue> destinationQueues = currentMessage.getDestinationQueues(); - trans.enqueue(currentMessage.getDestinationQueues(), currentMessage, new ServerTransaction.Action() { - public void postCommit() - { - try - { - AMQMessage message = new AMQMessage(currentMessage.getStoredMessage()); + ServerTransaction trans = new AutoCommitTransaction(getVirtualHost().getMessageStore()); - for(BaseQueue queue : destinationQueues) - { - queue.enqueue(message); - } - } - catch (AMQException e) + trans.enqueue(destinationQueues, currentMessage, new ServerTransaction.Action() { + public void postCommit() + { + try + { + for(BaseQueue queue : destinationQueues) { - e.printStackTrace(); + queue.enqueue(currentMessage); } } - - public void onRollback() + catch (AMQException e) { - //To change body of implemented methods use File | Settings | File Templates. + _logger.error("Problem enqueing message", e); } - }); - } + } + + public void onRollback() + { + //To change body of implemented methods use File | Settings | File Templates. + } + }); + } private void createAllQueues() diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/server/store/StoreOverfullTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/server/store/StoreOverfullTest.java index c4b16133f0..31e6a5613f 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/server/store/StoreOverfullTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/server/store/StoreOverfullTest.java @@ -346,7 +346,7 @@ public class StoreOverfullTest extends QpidBrokerTestCase } catch (AMQException e) { - e.printStackTrace(); + _logger.error(e); throw new RuntimeException(e); } diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/server/util/AveragedRun.java b/qpid/java/systests/src/main/java/org/apache/qpid/server/util/AveragedRun.java index b7732a8270..941c1d9499 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/server/util/AveragedRun.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/server/util/AveragedRun.java @@ -23,8 +23,12 @@ package org.apache.qpid.server.util; import java.util.Collection; import java.util.concurrent.Callable; +import org.apache.log4j.Logger; + public class AveragedRun implements Callable<RunStats> { + private static final Logger _logger = Logger.getLogger(AveragedRun.class); + private final RunStats stats = new RunStats(); private final TimedRun test; private final int iterations; @@ -46,7 +50,7 @@ public class AveragedRun implements Callable<RunStats> public void run() throws Exception { - System.out.println(test + ": " + call()); + _logger.info(test + ": " + call()); } public String toString() diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/BrokerRestTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/BrokerRestTest.java index b5d036c9e4..30a9ea2f21 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/BrokerRestTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/BrokerRestTest.java @@ -42,6 +42,7 @@ import org.apache.qpid.server.model.VirtualHost; import org.apache.qpid.server.store.MessageStoreCreator; import org.apache.qpid.test.client.UnroutableMessageTestExceptionListener; import org.apache.qpid.test.utils.TestBrokerConfiguration; +import org.apache.qpid.util.SystemUtils; public class BrokerRestTest extends QpidRestTestCase { @@ -237,8 +238,7 @@ public class BrokerRestTest extends QpidRestTestCase assertEquals("Unexpected value of attribute " + Broker.BUILD_VERSION, QpidProperties.getBuildVersion(), brokerDetails.get(Broker.BUILD_VERSION)); - assertEquals("Unexpected value of attribute " + Broker.OPERATING_SYSTEM, OS_NAME + " " - + System.getProperty("os.version") + " " + System.getProperty("os.arch"), + assertEquals("Unexpected value of attribute " + Broker.OPERATING_SYSTEM, SystemUtils.getOSString(), brokerDetails.get(Broker.OPERATING_SYSTEM)); assertEquals( "Unexpected value of attribute " + Broker.PLATFORM, diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/test/client/RollbackOrderTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/test/client/RollbackOrderTest.java index 2ed3f356d3..54c3225cec 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/test/client/RollbackOrderTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/test/client/RollbackOrderTest.java @@ -150,7 +150,7 @@ public class RollbackOrderTest extends QpidBrokerTestCase } catch (JMSException e) { - System.out.println("Error:" + e.getMessage()); + _logger.error("Error:" + e.getMessage(), e); exceptions[(int)count.getCount()] = e; } catch (AssertionFailedError cf) @@ -161,9 +161,7 @@ public class RollbackOrderTest extends QpidBrokerTestCase count.countDown(); } - System.out.println("Error:" + cf.getMessage()); - System.err.println(cf.getMessage()); - cf.printStackTrace(); + _logger.error("Error:" + cf.getMessage(), cf); failed.set(true); } } @@ -177,8 +175,7 @@ public class RollbackOrderTest extends QpidBrokerTestCase { if (e != null) { - System.err.println(e.getMessage()); - e.printStackTrace(); + _logger.error("Encountered exception", e); failed.set(true); } } diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/test/client/message/SelectorTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/test/client/message/SelectorTest.java index 5dcf678510..38fb1622b3 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/test/client/message/SelectorTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/test/client/message/SelectorTest.java @@ -126,7 +126,7 @@ public class SelectorTest extends QpidBrokerTestCase implements MessageListener } else { - System.out.println("SUCCESS!!"); + _logger.debug("SUCCESS!!"); } } catch (InterruptedException e) diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/ack/AcknowledgeOnMessageTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/ack/AcknowledgeOnMessageTest.java index 1b4407f255..602eb5137a 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/ack/AcknowledgeOnMessageTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/ack/AcknowledgeOnMessageTest.java @@ -125,7 +125,7 @@ public class AcknowledgeOnMessageTest extends AcknowledgeTest implements Message Exception cause = _causeOfFailure.get(); if (cause != null) { - cause.printStackTrace(); + _logger.error("Cause of failure is: ", cause); fail(cause.getMessage()); } else @@ -142,7 +142,7 @@ public class AcknowledgeOnMessageTest extends AcknowledgeTest implements Message Exception cause = _causeOfFailure.get(); if (cause != null) { - cause.printStackTrace(); + _logger.error("Failed due to following exception", cause); fail(cause.getMessage()); } diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/basic/BytesMessageTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/basic/BytesMessageTest.java index a121b39a56..01f4cdbb05 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/basic/BytesMessageTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/basic/BytesMessageTest.java @@ -271,8 +271,8 @@ public class BytesMessageTest extends QpidBrokerTestCase implements MessageListe count = Integer.parseInt(argv[1]); } - System.out.println("connectionString = " + connectionString); - System.out.println("count = " + count); + _logger.info("connectionString = " + connectionString); + _logger.info("count = " + count); BytesMessageTest test = new BytesMessageTest(); test._connectionString = connectionString; diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/basic/LargeMessageTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/basic/LargeMessageTest.java index 7bd737ee53..ace8324dab 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/basic/LargeMessageTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/basic/LargeMessageTest.java @@ -155,8 +155,8 @@ public class LargeMessageTest extends QpidBrokerTestCase } catch (JMSException e) { - e.printStackTrace(); - fail("Excpetion occured:" + e.getCause()); + _logger.error("Exception occured", e); + fail("Exception occured:" + e.getCause()); } } diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/basic/PropertyValueTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/basic/PropertyValueTest.java index 52213d15c4..dc963da680 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/basic/PropertyValueTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/basic/PropertyValueTest.java @@ -197,7 +197,6 @@ public class PropertyValueTest extends QpidBrokerTestCase implements MessageList catch (Exception e) { _logger.error(e.getMessage(), e); - e.printStackTrace(); } } diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/basic/TextMessageTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/basic/TextMessageTest.java index 0a568d57ad..57b689a291 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/basic/TextMessageTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/basic/TextMessageTest.java @@ -95,7 +95,7 @@ public class TextMessageTest extends QpidBrokerTestCase implements MessageListen } catch (Throwable e) { - e.printStackTrace(); + _logger.error("Error creating consumer", e); } connection.start(); } diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/client/connection/ConnectionStartTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/client/connection/ConnectionStartTest.java index 0650531d2b..6ea1582bb8 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/client/connection/ConnectionStartTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/client/connection/ConnectionStartTest.java @@ -73,7 +73,7 @@ public class ConnectionStartTest extends QpidBrokerTestCase } catch (Exception e) { - e.printStackTrace(); + _logger.error("Connection to " + _broker + " should succeed.", e); fail("Connection to " + _broker + " should succeed. Reason: " + e); } } diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/client/message/ObjectMessageTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/client/message/ObjectMessageTest.java index 728ef85bd2..99dc5ff216 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/client/message/ObjectMessageTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/client/message/ObjectMessageTest.java @@ -104,7 +104,7 @@ public class ObjectMessageTest extends QpidBrokerTestCase implements MessageList } catch (Exception e) { - e.printStackTrace(); + _logger.error("This Test should succeed but failed", e); fail("This Test should succeed but failed due to: " + e); } } @@ -254,7 +254,7 @@ public class ObjectMessageTest extends QpidBrokerTestCase implements MessageList } catch (JMSException e) { - e.printStackTrace(); + _logger.error("Error getting object from message", e); items.add(e); } diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/close/MessageRequeueTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/close/MessageRequeueTest.java index a4e9a992b4..5895d670a7 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/close/MessageRequeueTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/close/MessageRequeueTest.java @@ -312,7 +312,7 @@ public class MessageRequeueTest extends QpidBrokerTestCase } catch (Exception e) { - e.printStackTrace(); + _logger.error("Consumer run error",e); } } diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/close/VerifyAckingOkDuringClose.java b/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/close/VerifyAckingOkDuringClose.java deleted file mode 100644 index 3b30b7d63f..0000000000 --- a/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/close/VerifyAckingOkDuringClose.java +++ /dev/null @@ -1,160 +0,0 @@ -/* - * - * 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.qpid.test.unit.close; - -import org.apache.qpid.client.AMQConnection; -import org.apache.qpid.client.AMQConnectionFactory; -import org.apache.qpid.jndi.PropertiesFileInitialContextFactory; - -import javax.jms.Message; -import javax.jms.MessageConsumer; -import javax.jms.MessageProducer; -import javax.jms.Queue; -import javax.jms.Session; -import javax.naming.InitialContext; -import java.util.ArrayList; - -/** - * QPID-1791 - * - * The threading model in the Java broker (at least till 0.5) allows for the - * close to be handled immediately even if the broker is still processing state - * for that Session. - * - * This test verifys that QPID-1791 is has been handled. - * - * The problem was that the whilst the Session is busy processing Acks from the - * client the Close frame jumps in and clears the unAcknowledgeMap in an - * attempt to start processing them for closing the connection. - * - * If the session had a consumer consuming from a temporary queue. The closing - * thread dequeues and deletes the message that were on the uncknowledgedMap. - * - * However, the Acking thread currently does: - * queuEntry = unackedMap.get(messageID) - * - * dequeueAndDelete(queueEntry) - * - * unackedMap.remove(messageID) - * - * As a result the queueEntry is sitting in the unackedMap whilst it is being - * dequeuedAndDeleted which leaves the opportunity for the close thread to - * remove contents of the unackedMap for processing. The close thread will then - * dequeueAndDelete all these values one of which the acking thread is currently - * processing. - * - * - * Test Approach - * - * Send a lot of persistent messages (5000), the goal of which is to fill the - * pretch and to provide the broker with a lot of acks to process - * - * Using client ack and prefetch buffer of 5000 use receive to get 2500 - * Use AMQMessage.acknowledgeThis() to send a single ack frame back to the - * broker per message so 2500 ack frames. - * This will give the broker a lot to process, - * Immediately send the consumer close after the acks are all gone. - * This will cause the remaining 2500 prefetched messages plus any that have - * not yet had their acks processed - * to be collected by the requeue() process potentially - */ -public class VerifyAckingOkDuringClose -{ - - static final int MESSAGE_SENT = 5000; - - public static void main(String[] args) throws Exception - { - //Check that we have the InitialContext Configured - - if (System.getProperty(InitialContext.INITIAL_CONTEXT_FACTORY) == null) - { - System.setProperty(InitialContext.INITIAL_CONTEXT_FACTORY, PropertiesFileInitialContextFactory.class.getName()); - } - - if (System.getProperty(InitialContext.PROVIDER_URL) == null) - { - System.err.println(InitialContext.PROVIDER_URL + ": Is not set and is required to contain a 'default' ConnectionFactory."); - System.exit(1); - } - - //Retreive the local factory from the properties file - // when used with perftest.properties this will be localhost:5672 - AMQConnectionFactory factory = (AMQConnectionFactory) new InitialContext().lookup("default"); - - AMQConnection connection = (AMQConnection) factory.createConnection("guest", "guest"); - - //Use the AMQConnection Interface to set the prefetch to the number - // we are sending - Session session = connection.createSession(false, - Session.CLIENT_ACKNOWLEDGE, - MESSAGE_SENT); - - Queue queue = session.createTemporaryQueue(); - - MessageConsumer consumer = session.createConsumer(queue); - connection.start(); - - MessageProducer producer = session.createProducer(queue); - - Message message = session.createTextMessage("Close"); - - for (int i = 0; i < MESSAGE_SENT; i++) - { - message.setIntProperty("SequenceNumber", i); - - producer.send(message); - } - - // Put a reasonable about of data on the queue. - - //Receive all the messags - ArrayList<Message> received = new ArrayList<Message>(); - - message = consumer.receive(2000); - - while (message != null) - { - received.add(message); - message = consumer.receive(2000); - } - - //Check we have all the messages - if (received.size() != MESSAGE_SENT) - { - System.err.println("Test Failed Not all the messages received:" + received.size()); - System.exit(1); - } - - //individually ack the first half then close - for (int i = 0; i < MESSAGE_SENT / 2; i++) - { - ((org.apache.qpid.jms.Message) received.get(i)).acknowledgeThis(); - } - - // Close the Session to force a requeue on the server of the unackedMsgs - - System.out.println("Killing client to force requeue on broker"); - - System.exit(1); - } - -} diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/topic/DurableSubscriptionTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/topic/DurableSubscriptionTest.java index 4b61b6269c..cc8bfb9433 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/topic/DurableSubscriptionTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/topic/DurableSubscriptionTest.java @@ -284,7 +284,7 @@ public class DurableSubscriptionTest extends QpidBrokerTestCase { if(!isBrokerStorePersistent()) { - System.out.println("The broker store is not persistent, skipping this test."); + _logger.warn("The broker store is not persistent, skipping this test"); return; } @@ -784,7 +784,7 @@ public class DurableSubscriptionTest extends QpidBrokerTestCase } catch (Exception e) { - e.printStackTrace(); + _logger.error("Receive error",e); } conn.stop(); @@ -852,7 +852,7 @@ public class DurableSubscriptionTest extends QpidBrokerTestCase } catch (Exception e) { - e.printStackTrace(); + _logger.error("Receive error",e); } conn.stop(); @@ -914,7 +914,7 @@ public class DurableSubscriptionTest extends QpidBrokerTestCase } catch (Exception e) { - e.printStackTrace(); + _logger.error("Error creating durable subscriber",e); } } diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/topic/TopicSessionTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/topic/TopicSessionTest.java index 6bf20d7708..c2ea3a5695 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/topic/TopicSessionTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/topic/TopicSessionTest.java @@ -297,7 +297,7 @@ public class TopicSessionTest extends QpidBrokerTestCase m = (TextMessage) noLocal.receive(1000); if (m != null) { - System.out.println("Message:" + m.getText()); + _logger.info("Message:" + m.getText()); } assertNull(m); diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/transacted/CommitRollbackTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/transacted/CommitRollbackTest.java index 0be4f7ff1d..610628a02d 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/transacted/CommitRollbackTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/transacted/CommitRollbackTest.java @@ -634,7 +634,7 @@ public class CommitRollbackTest extends QpidBrokerTestCase } catch (JMSException e) { - e.printStackTrace(); + _logger.error("OnMessage error",e); } } } diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/transacted/TransactedTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/transacted/TransactedTest.java index 4f7d592958..78c76602c5 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/transacted/TransactedTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/transacted/TransactedTest.java @@ -108,7 +108,7 @@ public class TransactedTest extends QpidBrokerTestCase } catch (Exception e) { - e.printStackTrace(); + _logger.error("setup error",e); stopBroker(); throw e; } @@ -127,7 +127,7 @@ public class TransactedTest extends QpidBrokerTestCase } catch (Exception e) { - e.printStackTrace(); + _logger.error("tear down error",e); } finally { diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/xa/AbstractXATestCase.java b/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/xa/AbstractXATestCase.java index b5d1bff842..92df1bd331 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/xa/AbstractXATestCase.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/xa/AbstractXATestCase.java @@ -112,7 +112,7 @@ public abstract class AbstractXATestCase extends QpidBrokerTestCase } catch (JMSException e) { - e.printStackTrace(); + _logger.error("Producer error",e); fail("cannot create message producer: " + e.getMessage()); } // create standard consumer diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/xa/FaultTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/xa/FaultTest.java index 39973e12c7..c5fa217aa9 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/xa/FaultTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/xa/FaultTest.java @@ -39,7 +39,6 @@ import javax.transaction.xa.Xid; public class FaultTest extends AbstractXATestCase { - /* this clas logger */ private static final Logger _logger = LoggerFactory.getLogger(FaultTest.class); /** diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/xa/QueueTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/xa/QueueTest.java index 3fbe76323a..350781e970 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/xa/QueueTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/xa/QueueTest.java @@ -39,7 +39,6 @@ import javax.transaction.xa.Xid; public class QueueTest extends AbstractXATestCase { - /* this clas logger */ private static final Logger _logger = LoggerFactory.getLogger(QueueTest.class); /** @@ -167,7 +166,7 @@ public class QueueTest extends AbstractXATestCase } catch (JMSException e) { - e.printStackTrace(); + _logger.error("cannot create queue session",e); fail("cannot create queue session: " + e.getMessage()); } init(session, _queue); @@ -197,7 +196,7 @@ public class QueueTest extends AbstractXATestCase } catch (XAException e) { - e.printStackTrace(); + _logger.error("cannot start the transaction with xid1", e); fail("cannot start the transaction with xid1: " + e.getMessage()); } try @@ -411,14 +410,14 @@ public class QueueTest extends AbstractXATestCase { if (anInDoubt.equals(xid1)) { - System.out.println("commit xid1 "); + _logger.info("commit xid1 "); try { _xaResource.commit(anInDoubt, false); } catch (Exception e) { - System.out.println("PB when aborted xid1"); + _logger.error("PB when aborted xid1", e); } } else @@ -429,7 +428,7 @@ public class QueueTest extends AbstractXATestCase } catch (XAException e) { - e.printStackTrace(); + _logger.error("exception thrown when recovering transactions", e); fail("exception thrown when recovering transactions " + e.getMessage()); } // the queue should contain the first message! @@ -607,7 +606,7 @@ public class QueueTest extends AbstractXATestCase } catch (Exception e) { - System.out.println("PB when aborted xid1"); + _logger.error("PB when aborted xid1", e); } } else if (anInDoubt.equals(xid2)) @@ -619,14 +618,14 @@ public class QueueTest extends AbstractXATestCase } catch (Exception e) { - System.out.println("PB when commiting xid2"); + _logger.error("PB when commiting xid2", e); } } } } catch (XAException e) { - e.printStackTrace(); + _logger.error("exception thrown when recovering transactions", e); fail("exception thrown when recovering transactions " + e.getMessage()); } // the queue should be empty diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/xa/TopicTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/xa/TopicTest.java index d955979ad6..4d9242b8b3 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/xa/TopicTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/xa/TopicTest.java @@ -36,7 +36,7 @@ import java.util.concurrent.atomic.AtomicBoolean; */ public class TopicTest extends AbstractXATestCase { - /* this clas logger */ + /* this class logger */ private static final Logger _logger = LoggerFactory.getLogger(TopicTest.class); /** @@ -163,7 +163,7 @@ public class TopicTest extends AbstractXATestCase } catch (JMSException e) { - e.printStackTrace(); //To change body of catch statement use Options | File Templates. + _logger.error("Error creating topic session", e); } init(_session, _topic); } @@ -199,7 +199,7 @@ public class TopicTest extends AbstractXATestCase } catch (XAException e) { - e.printStackTrace(); + _logger.error("cannot start the transaction with xid1", e); fail("cannot start the transaction with xid1: " + e.getMessage()); } try @@ -384,7 +384,7 @@ public class TopicTest extends AbstractXATestCase } catch (Exception e) { - e.printStackTrace(); + _logger.error("Exception when working with xid1", e); fail("Exception when working with xid1: " + e.getMessage()); } try @@ -426,7 +426,7 @@ public class TopicTest extends AbstractXATestCase } catch (Exception e) { - e.printStackTrace(); + _logger.error("Exception when working with xid2", e); fail("Exception when working with xid2: " + e.getMessage()); } try @@ -453,7 +453,7 @@ public class TopicTest extends AbstractXATestCase } catch (Exception e) { - e.printStackTrace(); + _logger.error("Exception when working with xid3", e); fail("Exception when working with xid3: " + e.getMessage()); } try @@ -472,13 +472,13 @@ public class TopicTest extends AbstractXATestCase } catch (Exception e) { - e.printStackTrace(); + _logger.error("Exception when working with xid4", e); fail("Exception when working with xid4: " + e.getMessage()); } } catch (Exception e) { - e.printStackTrace(); + _logger.error("problem when creating dur sub", e); fail("problem when creating dur sub: " + e.getMessage()); } finally @@ -489,7 +489,7 @@ public class TopicTest extends AbstractXATestCase } catch (JMSException e) { - e.printStackTrace(); + _logger.error("problem when unsubscribing dur sub", e); fail("problem when unsubscribing dur sub: " + e.getMessage()); } } @@ -537,7 +537,7 @@ public class TopicTest extends AbstractXATestCase } catch (JMSException e) { - e.printStackTrace(); + _logger.error("Exception thrown when producing messages", e); fail("Exception thrown when producing messages: " + e.getMessage()); } @@ -595,7 +595,7 @@ public class TopicTest extends AbstractXATestCase } catch (Exception e) { - e.printStackTrace(); + _logger.error("Exception thrown when consumming 6 first messages", e); fail("Exception thrown when consumming 6 first messages: " + e.getMessage()); } try @@ -626,7 +626,7 @@ public class TopicTest extends AbstractXATestCase } catch (Exception e) { - e.printStackTrace(); + _logger.error("Exception thrown when consumming message: 3, 4 and 7", e); fail("Exception thrown when consumming message: 3, 4 and 7: " + e.getMessage()); } @@ -641,7 +641,7 @@ public class TopicTest extends AbstractXATestCase } catch (XAException e) { - e.printStackTrace(); + _logger.error("XAException thrown when committing tx3 or aborting tx1", e); fail("XAException thrown when committing tx3 or aborting tx1: " + e.getMessage()); } @@ -676,7 +676,7 @@ public class TopicTest extends AbstractXATestCase } catch (Exception e) { - e.printStackTrace(); + _logger.error("Exception thrown in last phase", e); fail("Exception thrown in last phase: " + e.getMessage()); } // now the topic should be empty!! @@ -697,13 +697,13 @@ public class TopicTest extends AbstractXATestCase } catch (Exception e) { - e.printStackTrace(); + _logger.error("Exception when working with xid6", e); fail("Exception when working with xid6: " + e.getMessage()); } } catch (Exception e) { - e.printStackTrace(); + _logger.error("problem when creating dur sub", e); fail("problem when creating dur sub: " + e.getMessage()); } finally @@ -714,7 +714,7 @@ public class TopicTest extends AbstractXATestCase } catch (JMSException e) { - e.printStackTrace(); + _logger.error("problem when unsubscribing dur sub", e); fail("problem when unsubscribing dur sub: " + e.getMessage()); } } @@ -769,7 +769,7 @@ public class TopicTest extends AbstractXATestCase } catch (JMSException e) { - e.printStackTrace(); + _logger.error("Exception thrown when producing messages", e); fail("Exception thrown when producing messages: " + e.getMessage()); } try @@ -830,7 +830,7 @@ public class TopicTest extends AbstractXATestCase } catch (Exception e) { - e.printStackTrace(); + _logger.error("Exception thrown when consumming 6 first messages", e); fail("Exception thrown when consumming 6 first messages: " + e.getMessage()); } /////// stop the broker now !! @@ -862,7 +862,7 @@ public class TopicTest extends AbstractXATestCase } catch (XAException e) { - e.printStackTrace(); + _logger.error("exception thrown when recovering transactions", e); fail("exception thrown when recovering transactions " + e.getMessage()); } try @@ -929,7 +929,7 @@ public class TopicTest extends AbstractXATestCase } catch (Exception e) { - e.printStackTrace(); + _logger.error("Exception thrown when consumming message: 3, 4 and 7", e); fail("Exception thrown when consumming message: 3, 4 and 7: " + e.getMessage()); } @@ -944,7 +944,7 @@ public class TopicTest extends AbstractXATestCase } catch (XAException e) { - e.printStackTrace(); + _logger.error("XAException thrown when committing tx3 or aborting tx1", e); fail("XAException thrown when committing tx3 or aborting tx1: " + e.getMessage()); } @@ -1024,7 +1024,7 @@ public class TopicTest extends AbstractXATestCase } catch (Exception e) { - e.printStackTrace(); + _logger.error("Exception thrown in last phase", e); fail("Exception thrown in last phase: " + e.getMessage()); } // now the topic should be empty!! @@ -1045,13 +1045,13 @@ public class TopicTest extends AbstractXATestCase } catch (Exception e) { - e.printStackTrace(); + _logger.error("Exception when working with xid6", e); fail("Exception when working with xid6: " + e.getMessage()); } } catch (Exception e) { - e.printStackTrace(); + _logger.error("problem when creating dur sub", e); fail("problem when creating dur sub: " + e.getMessage()); } finally @@ -1062,7 +1062,7 @@ public class TopicTest extends AbstractXATestCase } catch (JMSException e) { - e.printStackTrace(); + _logger.error("problem when unsubscribing dur sub", e); fail("problem when unsubscribing dur sub: " + e.getMessage()); } } @@ -1108,7 +1108,7 @@ public class TopicTest extends AbstractXATestCase } catch (Exception e) { - e.printStackTrace(); + _logger.error("Exception when working with xid1", e); fail("Exception when working with xid1: " + e.getMessage()); } try @@ -1134,7 +1134,7 @@ public class TopicTest extends AbstractXATestCase } catch (Exception e) { - e.printStackTrace(); + _logger.error("Exception when working with xid2", e); fail("Exception when working with xid2: " + e.getMessage()); } @@ -1171,26 +1171,26 @@ public class TopicTest extends AbstractXATestCase { if (anInDoubt.equals(xid2)) { - System.out.println("aborting xid2 "); + _logger.info("aborting xid2 "); try { _xaResource.rollback(anInDoubt); } catch (Exception e) { - e.printStackTrace(); + _logger.error("exception when aborting xid2 ", e); fail("exception when aborting xid2 "); } } else { - System.out.println("XID2 is not in doubt "); + _logger.info("XID2 is not in doubt "); } } } catch (XAException e) { - e.printStackTrace(); + _logger.error("exception thrown when recovering transactions", e); fail("exception thrown when recovering transactions " + e.getMessage()); } @@ -1218,7 +1218,7 @@ public class TopicTest extends AbstractXATestCase } catch (Exception e) { - e.printStackTrace(); + _logger.error("Exception when working with xid3", e); fail("Exception when working with xid3: " + e.getMessage()); } try @@ -1238,13 +1238,13 @@ public class TopicTest extends AbstractXATestCase } catch (Exception e) { - e.printStackTrace(); + _logger.error("Exception when working with xid4", e); fail("Exception when working with xid4: " + e.getMessage()); } } catch (Exception e) { - e.printStackTrace(); + _logger.error("problem when creating dur sub", e); fail("problem when creating dur sub: " + e.getMessage()); } finally @@ -1255,7 +1255,7 @@ public class TopicTest extends AbstractXATestCase } catch (JMSException e) { - e.printStackTrace(); + _logger.error("problem when unsubscribing dur sub", e); fail("problem when unsubscribing dur sub: " + e.getMessage()); } } @@ -1356,8 +1356,7 @@ public class TopicTest extends AbstractXATestCase } catch (Exception e) { - _logger.debug("PB when aborted xid1"); - e.printStackTrace(); + _logger.error("PB when aborted xid1"); fail("exception when committing xid1 "); } } @@ -1369,7 +1368,7 @@ public class TopicTest extends AbstractXATestCase } catch (XAException e) { - e.printStackTrace(); + _logger.error("exception thrown when recovering transactions ", e); fail("exception thrown when recovering transactions " + e.getMessage()); } _logger.debug("the topic should not be empty"); @@ -1381,13 +1380,13 @@ public class TopicTest extends AbstractXATestCase } catch (Exception e) { - e.printStackTrace(); + _logger.error("Exception thrown when testin that queue test is empty", e); fail("Exception thrown when testin that queue test is empty: " + e.getMessage()); } } catch (JMSException e) { - e.printStackTrace(); + _logger.error("cannot create dummy durable subscriber", e); fail("cannot create dummy durable subscriber: " + e.getMessage()); } finally @@ -1469,7 +1468,7 @@ public class TopicTest extends AbstractXATestCase } else if (message.getLongProperty(_sequenceNumberPropertyName) != 2) { - System.out.println("wrong sequence number, 2 expected, received: " + message + _logger.info("wrong sequence number, 2 expected, received: " + message .getLongProperty(_sequenceNumberPropertyName)); } _xaResource.end(xid1, XAResource.TMSUCCESS); @@ -1491,7 +1490,7 @@ public class TopicTest extends AbstractXATestCase } else if (message.getLongProperty(_sequenceNumberPropertyName) != 2) { - System.out.println("wrong sequence number, 2 expected, received: " + message + _logger.info("wrong sequence number, 2 expected, received: " + message .getLongProperty(_sequenceNumberPropertyName)); } // consume the third message with that xa durable subscriber @@ -1502,7 +1501,7 @@ public class TopicTest extends AbstractXATestCase } else if (message.getLongProperty(_sequenceNumberPropertyName) != 3) { - System.out.println("wrong sequence number, 3 expected, received: " + message + _logger.info("wrong sequence number, 3 expected, received: " + message .getLongProperty(_sequenceNumberPropertyName)); } stSession.commit(); @@ -1565,11 +1564,11 @@ public class TopicTest extends AbstractXATestCase message = (TextMessage) durSub.receive(1000); if (message == null) { - System.out.println("no message received "); + _logger.info("no message received "); } else if (message.getLongProperty(_sequenceNumberPropertyName) != i) { - System.out.println("wrong sequence number, " + i + " expected, received: " + message + _logger.info("wrong sequence number, " + i + " expected, received: " + message .getLongProperty(_sequenceNumberPropertyName)); } } @@ -1639,7 +1638,7 @@ public class TopicTest extends AbstractXATestCase } catch (Exception e) { - e.printStackTrace(); + _logger.error("Exception thrown", e); fail("Exception thrown: " + e.getMessage()); } finally @@ -1710,7 +1709,7 @@ public class TopicTest extends AbstractXATestCase } catch (JMSException e) { - e.printStackTrace(); + _logger.error("Error getting long property: " + TopicTest._sequenceNumberPropertyName , e); TopicTest.failure(); _lock.set(false); synchronized (_lock) @@ -1720,7 +1719,7 @@ public class TopicTest extends AbstractXATestCase } if (seq != _counter) { - System.out.println("received message " + seq + " expected " + _counter); + _logger.info("received message " + seq + " expected " + _counter); TopicTest.failure(); _lock.set(false); synchronized (_lock) diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/QpidBrokerTestCase.java b/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/QpidBrokerTestCase.java index 8248fc9de2..91dcf48001 100755 --- a/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/QpidBrokerTestCase.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/QpidBrokerTestCase.java @@ -21,8 +21,6 @@ import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintStream; -import java.net.URI; -import java.net.URISyntaxException; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; @@ -31,6 +29,7 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.TimeUnit; + import javax.jms.BytesMessage; import javax.jms.Connection; import javax.jms.Destination; @@ -48,6 +47,7 @@ import javax.jms.Topic; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; + import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.XMLConfiguration; import org.apache.commons.lang.StringUtils; @@ -72,6 +72,7 @@ import org.apache.qpid.server.store.MessageStoreConstants; import org.apache.qpid.server.store.MessageStoreCreator; import org.apache.qpid.url.URLSyntaxException; import org.apache.qpid.util.FileUtils; +import org.apache.qpid.util.SystemUtils; /** * Qpid base class for system testing test cases. @@ -131,6 +132,7 @@ public class QpidBrokerTestCase extends QpidTestCase private static final String BROKER_LANGUAGE = "broker.language"; protected static final String BROKER_TYPE = "broker.type"; private static final String BROKER_COMMAND = "broker.command"; + private static final String BROKER_COMMAND_PLATFORM = "broker.command." + SystemUtils.getOSConfigSuffix(); private static final String BROKER_CLEAN_BETWEEN_TESTS = "broker.clean.between.tests"; private static final String BROKER_VERSION = "broker.version"; protected static final String BROKER_READY = "broker.ready"; @@ -158,13 +160,13 @@ public class QpidBrokerTestCase extends QpidTestCase public static final int FAILING_PORT = Integer.parseInt(System.getProperty("test.port.alt")); public static final int DEFAULT_MANAGEMENT_PORT = Integer.getInteger("test.mport", DEFAULT_JMXPORT_REGISTRYSERVER); public static final int DEFAULT_SSL_PORT = Integer.getInteger("test.port.ssl", DEFAULT_SSL_PORT_VALUE); - public static final String OS_NAME = System.getProperty("os.name"); - public static final boolean IS_OS_WINDOWS = String.valueOf(OS_NAME).toLowerCase().contains("windows"); protected String _brokerLanguage = System.getProperty(BROKER_LANGUAGE, JAVA); protected BrokerType _brokerType = BrokerType.valueOf(System.getProperty(BROKER_TYPE, "").toUpperCase()); - protected BrokerCommandHelper _brokerCommandHelper = new BrokerCommandHelper(System.getProperty(BROKER_COMMAND)); + private static final String BROKER_COMMAND_TEMPLATE = System.getProperty(BROKER_COMMAND_PLATFORM, System.getProperty(BROKER_COMMAND)); + protected BrokerCommandHelper _brokerCommandHelper = new BrokerCommandHelper(BROKER_COMMAND_TEMPLATE); + private Boolean _brokerCleanBetweenTests = Boolean.getBoolean(BROKER_CLEAN_BETWEEN_TESTS); private final AmqpProtocolVersion _brokerVersion = AmqpProtocolVersion.valueOf(System.getProperty(BROKER_VERSION, "")); protected String _output = System.getProperty(TEST_OUTPUT, System.getProperty("java.io.tmpdir")); @@ -253,8 +255,6 @@ public class QpidBrokerTestCase extends QpidTestCase private void initialiseLogConfigFile() { - _logger.info("About to initialise log config file from system property: " + LOG4J_CONFIG_FILE_PATH); - _logConfigFile = new File(LOG4J_CONFIG_FILE_PATH); if(!_logConfigFile.exists()) { @@ -499,8 +499,21 @@ public class QpidBrokerTestCase extends QpidTestCase String qpidHome = System.getProperty(QPID_HOME); processEnv.put(QPID_HOME, qpidHome); //Augment Path with bin directory in QPID_HOME. - processEnv.put("PATH", processEnv.get("PATH").concat(File.pathSeparator + qpidHome + "/bin")); + boolean foundPath = false; + final String pathEntry = qpidHome + File.separator + "bin"; + for(Map.Entry<String,String> entry : processEnv.entrySet()) + { + if(entry.getKey().equalsIgnoreCase("path")) + { + entry.setValue(entry.getValue().concat(File.pathSeparator + pathEntry)); + foundPath = true; + } + } + if(!foundPath) + { + processEnv.put("PATH", pathEntry); + } //Add the test name to the broker run. // DON'T change PNAME, qpid.stop needs this value. processEnv.put("QPID_PNAME", "-DPNAME=QPBRKR -DTNAME=\"" + getTestName() + "\""); @@ -565,8 +578,14 @@ public class QpidBrokerTestCase extends QpidTestCase _interleaveBrokerLog ? _brokerLogPrefix : null); p.start(); + StringBuilder cmdLine = new StringBuilder(cmd[0]); + for(int i = 1; i< cmd.length; i++) + { + cmdLine.append(' '); + cmdLine.append(cmd[i]); + } - SpawnedBrokerHolder holder = new SpawnedBrokerHolder(process, qpidWork, portsUsedByBroker); + SpawnedBrokerHolder holder = new SpawnedBrokerHolder(process, qpidWork, portsUsedByBroker, cmdLine.toString()); if (!p.await(30, TimeUnit.SECONDS)) { _logger.info("broker failed to become ready (" + p.getReady() + "):" + p.getStopLine()); @@ -639,7 +658,16 @@ public class QpidBrokerTestCase extends QpidTestCase private String relativeToQpidHome(String file) { - return file.replace(System.getProperty(QPID_HOME,"QPID_HOME") + File.separator,""); + _logger.debug("Converting path to be relative to QPID_HOME: " + file); + + final String qpidHome = System.getProperty(QPID_HOME,"QPID_HOME"); + _logger.debug("QPID_HOME is: " + qpidHome); + + if(!file.startsWith(qpidHome)) { + throw new RuntimeException("Provided path is not a child of the QPID_HOME directory: " + qpidHome); + } + + return file.replace(qpidHome + File.separator,""); } protected String getPathRelativeToWorkingDirectory(String file) @@ -653,7 +681,7 @@ public class QpidBrokerTestCase extends QpidTestCase { String configPath = configLocation.getAbsolutePath(); String workingDirectoryPath = workingDirectory.getCanonicalPath(); - if (IS_OS_WINDOWS) + if (SystemUtils.isWindows()) { configPath = configPath.toLowerCase(); workingDirectoryPath = workingDirectoryPath.toLowerCase(); diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/SpawnedBrokerHolder.java b/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/SpawnedBrokerHolder.java index bce97a574a..4752aec352 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/SpawnedBrokerHolder.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/SpawnedBrokerHolder.java @@ -20,24 +20,32 @@ */ package org.apache.qpid.test.utils; +import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import java.util.Set; import org.apache.log4j.Logger; +import org.apache.qpid.util.SystemUtils; public class SpawnedBrokerHolder implements BrokerHolder { private static final Logger LOGGER = Logger.getLogger(SpawnedBrokerHolder.class); - private final boolean _isWindows = String.valueOf(System.getProperty("os.name")).toLowerCase().contains("windows"); private final Process _process; private final Integer _pid; private final String _workingDirectory; private Set<Integer> _portsUsedByBroker; + private final String _brokerCommand; - public SpawnedBrokerHolder(final Process process, final String workingDirectory, Set<Integer> portsUsedByBroker) + public SpawnedBrokerHolder(final Process process, final String workingDirectory, Set<Integer> portsUsedByBroker, + String brokerCmd) { if(process == null) { @@ -48,6 +56,7 @@ public class SpawnedBrokerHolder implements BrokerHolder _pid = retrieveUnixPidIfPossible(); _workingDirectory = workingDirectory; _portsUsedByBroker = portsUsedByBroker; + _brokerCommand = brokerCmd; } @Override @@ -58,6 +67,11 @@ public class SpawnedBrokerHolder implements BrokerHolder public void shutdown() { + if(SystemUtils.isWindows()) + { + doWindowsKill(); + } + LOGGER.info("Destroying broker process"); _process.destroy(); @@ -66,12 +80,85 @@ public class SpawnedBrokerHolder implements BrokerHolder waitUntilPortsAreFree(); } + private void doWindowsKill() + { + try + { + Process p = Runtime.getRuntime().exec(new String[] {"wmic", "process", "list"}); + BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream())); + String line; + String headers = reader.readLine(); + int processIdOffset = headers.indexOf(" ProcessId") + 1; + int parentProcessIdOffset = headers.indexOf(" ParentProcessId") + 1; + String parentProcess = null; + Map<String,List<String>> parentProcessMap = new HashMap<String, List<String>>(); + + while ((line = reader.readLine()) != null) + { + if(line.length() > processIdOffset) + { + String processIdStr = line.substring(processIdOffset); + processIdStr = processIdStr.substring(0, processIdStr.indexOf(' ')); + processIdStr.trim(); + + String parentProcessIdStr = line.substring(parentProcessIdOffset); + parentProcessIdStr = parentProcessIdStr.substring(0, parentProcessIdStr.indexOf(' ')); + parentProcessIdStr.trim(); + if(parentProcessIdStr.length() > 0 && (parentProcess == null || parentProcess.equals(parentProcessIdStr))) + { + List<String> children = parentProcessMap.get(parentProcessIdStr); + if(children == null) + { + children = new ArrayList<String>(); + parentProcessMap.put(parentProcessIdStr,children); + } + children.add(processIdStr); + } + if(line.substring(0,_brokerCommand.length()+7).toLowerCase().contains(_brokerCommand.toLowerCase())) + { + parentProcess = processIdStr; + } + + } + if(parentProcess != null) + { + List<String> children = parentProcessMap.get(parentProcess); + if(children != null) + { + for(String child : children) + { + p = Runtime.getRuntime().exec(new String[] {"taskkill", "/PID", child, "/T", "/F"}); + reader = new BufferedReader(new InputStreamReader(p.getInputStream())); + while((line = reader.readLine()) != null) + { + } + } + } + p = Runtime.getRuntime().exec(new String[] {"taskkill", "/PID", parentProcess, "/T", "/F"}); + reader = new BufferedReader(new InputStreamReader(p.getInputStream())); + while((line = reader.readLine()) != null) + { + } + } + + } + } + catch (IOException e) + { + LOGGER.error("Error whilst killing process " + _brokerCommand, e); + } + } + @Override public void kill() { if (_pid == null) { - LOGGER.info("Destroying broker process"); + if(SystemUtils.isWindows()) + { + doWindowsKill(); + } + LOGGER.info("Destroying broker process (no PID)"); _process.destroy(); } else @@ -113,7 +200,7 @@ public class SpawnedBrokerHolder implements BrokerHolder private Integer retrieveUnixPidIfPossible() { - if(!_isWindows) + if(!SystemUtils.isWindows()) { try { diff --git a/qpid/java/test-profiles/Java010Excludes b/qpid/java/test-profiles/Java010Excludes index 093821647d..8da2b5edd8 100755 --- a/qpid/java/test-profiles/Java010Excludes +++ b/qpid/java/test-profiles/Java010Excludes @@ -67,9 +67,5 @@ org.apache.qpid.client.failover.AddressBasedFailoverBehaviourTest#testFlowContro // QPID-3604: Immediate Prefetch no longer supported by 0-10 org.apache.qpid.client.AsynchMessageListenerTest#testImmediatePrefetchWithMessageListener -// QPID-2796 : Java 0-10 client only sends heartbeats in response to heartbeats from the server, not timeout based -org.apache.qpid.client.HeartbeatTest#testUnidirectionalHeartbeating -org.apache.qpid.client.HeartbeatTest#testHeartbeatsEnabledBrokerSide - // Java 0-10 client does not support re-binding the queue to the same exchange org.apache.qpid.server.queue.QueueBindTest#testQueueCanBeReboundOnTopicExchange diff --git a/qpid/java/test-profiles/java-bdb-spawn.0-10.testprofile b/qpid/java/test-profiles/java-bdb-spawn.0-10.testprofile index 78ab05a179..4230888a21 100644 --- a/qpid/java/test-profiles/java-bdb-spawn.0-10.testprofile +++ b/qpid/java/test-profiles/java-bdb-spawn.0-10.testprofile @@ -19,7 +19,8 @@ broker.language=java broker.type=spawned -broker.command=build/bin/qpid-server -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE +broker.command=build${file.separator}bin${file.separator}qpid-server -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE +broker.command.windows=build${file.separator}bin${file.separator}qpid-server.bat -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE broker.ready=BRK-1004 broker.stopped=Exception qpid.broker_default_amqp_protocol_excludes=AMQP_1_0 diff --git a/qpid/java/test-profiles/java-bdb-spawn.0-8.testprofile b/qpid/java/test-profiles/java-bdb-spawn.0-8.testprofile index 7f6efcbc3d..054eb9c1b6 100644 --- a/qpid/java/test-profiles/java-bdb-spawn.0-8.testprofile +++ b/qpid/java/test-profiles/java-bdb-spawn.0-8.testprofile @@ -19,7 +19,8 @@ broker.language=java broker.type=spawned -broker.command=build/bin/qpid-server -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE +broker.command=build${file.separator}bin${file.separator}qpid-server -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE +broker.command.windows=build${file.separator}bin${file.separator}qpid-server.bat -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE broker.ready=BRK-1004 broker.stopped=Exception qpid.broker_default_amqp_protocol_excludes=AMQP_1_0,AMQP_0_10,AMQP_0_9_1,AMQP_0_9 diff --git a/qpid/java/test-profiles/java-bdb-spawn.0-9-1.testprofile b/qpid/java/test-profiles/java-bdb-spawn.0-9-1.testprofile index 28668b94f7..65d86d9310 100644 --- a/qpid/java/test-profiles/java-bdb-spawn.0-9-1.testprofile +++ b/qpid/java/test-profiles/java-bdb-spawn.0-9-1.testprofile @@ -19,7 +19,8 @@ broker.language=java broker.type=spawned -broker.command=build/bin/qpid-server -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE +broker.command=build${file.separator}bin${file.separator}qpid-server -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE +broker.command.windows=build${file.separator}bin${file.separator}qpid-server.bat -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE broker.ready=BRK-1004 broker.stopped=Exception qpid.broker_default_amqp_protocol_excludes=AMQP_1_0,AMQP_0_10 diff --git a/qpid/java/test-profiles/java-bdb-spawn.0-9.testprofile b/qpid/java/test-profiles/java-bdb-spawn.0-9.testprofile index aa8e6830d4..4818cfff28 100644 --- a/qpid/java/test-profiles/java-bdb-spawn.0-9.testprofile +++ b/qpid/java/test-profiles/java-bdb-spawn.0-9.testprofile @@ -19,7 +19,8 @@ broker.language=java broker.type=spawned -broker.command=build/bin/qpid-server -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE +broker.command=build${file.separator}bin${file.separator}qpid-server -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE +broker.command.windows=build${file.separator}bin${file.separator}qpid-server.bat -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE broker.ready=BRK-1004 broker.stopped=Exception qpid.broker_default_amqp_protocol_excludes=AMQP_1_0,AMQP_0_10,AMQP_0_9_1 diff --git a/qpid/java/test-profiles/java-bdb.0-10.testprofile b/qpid/java/test-profiles/java-bdb.0-10.testprofile index 8c4b145e0b..cf5f608957 100644 --- a/qpid/java/test-profiles/java-bdb.0-10.testprofile +++ b/qpid/java/test-profiles/java-bdb.0-10.testprofile @@ -20,7 +20,8 @@ broker.language=java broker.type=internal #broker.command only used for the second broker during failover tests in this profile -broker.command=build/bin/qpid-server -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE +broker.command=build${file.separator}bin${file.separator}qpid-server -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE +broker.command.windows=build${file.separator}bin${file.separator}qpid-server.bat -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE broker.ready=BRK-1004 broker.stopped=Exception qpid.broker_default_amqp_protocol_excludes=AMQP_1_0 diff --git a/qpid/java/test-profiles/java-bdb.0-8.testprofile b/qpid/java/test-profiles/java-bdb.0-8.testprofile index acf031040e..09270f89b0 100644 --- a/qpid/java/test-profiles/java-bdb.0-8.testprofile +++ b/qpid/java/test-profiles/java-bdb.0-8.testprofile @@ -20,7 +20,8 @@ broker.language=java broker.type=internal #broker.command only used for the second broker during failover tests in this profile -broker.command=build/bin/qpid-server -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE +broker.command=build${file.separator}bin${file.separator}qpid-server -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE +broker.command.windows=build${file.separator}bin${file.separator}qpid-server.bat -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE broker.ready=BRK-1004 broker.stopped=Exception qpid.broker_default_amqp_protocol_excludes=AMQP_1_0,AMQP_0_10,AMQP_0_9_1,AMQP_0_9 diff --git a/qpid/java/test-profiles/java-bdb.0-9-1.testprofile b/qpid/java/test-profiles/java-bdb.0-9-1.testprofile index fa86720bbb..4248a55f1c 100644 --- a/qpid/java/test-profiles/java-bdb.0-9-1.testprofile +++ b/qpid/java/test-profiles/java-bdb.0-9-1.testprofile @@ -20,7 +20,8 @@ broker.language=java broker.type=internal #broker.command only used for the second broker during failover tests in this profile -broker.command=build/bin/qpid-server -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE +broker.command=build${file.separator}bin${file.separator}qpid-server -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE +broker.command.windows=build${file.separator}bin${file.separator}qpid-server.bat -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE broker.ready=BRK-1004 broker.stopped=Exception qpid.broker_default_amqp_protocol_excludes=AMQP_1_0,AMQP_0_10 diff --git a/qpid/java/test-profiles/java-bdb.0-9.testprofile b/qpid/java/test-profiles/java-bdb.0-9.testprofile index ed3d7b2170..cff55d7bde 100644 --- a/qpid/java/test-profiles/java-bdb.0-9.testprofile +++ b/qpid/java/test-profiles/java-bdb.0-9.testprofile @@ -20,7 +20,8 @@ broker.language=java broker.type=internal #broker.command only used for the second broker during failover tests in this profile -broker.command=build/bin/qpid-server -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE +broker.command=build${file.separator}bin${file.separator}qpid-server -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE +broker.command.windows=build${file.separator}bin${file.separator}qpid-server.bat -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE broker.ready=BRK-1004 broker.stopped=Exception qpid.broker_default_amqp_protocol_excludes=AMQP_1_0,AMQP_0_10,AMQP_0_9_1 diff --git a/qpid/java/test-profiles/java-dby-mem.0-10.testprofile b/qpid/java/test-profiles/java-dby-mem.0-10.testprofile index bfe031b338..f968d58ec9 100644 --- a/qpid/java/test-profiles/java-dby-mem.0-10.testprofile +++ b/qpid/java/test-profiles/java-dby-mem.0-10.testprofile @@ -20,7 +20,8 @@ broker.language=java broker.version=v0_10 broker.type=internal #broker.command only used for the second broker during failover tests in this profile -broker.command=build/bin/qpid-server -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE +broker.command=build${file.separator}bin${file.separator}qpid-server -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE +broker.command.windows=build${file.separator}bin${file.separator}qpid-server.bat -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE broker.ready=BRK-1004 broker.stopped=Exception qpid.broker_default_amqp_protocol_excludes=AMQP_1_0 diff --git a/qpid/java/test-profiles/java-dby-mem.0-8.testprofile b/qpid/java/test-profiles/java-dby-mem.0-8.testprofile index 28bce8e434..b50e17b955 100644 --- a/qpid/java/test-profiles/java-dby-mem.0-8.testprofile +++ b/qpid/java/test-profiles/java-dby-mem.0-8.testprofile @@ -20,7 +20,8 @@ broker.version=v0_8 broker.language=java broker.type=internal #broker.command only used for the second broker during failover tests in this profile -broker.command=build/bin/qpid-server -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE +broker.command=build${file.separator}bin${file.separator}qpid-server -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE +broker.command.windows=build${file.separator}bin${file.separator}qpid-server.bat -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE broker.ready=BRK-1004 broker.stopped=Exception qpid.broker_default_amqp_protocol_excludes=AMQP_1_0,AMQP_0_10,AMQP_0_9_1,AMQP_0_9 diff --git a/qpid/java/test-profiles/java-dby-mem.0-9-1.testprofile b/qpid/java/test-profiles/java-dby-mem.0-9-1.testprofile index 0d2f82ebb5..d16d17d220 100644 --- a/qpid/java/test-profiles/java-dby-mem.0-9-1.testprofile +++ b/qpid/java/test-profiles/java-dby-mem.0-9-1.testprofile @@ -20,7 +20,8 @@ broker.version=v0_9_1 broker.language=java broker.type=internal #broker.command only used for the second broker during failover tests in this profile -broker.command=build/bin/qpid-server -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE +broker.command=build${file.separator}bin${file.separator}qpid-server -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE +broker.command.windows=build${file.separator}bin${file.separator}qpid-server.bat -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE broker.ready=BRK-1004 broker.stopped=Exception qpid.broker_default_amqp_protocol_excludes=AMQP_1_0,AMQP_0_10 diff --git a/qpid/java/test-profiles/java-dby-mem.0-9.testprofile b/qpid/java/test-profiles/java-dby-mem.0-9.testprofile index 4dd9fbb899..35f2d0aa8c 100644 --- a/qpid/java/test-profiles/java-dby-mem.0-9.testprofile +++ b/qpid/java/test-profiles/java-dby-mem.0-9.testprofile @@ -20,7 +20,8 @@ broker.version=v0_9 broker.language=java broker.type=internal #broker.command only used for the second broker during failover tests in this profile -broker.command=build/bin/qpid-server -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE +broker.command=build${file.separator}bin${file.separator}qpid-server -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE +broker.command.windows=build${file.separator}bin${file.separator}qpid-server.bat -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE broker.ready=BRK-1004 broker.stopped=Exception qpid.broker_default_amqp_protocol_excludes=AMQP_1_0,AMQP_0_10,AMQP_0_9_1 diff --git a/qpid/java/test-profiles/java-dby-spawn.0-10.testprofile b/qpid/java/test-profiles/java-dby-spawn.0-10.testprofile index 9795533b52..a3ea69a1ee 100644 --- a/qpid/java/test-profiles/java-dby-spawn.0-10.testprofile +++ b/qpid/java/test-profiles/java-dby-spawn.0-10.testprofile @@ -19,7 +19,8 @@ broker.language=java broker.version=v0_10 broker.type=spawned -broker.command=build/bin/qpid-server -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE +broker.command=build${file.separator}bin${file.separator}qpid-server -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE +broker.command.windows=build${file.separator}bin${file.separator}qpid-server.bat -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE broker.ready=BRK-1004 broker.stopped=Exception qpid.broker_default_amqp_protocol_excludes=AMQP_1_0 diff --git a/qpid/java/test-profiles/java-dby-spawn.0-8.testprofile b/qpid/java/test-profiles/java-dby-spawn.0-8.testprofile index a980fd181d..8e737cec7c 100644 --- a/qpid/java/test-profiles/java-dby-spawn.0-8.testprofile +++ b/qpid/java/test-profiles/java-dby-spawn.0-8.testprofile @@ -19,7 +19,8 @@ broker.version=v0_8 broker.language=java broker.type=spawned -broker.command=build/bin/qpid-server -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE +broker.command=build${file.separator}bin${file.separator}qpid-server -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE +broker.command.windows=build${file.separator}bin${file.separator}qpid-server.bat -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE broker.ready=BRK-1004 broker.stopped=Exception qpid.broker_default_amqp_protocol_excludes=AMQP_1_0,AMQP_0_10,AMQP_0_9_1,AMQP_0_9 diff --git a/qpid/java/test-profiles/java-dby-spawn.0-9-1.testprofile b/qpid/java/test-profiles/java-dby-spawn.0-9-1.testprofile index 04428b5021..9de7a4a490 100644 --- a/qpid/java/test-profiles/java-dby-spawn.0-9-1.testprofile +++ b/qpid/java/test-profiles/java-dby-spawn.0-9-1.testprofile @@ -19,7 +19,8 @@ broker.version=v0_9_1 broker.language=java broker.type=spawned -broker.command=build/bin/qpid-server -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE +broker.command=build${file.separator}bin${file.separator}qpid-server -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE +broker.command.windows=build${file.separator}bin${file.separator}qpid-server.bat -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE broker.ready=BRK-1004 broker.stopped=Exception qpid.broker_default_amqp_protocol_excludes=AMQP_1_0,AMQP_0_10 diff --git a/qpid/java/test-profiles/java-dby-spawn.0-9.testprofile b/qpid/java/test-profiles/java-dby-spawn.0-9.testprofile index 4724eba660..97fff81068 100644 --- a/qpid/java/test-profiles/java-dby-spawn.0-9.testprofile +++ b/qpid/java/test-profiles/java-dby-spawn.0-9.testprofile @@ -19,7 +19,8 @@ broker.version=v0_9 broker.language=java broker.type=spawned -broker.command=build/bin/qpid-server -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE +broker.command=build${file.separator}bin${file.separator}qpid-server -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE +broker.command.windows=build${file.separator}bin${file.separator}qpid-server.bat -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE broker.ready=BRK-1004 broker.stopped=Exception qpid.broker_default_amqp_protocol_excludes=AMQP_1_0,AMQP_0_10,AMQP_0_9_1 diff --git a/qpid/java/test-profiles/java-dby.0-10.testprofile b/qpid/java/test-profiles/java-dby.0-10.testprofile index a2b1a41c31..07d75577d3 100644 --- a/qpid/java/test-profiles/java-dby.0-10.testprofile +++ b/qpid/java/test-profiles/java-dby.0-10.testprofile @@ -20,7 +20,8 @@ broker.language=java broker.version=v0_10 broker.type=internal #broker.command only used for the second broker during failover tests in this profile -broker.command=build/bin/qpid-server -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE +broker.command=build${file.separator}bin${file.separator}qpid-server -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE +broker.command.windows=build${file.separator}bin${file.separator}qpid-server.bat -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE broker.ready=BRK-1004 broker.stopped=Exception qpid.broker_default_amqp_protocol_excludes=AMQP_1_0 diff --git a/qpid/java/test-profiles/java-dby.0-8.testprofile b/qpid/java/test-profiles/java-dby.0-8.testprofile index 509796331f..b24dc8381d 100644 --- a/qpid/java/test-profiles/java-dby.0-8.testprofile +++ b/qpid/java/test-profiles/java-dby.0-8.testprofile @@ -20,7 +20,8 @@ broker.version=v0_8 broker.language=java broker.type=internal #broker.command only used for the second broker during failover tests in this profile -broker.command=build/bin/qpid-server -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE +broker.command=build${file.separator}bin${file.separator}qpid-server -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE +broker.command.windows=build${file.separator}bin${file.separator}qpid-server.bat -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE broker.ready=BRK-1004 broker.stopped=Exception qpid.broker_default_amqp_protocol_excludes=AMQP_1_0,AMQP_0_10,AMQP_0_9_1,AMQP_0_9 diff --git a/qpid/java/test-profiles/java-dby.0-9-1.testprofile b/qpid/java/test-profiles/java-dby.0-9-1.testprofile index be087a6344..ec08913626 100644 --- a/qpid/java/test-profiles/java-dby.0-9-1.testprofile +++ b/qpid/java/test-profiles/java-dby.0-9-1.testprofile @@ -20,7 +20,8 @@ broker.version=v0_9_1 broker.language=java broker.type=internal #broker.command only used for the second broker during failover tests in this profile -broker.command=build/bin/qpid-server -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE +broker.command=build${file.separator}bin${file.separator}qpid-server -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE +broker.command.windows=build${file.separator}bin${file.separator}qpid-server.bat -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE broker.ready=BRK-1004 broker.stopped=Exception qpid.broker_default_amqp_protocol_excludes=AMQP_1_0,AMQP_0_10 diff --git a/qpid/java/test-profiles/java-dby.0-9.testprofile b/qpid/java/test-profiles/java-dby.0-9.testprofile index 3b5e586ba4..73b1161f6b 100644 --- a/qpid/java/test-profiles/java-dby.0-9.testprofile +++ b/qpid/java/test-profiles/java-dby.0-9.testprofile @@ -20,7 +20,8 @@ broker.version=v0_9 broker.language=java broker.type=internal #broker.command only used for the second broker during failover tests in this profile -broker.command=build/bin/qpid-server -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE +broker.command=build${file.separator}bin${file.separator}qpid-server -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE +broker.command.windows=build${file.separator}bin${file.separator}qpid-server.bat -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE broker.ready=BRK-1004 broker.stopped=Exception qpid.broker_default_amqp_protocol_excludes=AMQP_1_0,AMQP_0_10,AMQP_0_9_1 diff --git a/qpid/java/test-profiles/java-mms-spawn.0-10.testprofile b/qpid/java/test-profiles/java-mms-spawn.0-10.testprofile index 71aaf48562..c2f2976d5f 100644 --- a/qpid/java/test-profiles/java-mms-spawn.0-10.testprofile +++ b/qpid/java/test-profiles/java-mms-spawn.0-10.testprofile @@ -19,7 +19,8 @@ broker.version=v0_10 broker.language=java broker.type=spawned -broker.command=build/bin/qpid-server -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE +broker.command=build${file.separator}bin${file.separator}qpid-server -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE +broker.command.windows=build${file.separator}bin${file.separator}qpid-server.bat -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE broker.ready=BRK-1004 broker.stopped=Exception qpid.broker_default_amqp_protocol_excludes=AMQP_1_0 diff --git a/qpid/java/test-profiles/java-mms-spawn.0-8.testprofile b/qpid/java/test-profiles/java-mms-spawn.0-8.testprofile index 6365fa20f0..74da76edc4 100644 --- a/qpid/java/test-profiles/java-mms-spawn.0-8.testprofile +++ b/qpid/java/test-profiles/java-mms-spawn.0-8.testprofile @@ -19,7 +19,8 @@ broker.version=v0_8 broker.language=java broker.type=spawned -broker.command=build/bin/qpid-server -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE +broker.command=build${file.separator}bin${file.separator}qpid-server -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE +broker.command.windows=build${file.separator}bin${file.separator}qpid-server.bat -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE broker.ready=BRK-1004 broker.stopped=Exception qpid.broker_default_amqp_protocol_excludes=AMQP_1_0,AMQP_0_10,AMQP_0_9_1,AMQP_0_9 diff --git a/qpid/java/test-profiles/java-mms-spawn.0-9-1.testprofile b/qpid/java/test-profiles/java-mms-spawn.0-9-1.testprofile index 1eb4b00a1d..4438a4293f 100644 --- a/qpid/java/test-profiles/java-mms-spawn.0-9-1.testprofile +++ b/qpid/java/test-profiles/java-mms-spawn.0-9-1.testprofile @@ -19,7 +19,8 @@ broker.version=v0_9_1 broker.language=java broker.type=spawned -broker.command=build/bin/qpid-server -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE +broker.command=build${file.separator}bin${file.separator}qpid-server -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE +broker.command.windows=build${file.separator}bin${file.separator}qpid-server.bat -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE broker.ready=BRK-1004 broker.stopped=Exception qpid.broker_default_amqp_protocol_excludes=AMQP_1_0,AMQP_0_10 diff --git a/qpid/java/test-profiles/java-mms-spawn.0-9.testprofile b/qpid/java/test-profiles/java-mms-spawn.0-9.testprofile index 4ebce66c05..828ad3fedf 100644 --- a/qpid/java/test-profiles/java-mms-spawn.0-9.testprofile +++ b/qpid/java/test-profiles/java-mms-spawn.0-9.testprofile @@ -19,7 +19,8 @@ broker.version=v0_9 broker.language=java broker.type=spawned -broker.command=build/bin/qpid-server -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE +broker.command=build${file.separator}bin${file.separator}qpid-server -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE +broker.command.windows=build${file.separator}bin${file.separator}qpid-server.bat -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE broker.ready=BRK-1004 broker.stopped=Exception qpid.broker_default_amqp_protocol_excludes=AMQP_1_0,AMQP_0_10,AMQP_0_9_1 diff --git a/qpid/java/test-profiles/java-mms.0-10.testprofile b/qpid/java/test-profiles/java-mms.0-10.testprofile index 0de5ffea09..33e90b940a 100644 --- a/qpid/java/test-profiles/java-mms.0-10.testprofile +++ b/qpid/java/test-profiles/java-mms.0-10.testprofile @@ -20,7 +20,8 @@ broker.language=java broker.version=v0_10 broker.type=internal #broker.command only used for the second broker during failover tests in this profile -broker.command=build/bin/qpid-server -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE +broker.command=build${file.separator}bin${file.separator}qpid-server -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE +broker.command.windows=build${file.separator}bin${file.separator}qpid-server.bat -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE broker.ready=BRK-1004 broker.stopped=Exception qpid.broker_default_amqp_protocol_excludes=AMQP_1_0 diff --git a/qpid/java/test-profiles/java-mms.0-8.testprofile b/qpid/java/test-profiles/java-mms.0-8.testprofile index dddad95157..93365e2e5c 100644 --- a/qpid/java/test-profiles/java-mms.0-8.testprofile +++ b/qpid/java/test-profiles/java-mms.0-8.testprofile @@ -20,7 +20,8 @@ broker.language=java broker.version=v0_8 broker.type=internal #broker.command only used for the second broker during failover tests in this profile -broker.command=build/bin/qpid-server -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE +broker.command=build${file.separator}bin${file.separator}qpid-server -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE +broker.command.windows=build${file.separator}bin${file.separator}qpid-server.bat -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE broker.ready=BRK-1004 broker.stopped=Exception qpid.broker_default_amqp_protocol_excludes=AMQP_1_0,AMQP_0_10,AMQP_0_9_1,AMQP_0_9 diff --git a/qpid/java/test-profiles/java-mms.0-9-1.testprofile b/qpid/java/test-profiles/java-mms.0-9-1.testprofile index 3c2f68a2c9..78a4629c9b 100644 --- a/qpid/java/test-profiles/java-mms.0-9-1.testprofile +++ b/qpid/java/test-profiles/java-mms.0-9-1.testprofile @@ -20,7 +20,8 @@ broker.language=java broker.version=v0_9_1 broker.type=internal #broker.command only used for the second broker during failover tests in this profile -broker.command=build/bin/qpid-server -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE +broker.command=build${file.separator}bin${file.separator}qpid-server -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE +broker.command.windows=build${file.separator}bin${file.separator}qpid-server.bat -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE broker.ready=BRK-1004 broker.stopped=Exception qpid.broker_default_amqp_protocol_excludes=AMQP_1_0,AMQP_0_10 diff --git a/qpid/java/test-profiles/java-mms.0-9.testprofile b/qpid/java/test-profiles/java-mms.0-9.testprofile index 992168b044..c5edf32bee 100644 --- a/qpid/java/test-profiles/java-mms.0-9.testprofile +++ b/qpid/java/test-profiles/java-mms.0-9.testprofile @@ -20,7 +20,8 @@ broker.language=java broker.version=v0_9 broker.type=internal #broker.command only used for the second broker during failover tests in this profile -broker.command=build/bin/qpid-server -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE +broker.command=build${file.separator}bin${file.separator}qpid-server -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE +broker.command.windows=build${file.separator}bin${file.separator}qpid-server.bat -sp @STORE_PATH -st @STORE_TYPE -l @LOG_CONFIG_FILE broker.ready=BRK-1004 broker.stopped=Exception qpid.broker_default_amqp_protocol_excludes=AMQP_1_0,AMQP_0_10,AMQP_0_9_1 diff --git a/qpid/java/tools/pom.xml b/qpid/java/tools/pom.xml index edc800a172..0afaa1d274 100644 --- a/qpid/java/tools/pom.xml +++ b/qpid/java/tools/pom.xml @@ -34,18 +34,25 @@ </dependency> <dependency> + <groupId>log4j</groupId> + <artifactId>log4j</artifactId> + <version>${log4j-version}</version> + <scope>compile</scope> + </dependency> + + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-api</artifactId> + <version>${slf4j-version}</version> + <scope>compile</scope> + </dependency> + + <dependency> <groupId>org.apache.geronimo.specs</groupId> <artifactId>geronimo-jms_1.1_spec</artifactId> <version>1.0</version> <scope>compile</scope> </dependency> - - <dependency> - <groupId>log4j</groupId> - <artifactId>log4j</artifactId> - <version>1.2.16</version> - <scope>compile</scope> - </dependency> </dependencies> <build> |
