Modified: incubator/qpid/branches/M2.1.1/java/systests/src/main/java/org/apache/qpid/test/framework/localcircuit/LocalCircuitImpl.java URL: http://svn.apache.org/viewvc/incubator/qpid/branches/M2.1.1/java/systests/src/main/java/org/apache/qpid/test/framework/localcircuit/LocalCircuitImpl.java?rev=598328&r1=598327&r2=598328&view=diff ============================================================================== --- incubator/qpid/branches/M2.1.1/java/systests/src/main/java/org/apache/qpid/test/framework/localcircuit/LocalCircuitImpl.java (original) +++ incubator/qpid/branches/M2.1.1/java/systests/src/main/java/org/apache/qpid/test/framework/localcircuit/LocalCircuitImpl.java Mon Nov 26 08:09:16 2007 @@ -22,7 +22,6 @@ import org.apache.log4j.Logger; -import org.apache.qpid.client.AMQSession; import org.apache.qpid.test.framework.*; import uk.co.thebadgerset.junit.extensions.util.ParsedProperties; @@ -31,7 +30,6 @@ import java.util.LinkedList; import java.util.List; -import java.util.concurrent.atomic.AtomicLong; /** * LocalCircuitImpl provides an implementation of the test circuit. This is a local only circuit implementation that @@ -47,7 +45,7 @@ * <tr><td> Apply assertions against the circuits state. <td> [EMAIL PROTECTED] Assertion} * <tr><td> Send test messages over the circuit. * <tr><td> Perform the default test procedure on the circuit. - * <tr><td> Provide access to connection and controlSession exception monitors <td> [EMAIL PROTECTED] ExceptionMonitor} + * <tr><td> Provide access to connection and controlSession exception monitors. <td> [EMAIL PROTECTED] ExceptionMonitor} * </table> */ public class LocalCircuitImpl implements Circuit @@ -55,9 +53,6 @@ /** Used for debugging. */ private static final Logger log = Logger.getLogger(LocalCircuitImpl.class); - /** Used to create unique destination names for each test. */ - private static AtomicLong uniqueDestsId = new AtomicLong(); - /** Holds the test configuration for the circuit. */ private ParsedProperties testProps; @@ -86,7 +81,7 @@ * @param connection The connection. * @param connectionExceptionMonitor The connection exception monitor. */ - protected LocalCircuitImpl(ParsedProperties testProps, LocalPublisherImpl publisher, LocalReceiverImpl receiver, + public LocalCircuitImpl(ParsedProperties testProps, LocalPublisherImpl publisher, LocalReceiverImpl receiver, Connection connection, ExceptionMonitor connectionExceptionMonitor) { this.testProps = testProps; @@ -102,159 +97,6 @@ } /** - * Creates a local test circuit from the specified test parameters. - * - * @param testProps The test parameters. - * - * @return A connected and ready to start, test circuit. - */ - public static Circuit createCircuit(ParsedProperties testProps) - { - // Create a standard publisher/receivers test client pair on a shared connection, individual sessions. - try - { - // Cast the test properties into a typed interface for convenience. - MessagingTestConfigProperties props = new MessagingTestConfigProperties(testProps); - - // Get a unique offset to append to destination names to make them unique to the connection. - long uniqueId = uniqueDestsId.incrementAndGet(); - - // Set up the connection. - Connection connection = TestUtils.createConnection(testProps); - - // Add the connection exception listener to assert on exception conditions with. - // ExceptionMonitor exceptionMonitor = new ExceptionMonitor(); - // connection.setExceptionListener(exceptionMonitor); - - // Set up the publisher. - CircuitEndBase publisherEnd = createPublisherCircuitEnd(connection, props, uniqueId); - - // Set up the receiver. - CircuitEndBase receiverEnd = createReceiverCircuitEnd(connection, props, uniqueId); - - // Start listening for incoming messages. - connection.start(); - - // Package everything up. - LocalPublisherImpl publisher = new LocalPublisherImpl(publisherEnd); - LocalReceiverImpl receiver = new LocalReceiverImpl(receiverEnd); - - return new LocalCircuitImpl(testProps, publisher, receiver, connection, publisher.getExceptionMonitor()); - } - catch (JMSException e) - { - throw new RuntimeException("Could not create publisher/receivers pair due to a JMSException.", e); - } - } - - /** - * Builds a circuit end suitable for the publishing side of a test circuit, from standard test parameters. - * - * @param connection The connection to build the circuit end on. - * @param testProps The test parameters to configure the circuit end construction. - * @param uniqueId A unique number to being numbering destinations from, to make this circuit unique. - * - * @return A circuit end suitable for the publishing side of a test circuit. - * - * @throws JMSException Any underlying JMSExceptions are allowed to fall through and fail the creation. - */ - public static CircuitEndBase createPublisherCircuitEnd(Connection connection, ParsedProperties testProps, long uniqueId) - throws JMSException - { - log.debug( - "public static CircuitEndBase createPublisherCircuitEnd(Connection connection, ParsedProperties testProps, long uniqueId = " - + uniqueId + "): called"); - - // Cast the test properties into a typed interface for convenience. - MessagingTestConfigProperties props = new MessagingTestConfigProperties(testProps); - - Session session = connection.createSession(props.getTransacted(), props.getAckMode()); - - Destination destination = - props.getPubsub() ? session.createTopic(props.getSendDestinationNameRoot() + "_" + uniqueId) - : session.createQueue(props.getSendDestinationNameRoot() + "_" + uniqueId); - - MessageProducer producer = - props.getPublisherProducerBind() - ? ((props.getImmediate() | props.getMandatory()) - ? ((AMQSession) session).createProducer(destination, props.getMandatory(), props.getImmediate()) - : session.createProducer(destination)) : null; - - MessageConsumer consumer = - props.getPublisherConsumerBind() - ? session.createConsumer(session.createQueue(props.getReceiveDestinationNameRoot() + "_" + uniqueId)) : null; - - MessageMonitor messageMonitor = new MessageMonitor(); - - if (consumer != null) - { - consumer.setMessageListener(messageMonitor); - } - - ExceptionMonitor exceptionMonitor = new ExceptionMonitor(); - connection.setExceptionListener(exceptionMonitor); - - if (!props.getPublisherConsumerActive() && (consumer != null)) - { - consumer.close(); - } - - return new CircuitEndBase(producer, consumer, session, messageMonitor, exceptionMonitor); - } - - /** - * Builds a circuit end suitable for the receiving side of a test circuit, from standard test parameters. - * - * @param connection The connection to build the circuit end on. - * @param testProps The test parameters to configure the circuit end construction. - * @param uniqueId A unique number to being numbering destinations from, to make this circuit unique. - * - * @return A circuit end suitable for the receiving side of a test circuit. - * - * @throws JMSException Any underlying JMSExceptions are allowed to fall through and fail the creation. - */ - public static CircuitEndBase createReceiverCircuitEnd(Connection connection, ParsedProperties testProps, long uniqueId) - throws JMSException - { - log.debug( - "public static CircuitEndBase createReceiverCircuitEnd(Connection connection, ParsedProperties testProps, long uniqueId = " - + uniqueId + "): called"); - - // Cast the test properties into a typed interface for convenience. - MessagingTestConfigProperties props = new MessagingTestConfigProperties(testProps); - - Session session = connection.createSession(props.getTransacted(), props.getAckMode()); - - MessageProducer producer = - props.getReceiverProducerBind() - ? session.createProducer(session.createQueue(props.getReceiveDestinationNameRoot() + "_" + uniqueId)) : null; - - Destination destination = - props.getPubsub() ? session.createTopic(props.getSendDestinationNameRoot() + "_" + uniqueId) - : session.createQueue(props.getSendDestinationNameRoot() + "_" + uniqueId); - - MessageConsumer consumer = - props.getReceiverConsumerBind() - ? ((props.getDurableSubscription() && props.getPubsub()) - ? session.createDurableSubscriber((Topic) destination, "testsub") : session.createConsumer(destination)) - : null; - - MessageMonitor messageMonitor = new MessageMonitor(); - - if (consumer != null) - { - consumer.setMessageListener(messageMonitor); - } - - if (!props.getReceiverConsumerActive() && (consumer != null)) - { - consumer.close(); - } - - return new CircuitEndBase(producer, consumer, session, messageMonitor, null); - } - - /** * Gets the interface on the publishing end of the circuit. * * @return The publishing end of the circuit. @@ -351,16 +193,24 @@ */ protected void send() { - boolean transactional = testProps.getPropertyAsBoolean(MessagingTestConfigProperties.TRANSACTED_PROPNAME); + // Cast the test properties into a typed interface for convenience. + MessagingTestConfigProperties props = new MessagingTestConfigProperties(testProps); - // Send an immediate message through the publisher and ensure that it results in a JMSException. + boolean transactional = props.getPublisherTransacted(); + boolean rollback = props.getRollbackPublisher(); + + // Send a message through the publisher and log any exceptions raised. try { CircuitEnd end = getLocalPublisherCircuitEnd(); end.send(createTestMessage(end)); - if (transactional) + if (rollback) + { + end.getSession().rollback(); + } + else if (transactional) { end.getSession().commit(); } @@ -427,7 +277,10 @@ */ private Message createTestMessage(CircuitEnd client) throws JMSException { - return client.getSession().createTextMessage("Hello"); + // Cast the test properties into a typed interface for convenience. + MessagingTestConfigProperties props = new MessagingTestConfigProperties(testProps); + + return TestUtils.createTestMessageOfSize(client.getSession(), props.getMessageSize()); } /**
Modified: incubator/qpid/branches/M2.1.1/java/systests/src/main/java/org/apache/qpid/test/framework/localcircuit/LocalPublisherImpl.java URL: http://svn.apache.org/viewvc/incubator/qpid/branches/M2.1.1/java/systests/src/main/java/org/apache/qpid/test/framework/localcircuit/LocalPublisherImpl.java?rev=598328&r1=598327&r2=598328&view=diff ============================================================================== --- incubator/qpid/branches/M2.1.1/java/systests/src/main/java/org/apache/qpid/test/framework/localcircuit/LocalPublisherImpl.java (original) +++ incubator/qpid/branches/M2.1.1/java/systests/src/main/java/org/apache/qpid/test/framework/localcircuit/LocalPublisherImpl.java Mon Nov 26 08:09:16 2007 @@ -20,10 +20,10 @@ */ package org.apache.qpid.test.framework.localcircuit; -import org.apache.qpid.client.AMQNoConsumersException; -import org.apache.qpid.client.AMQNoRouteException; import org.apache.qpid.test.framework.*; +import uk.co.thebadgerset.junit.extensions.util.ParsedProperties; + import javax.jms.MessageConsumer; import javax.jms.MessageProducer; import javax.jms.Session; @@ -31,7 +31,7 @@ /** * Provides an implementation of the [EMAIL PROTECTED] Publisher} interface and wraps a single message producer and consumer on * a single controlSession, as a [EMAIL PROTECTED] CircuitEnd}. A local publisher also acts as a circuit end, because for a locally - * located circuit the assertions may be applied directly, there does not need to be any inter process messaging + * located circuit the assertions may be applied directly, there does not need to be any inter-process messaging * between the publisher and its single circuit end, in order to ascertain its status. * * <p/><table id="crc"><caption>CRC Card</caption> @@ -46,14 +46,17 @@ public class LocalPublisherImpl extends CircuitEndBase implements Publisher { /** Holds a reference to the containing circuit. */ - private LocalCircuitImpl circuit; + protected LocalCircuitImpl circuit; /** - * Creates a circuit end point on the specified producer, consumer and controlSession. + * Creates a circuit end point on the specified producer, consumer and controlSession. Monitors are also configured + * for messages and exceptions received by the circuit end. * * @param producer The message producer for the circuit end point. * @param consumer The message consumer for the circuit end point. * @param session The controlSession for the circuit end point. + * @param messageMonitor The monitor to notify of all messages received by the circuit end. + * @param exceptionMonitor The monitor to notify of all exceptions received by the circuit end. */ public LocalPublisherImpl(MessageProducer producer, MessageConsumer consumer, Session session, MessageMonitor messageMonitor, ExceptionMonitor exceptionMonitor) @@ -74,9 +77,11 @@ /** * Provides an assertion that the publisher encountered no exceptions. * + * @param testProps + * * @return An assertion that the publisher encountered no exceptions. */ - public Assertion noExceptionsAssertion() + public Assertion noExceptionsAssertion(ParsedProperties testProps) { return new AssertionBase() { @@ -109,41 +114,26 @@ } /** - * Provides an assertion that the publisher got a no consumers exception on every message. + * Provides an assertion that the AMQP channel was forcibly closed by an error condition. + * + * @param testProps The test configuration properties. * - * @return An assertion that the publisher got a no consumers exception on every message. + * @return An assertion that the AMQP channel was forcibly closed by an error condition. */ - public Assertion noConsumersAssertion() + public Assertion channelClosedAssertion(ParsedProperties testProps) { - return new AssertionBase() - { - public boolean apply() - { - boolean passed = true; - ExceptionMonitor connectionExceptionMonitor = circuit.getConnectionExceptionMonitor(); - - if (!connectionExceptionMonitor.assertOneJMSExceptionWithLinkedCause(AMQNoConsumersException.class)) - { - passed = false; - - addError("Was expecting linked exception type " + AMQNoConsumersException.class.getName() - + " on the connection.\n"); - addError((connectionExceptionMonitor.size() > 0) - ? ("Actually got the following exceptions on the connection, " + connectionExceptionMonitor) - : "Got no exceptions on the connection."); - } - - return passed; - } - }; + return new NotApplicableAssertion(testProps); } /** - * Provides an assertion that the publisher got a no rout exception on every message. + * Provides an assertion that the publisher got a given exception during the test. + * + * @param testProps The test configuration properties. + * @param exceptionClass The exception class to check for. * - * @return An assertion that the publisher got a no rout exception on every message. + * @return An assertion that the publisher got a given exception during the test. */ - public Assertion noRouteAssertion() + public Assertion exceptionAssertion(ParsedProperties testProps, final Class<? extends Exception> exceptionClass) { return new AssertionBase() { @@ -152,11 +142,11 @@ boolean passed = true; ExceptionMonitor connectionExceptionMonitor = circuit.getConnectionExceptionMonitor(); - if (!connectionExceptionMonitor.assertOneJMSExceptionWithLinkedCause(AMQNoRouteException.class)) + if (!connectionExceptionMonitor.assertExceptionOfType(exceptionClass)) { passed = false; - addError("Was expecting linked exception type " + AMQNoRouteException.class.getName() + addError("Was expecting linked exception type " + exceptionClass.getName() + " on the connection.\n"); addError((connectionExceptionMonitor.size() > 0) ? ("Actually got the following exceptions on the connection, " + connectionExceptionMonitor) Modified: incubator/qpid/branches/M2.1.1/java/systests/src/main/java/org/apache/qpid/test/framework/localcircuit/LocalReceiverImpl.java URL: http://svn.apache.org/viewvc/incubator/qpid/branches/M2.1.1/java/systests/src/main/java/org/apache/qpid/test/framework/localcircuit/LocalReceiverImpl.java?rev=598328&r1=598327&r2=598328&view=diff ============================================================================== --- incubator/qpid/branches/M2.1.1/java/systests/src/main/java/org/apache/qpid/test/framework/localcircuit/LocalReceiverImpl.java (original) +++ incubator/qpid/branches/M2.1.1/java/systests/src/main/java/org/apache/qpid/test/framework/localcircuit/LocalReceiverImpl.java Mon Nov 26 08:09:16 2007 @@ -22,6 +22,8 @@ import org.apache.qpid.test.framework.*; +import uk.co.thebadgerset.junit.extensions.util.ParsedProperties; + import javax.jms.MessageConsumer; import javax.jms.MessageProducer; import javax.jms.Session; @@ -46,11 +48,14 @@ private LocalCircuitImpl circuit; /** - * Creates a circuit end point on the specified producer, consumer and controlSession. + * Creates a circuit end point on the specified producer, consumer and controlSession. Monitors are also configured + * for messages and exceptions received by the circuit end. * * @param producer The message producer for the circuit end point. * @param consumer The message consumer for the circuit end point. * @param session The controlSession for the circuit end point. + * @param messageMonitor The monitor to notify of all messages received by the circuit end. + * @param exceptionMonitor The monitor to notify of all exceptions received by the circuit end. */ public LocalReceiverImpl(MessageProducer producer, MessageConsumer consumer, Session session, MessageMonitor messageMonitor, ExceptionMonitor exceptionMonitor) @@ -71,21 +76,60 @@ /** * Provides an assertion that the receivers encountered no exceptions. * + * @param testProps The test configuration properties. + * * @return An assertion that the receivers encountered no exceptions. */ - public Assertion noExceptionsAssertion() + public Assertion noExceptionsAssertion(ParsedProperties testProps) + { + return new NotApplicableAssertion(testProps); + } + + /** + * Provides an assertion that the AMQP channel was forcibly closed by an error condition. + * + * @param testProps The test configuration properties. + * + * @return An assertion that the AMQP channel was forcibly closed by an error condition. + */ + public Assertion channelClosedAssertion(ParsedProperties testProps) { - return null; + return new NotApplicableAssertion(testProps); } /** * Provides an assertion that the receivers got all messages that were sent to it. * + * @param testProps The test configuration properties. + * * @return An assertion that the receivers got all messages that were sent to it. */ - public Assertion allMessagesAssertion() + public Assertion allMessagesReceivedAssertion(ParsedProperties testProps) + { + return new NotApplicableAssertion(testProps); + } + + /** + * Provides an assertion that the receivers got none of the messages that were sent to it. + * + * @param testProps The test configuration properties. + * + * @return An assertion that the receivers got none of the messages that were sent to it. + */ + public Assertion noMessagesReceivedAssertion(ParsedProperties testProps) + { + return new NotApplicableAssertion(testProps); + } + + /** + * Provides an assertion that the receiver got a given exception during the test. + * + * @param testProps The test configuration properties. + * @param exceptionClass The exception class to check for. @return An assertion that the receiver got a given exception during the test. + */ + public Assertion exceptionAssertion(ParsedProperties testProps, Class<? extends Exception> exceptionClass) { - return null; + return new NotApplicableAssertion(testProps); } /** Modified: incubator/qpid/branches/M2.1.1/java/systests/src/main/java/org/apache/qpid/test/framework/sequencers/BaseCircuitFactory.java URL: http://svn.apache.org/viewvc/incubator/qpid/branches/M2.1.1/java/systests/src/main/java/org/apache/qpid/test/framework/sequencers/BaseCircuitFactory.java?rev=598328&r1=598327&r2=598328&view=diff ============================================================================== --- incubator/qpid/branches/M2.1.1/java/systests/src/main/java/org/apache/qpid/test/framework/sequencers/BaseCircuitFactory.java (original) +++ incubator/qpid/branches/M2.1.1/java/systests/src/main/java/org/apache/qpid/test/framework/sequencers/BaseCircuitFactory.java Mon Nov 26 08:09:16 2007 @@ -31,13 +31,20 @@ import java.util.Properties; /** + * BaseCircuitFactory provides some functionality common to all [EMAIL PROTECTED] CircuitFactory}s, such as the details of + * all [EMAIL PROTECTED] org.apache.qpid.test.framework.distributedtesting.TestClient}s that make up the end-points of + * the circuits that the factory creates, and an active [EMAIL PROTECTED] ConversationFactory} that can be used to generate + * control conversations with those circuit end-points. + * * <p/><table id="crc"><caption>CRC Card</caption> * <tr><th> Responsibilities <th> Collaborations - * <tr><td> + * <tr><td> Hold the details of the sending and receiving end-points to create circuits from. + * <tr><td> Provide a conversation factory to create control conversations with the end-points. * </table> */ public abstract class BaseCircuitFactory implements CircuitFactory { + /** Used for debugging. */ private final Logger log = Logger.getLogger(BaseCircuitFactory.class); Modified: incubator/qpid/branches/M2.1.1/java/systests/src/main/java/org/apache/qpid/test/framework/sequencers/CircuitFactory.java URL: http://svn.apache.org/viewvc/incubator/qpid/branches/M2.1.1/java/systests/src/main/java/org/apache/qpid/test/framework/sequencers/CircuitFactory.java?rev=598328&r1=598327&r2=598328&view=diff ============================================================================== --- incubator/qpid/branches/M2.1.1/java/systests/src/main/java/org/apache/qpid/test/framework/sequencers/CircuitFactory.java (original) +++ incubator/qpid/branches/M2.1.1/java/systests/src/main/java/org/apache/qpid/test/framework/sequencers/CircuitFactory.java Mon Nov 26 08:09:16 2007 @@ -35,7 +35,7 @@ import java.util.Properties; /** - * A TestCaseSequence is responsibile for creating test circuits appropriate to the context that a test case is + * A CircuitFactory is responsibile for creating test circuits appropriate to the context that a test case is * running in, and providing an implementation of a standard test procedure over a test circuit. * * <p/><table id="crc"><caption>CRC Card</caption> @@ -43,12 +43,6 @@ * <tr><td> Provide a standard test procedure over a test circuit. * <tr><td> Construct test circuits appropriate to a tests context. * </table> - * - * @todo The sequence test method is deprecated, in favour of using test circuits instead. This interface might be - * better renamed to somethign like CircuitFactory, also the split between this interface and - * DistributedTestSequencer could be removed and DistributedTestCase functionality merged into FrameworkBaseCase. - * This is so that any test case written on top of the framework base case can be distributed, without having - * to extend a different base test class. */ public interface CircuitFactory { Modified: incubator/qpid/branches/M2.1.1/java/systests/src/main/java/org/apache/qpid/test/framework/sequencers/FanOutCircuitFactory.java URL: http://svn.apache.org/viewvc/incubator/qpid/branches/M2.1.1/java/systests/src/main/java/org/apache/qpid/test/framework/sequencers/FanOutCircuitFactory.java?rev=598328&r1=598327&r2=598328&view=diff ============================================================================== --- incubator/qpid/branches/M2.1.1/java/systests/src/main/java/org/apache/qpid/test/framework/sequencers/FanOutCircuitFactory.java (original) +++ incubator/qpid/branches/M2.1.1/java/systests/src/main/java/org/apache/qpid/test/framework/sequencers/FanOutCircuitFactory.java Mon Nov 26 08:09:16 2007 @@ -46,7 +46,7 @@ * * <p/><table id="crc"><caption>CRC Card</caption> * <tr><th> Responsibilities <th> Collaborations - * <tr><td> + * <tr><td> Create distributed circuits from one to many test nodes, for fanout style testing. * </table> * * @todo Adapt this to be an n*m topology circuit factory. Need to add circuit topology definitions to the test @@ -57,7 +57,7 @@ * * @todo The createCircuit methods on this and InteropCircuitFactory are going to be identical. This is because the * partitioning into senders and receivers is already done by the test decorators. Either eliminate these factories - * as unnesesary, or move the partitioning functionaility into the factories, in which case the test decorators + * as unnesesary, or move the partitioning functionality into the factories, in which case the test decorators * can probably be merged or eliminated. There is confusion over the placement of responsibilities between the * factories and the test decorators... although the test decorators may well do more than just circuit creation * in the future. For example, there may have to be a special decorator for test repetition that does one circuit Modified: incubator/qpid/branches/M2.1.1/java/systests/src/main/java/org/apache/qpid/test/framework/sequencers/InteropCircuitFactory.java URL: http://svn.apache.org/viewvc/incubator/qpid/branches/M2.1.1/java/systests/src/main/java/org/apache/qpid/test/framework/sequencers/InteropCircuitFactory.java?rev=598328&r1=598327&r2=598328&view=diff ============================================================================== --- incubator/qpid/branches/M2.1.1/java/systests/src/main/java/org/apache/qpid/test/framework/sequencers/InteropCircuitFactory.java (original) +++ incubator/qpid/branches/M2.1.1/java/systests/src/main/java/org/apache/qpid/test/framework/sequencers/InteropCircuitFactory.java Mon Nov 26 08:09:16 2007 @@ -41,10 +41,20 @@ import java.util.Properties; /** + * InteropCircuitFactory is a circuit factory that creates distributed test circuits. Given a set of participating + * test client nodes, it assigns one node to the SENDER role and one the RECEIVER role. + * * <p/><table id="crc"><caption>CRC Card</caption> * <tr><th> Responsibilities <th> Collaborations - * <tr><td> + * <tr><td> Create distributed circuits from pairs of test nodes, for interop style testing. * </table> + * + * @todo The partitioning of a set of nodes into sender and receiver roles is actually done by the interop test + * decorator. See the todo comment in FanOutCircuitFactory about merging the factories with the decorators, or + * more carefully dividing up responsibilities between them. + * + * @todo The squenceTest code is deprecated, but currently still used by the interop tests. It will be removed once it + * have been fully replaced by the default test procedure. */ public class InteropCircuitFactory extends BaseCircuitFactory { Modified: incubator/qpid/branches/M2.1.1/java/systests/src/main/java/org/apache/qpid/util/ConversationFactory.java URL: http://svn.apache.org/viewvc/incubator/qpid/branches/M2.1.1/java/systests/src/main/java/org/apache/qpid/util/ConversationFactory.java?rev=598328&r1=598327&r2=598328&view=diff ============================================================================== --- incubator/qpid/branches/M2.1.1/java/systests/src/main/java/org/apache/qpid/util/ConversationFactory.java (original) +++ incubator/qpid/branches/M2.1.1/java/systests/src/main/java/org/apache/qpid/util/ConversationFactory.java Mon Nov 26 08:09:16 2007 @@ -92,7 +92,7 @@ * * <p/><table id="crc"><caption>CRC Card</caption> * <tr><th> Responsibilities <th> Collaborations - * <tr><th> Associate messages to an ongoing conversation using correlation ids. + * <tr><td> Associate messages to an ongoing conversation using correlation ids. * <tr><td> Auto manage sessions for conversations. * <tr><td> Store messages not in a conversation in dead letter box. * </table>
