A null message selector indicates that there is no message selector for
the message consumer.
See:
-
Section
3.8.1.1,
Message Selector Syntax
Test cases:
-
org.exolab.jmscts.test.selector.EmptySelectorTest.testNull
If the value of a message selector is an empty string, the value is
treated as a null and indicates that there is no message selector for
the message consumer.
See:
-
Section
3.8.1.1,
Message Selector Syntax
Test cases:
-
org.exolab.jmscts.test.selector.EmptySelectorTest.testEmpty
The order of evaluation of a message selector is from left to right
within precedence level. Parentheses can be used to change this order.
See:
-
Section
3.8.1.1,
Message Selector Syntax
Test cases:
A string literal is enclosed in single quotes, with an included single
quote represented by doubled single quote; for example, 'literal' and
'literal''s'.
String literals use the Unicode character encoding.
See:
-
Section
3.8.1.1,
Message Selector Syntax
Test cases:
-
org.exolab.jmscts.test.selector.StringTest.testCaseComparison1
-
org.exolab.jmscts.test.se
lector.StringTest.testCaseComparison2
-
org.exolab.jmscts.test.selector.StringTest.testCaseComparison3
-
org.exolab.jmscts.test.selector.StringTest.testCheckSingleQuotes1
-
org.exolab.jmscts.test.selector.StringTest.testCheckSingleQuotes2
-
org.exolab.jmscts.test.selector.StringTest.testEquals
-
org.exolab.jmscts.test.selector.StringTest.testEqualsProperty
An exact numeric literal is a numeric value without a decimal point,
such as 57, -957, +62; numbers in the range of Java long are supported.
Exact numeric literals use the Java integer literal syntax.
See:
-
Section
3.8.1.1,
Message Selector Syntax
Test cases:
An approximate numeric literal is a numeric value in scientific notation,
such as 7E3 and -57.9E2, or a numeric value with a decimal, such as 7.,
-95.7, and +6.2; numbers in the range of Java double are supported.
Approximate literals use the Java floating-point literal syntax.
See:
-
Section
3.8.1.1,
Message Selector Syntax
Test cases:
-
org.exolab.jmscts.test.selector.FloatTest.testEquals1
-
org.exolab.jmscts.test.selector.FloatTest.testEquals2
-
org.exolab.jmscts.test.selector.FloatTest.testEquals3
-
org.exolab.jmscts.test.selector.FloatTest.testEquals4
-
org.exolab.jmscts.test.selector.FloatTest.testEquals5
-
org.exolab.jmscts.test.selector.FloatTest.testEquals6
-
org.exolab.jmscts.test.selector.FloatTest.testEqualsProperty
-
org.exolab.jmscts.test.selector.FloatTest.testGreaterEquals1
-
org.exolab.jmscts.test.selector.FloatTest.testGrea
terEquals2
-
org.exolab.jmscts.test.selector.FloatTest.testGreaterThan1
-
org.exolab.jmscts.test.selector.FloatTest.testGreaterThan2
-
org.exolab.jmscts.test.selector.FloatTest.testLessEquals1
-
org.exolab.jmscts.test.selector.FloatTest.testLessEquals2
-
org.exolab.jmscts.test.selector.FloatTest.testLessThan1
-
org.exolab.jmscts.test.selector.FloatTest.testLessThan2
-
org.exolab.jmscts.test.selector.FloatTest.testNotEquals1
-
org.exolab.jmscts.test.selector.FloatTest.testNotEquals2
-
org.exolab.jmscts.test.selector.FloatTest.testNotEquals3
-
org.exolab.jmscts.test.selector.FloatTest.testNotEqualsProperty
-
org.exolab.jmscts.test.selector.FloatTest.testNumericRange
-
org.exolab.jmscts.test.selector.FloatTest.testUnaryMinus1
-
org.exolab.jmscts.test.selector.FloatTest.testUnaryMinus2
-
org.exolab.jmscts.test.selector.FloatTest.testUnaryMinus3
A boolean literal is one of TRUE or FALSE.
See:
-
Section
3.8.1.1,
Message Selector Syntax
Test cases:
-
org.exolab.jmscts.test.selector.BooleanTest.testFalse
-
org.exolab.jmscts.test.selector.BooleanTest.testFalseCase
-
org.exolab.jmscts.test.selector.BooleanTest.testTrue
-
org.exolab.jmscts.test.selector.BooleanTest.testTrueCase
An identifier is an unlimited-length character sequence that must begin
with a Java identifier start character; all following characters must be
Java identifier part characters. An identifier start character is any
character for which the method Character.isJavaIdentifierStart returns
true. This includes '_' and '$'. An identifier part character is any
character for which the
method Character.isJavaIdentifierPart returns
true.
See:
-
Section
3.8.1.1,
Message Selector Syntax
Test cases:
-
org.exolab.jmscts.test.selector.IdentifierTest.testDollars
-
org.exolab.jmscts.test.selector.IdentifierTest.testInvalid1
-
org.exolab.jmscts.test.selector.IdentifierTest.testInvalid2
-
org.exolab.jmscts.test.selector.IdentifierTest.testUnderscores
Identifiers are case sensitive.
See:
-
Section
3.8.1.1,
Message Selector Syntax
Test cases:
-
org.exolab.jmscts.test.selector.IdentifierTest.testUserIdentifierCase
-
org.exolab.jmscts.test.selector.JMSPriorityTest.testJMSPriorityCase
Identifiers cannot be the words NULL, TRUE, FALSE, NOT, AND, OR, BETWEEN,
LIKE, IN, IS, or ESCAPE. These are case-insensitive reserved words.
See:
-
Section
3.8.1.1,
Message Selector Syntax
Test cases:
Reserved words are case-insensitive.
See:
-
Section
3.8.1.1,
Message Selector Syntax
Test cases:
-
org.exolab.jmscts.test.selector.BetweenOperatorTest.testBetween3
-
org.exolab.jmscts.test.selector.BetweenOperatorTest.testNotBetween4
-
org.exolab.jmscts.test.selector.AndOperatorTest.testAndCase
-
org.exolab.jmscts.test.selector.BooleanTest.testFalse
-
org.exolab.jmscts.test.selector.BooleanTest.testF
alseCase
-
org.exolab.jmscts.test.selector.BooleanTest.testTrue
-
org.exolab.jmscts.test.selector.BooleanTest.testTrueCase
The conversions that apply to the get methods for properties do not
apply when a property is used in a message selector expression. For
example, suppose you set a property as a string value, as in the
following:
myMessage.setStringProperty("NumberOfOrders", "2");
The following expression in a message selector would evaluate to false,
because a string cannot be used in an arithmetic expression:
"NumberOfOrders
>
1"
See:
-
Section
3.8.1.1,
Message Selector Syntax
Test cases:
Message header field references are restricted to JMSDeliveryMode,
JMSPriority, JMSMessageID, JMSTimestamp, JMSCorrelationID, and
JMSType. JMSMessageID, JMSCorrelationID, and JMSType values may be
null and if so are treated as a NULL value.
TODO - need to test some of these in code
See:
-
Section
3.8.1.1,
Message Selector Syntax
Test cases:
-
org.exolab.jmscts.test.selector.JMSTimestampTest.testJMSTimestamp1
-
org.exolab.jmscts.test.selector.JMSTimestampTest.testJMSTimestamp2
-
org.exolab.jmscts.test.selector.JMSTimestampTest.testJMSTimestamp3
-
org.exolab.jmscts.test.selector.JMSPriorityTest.testJMSPriority
-
org.exolab.jmscts.test.selector.JMSDeliveryModeTest.testJMSDeliveryMode
Any name beginning with 'JMSX' is a JMS defined property name
.
Any name beginning with 'JMS_' is a provider-specific property name.
Any name that does not begin with 'JMS' is an application-specific
property name.
NOTE: cannot realistically test JMS_ properties.
See:
-
Section
3.8.1.1,
Message Selector Syntax
Test cases:
Whitespace is the same as that defined for Java: space, horizontal tab,
form feed and line terminator.
See:
-
Section
3.8.1.1,
Message Selector Syntax
Test cases:
A selector is a conditional expression; a selector that evaluates to true
matches; a selector that evaluates to false or unknown does not match.
See:
-
Section
3.8.1.1,
Message Selector Syntax
Test cases:
-
org.exolab.jmscts.test.selector.JMSTimestampTest.testJMSTimestamp1
-
org.exolab.jmscts.test.selector.JMSTimestampTest.testJMSTimestamp2
-
org.exolab.jmscts.test.selector.JMSTimestampTest.testJMSTimestamp3
-
org.exolab.jmscts.test.selector.IdentifierTest.testDollars
-
org.exolab.jmscts.test.selector.IdentifierTest.testUnderscores
-
org.exolab.jmscts.test.selector.IdentifierTest.testUserIdentifierCase
-
org.exolab.jmscts.test.selector.StringTest.testCaseComparison1
-
org.exolab.jmscts.test.selector.StringTest.testCaseComparison2
-
org.exolab.jmscts.test.selector.StringTest.testCaseComparison3
-
org.exolab.jmscts.test.selector.StringTest.testCheckSingleQuotes1
-
org.exolab.jmscts.test.selector.StringTest.testCheckSingleQuotes2
-
org.exola
b.jmscts.test.selector.StringTest.testEquals
-
org.exolab.jmscts.test.selector.StringTest.testEqualsProperty
-
org.exolab.jmscts.test.selector.JMSPriorityTest.testJMSPriority
-
org.exolab.jmscts.test.selector.JMSPriorityTest.testJMSPriorityCase
-
org.exolab.jmscts.test.selector.BetweenOperatorTest.testBetween1
-
org.exolab.jmscts.test.selector.BetweenOperatorTest.testBetween2
-
org.exolab.jmscts.test.selector.BetweenOperatorTest.testBetween3
-
org.exolab.jmscts.test.selector.BetweenOperatorTest.testBetween4
-
org.exolab.jmscts.test.selector.BetweenOperatorTest.testBetween5
-
org.exolab.jmscts.test.selector.BetweenOperatorTest.testBetween6
-
org.exolab.jmscts.test.selector.BetweenOperatorTest.testNotBetween1
-
org.exolab.jmscts.test.selector.BetweenOperatorTest.testNotBetween2
-
org.exolab.jmscts.test.selector.BetweenOperatorTest.testNotBetween3
-
org.exolab.jmscts.test.selector.BetweenOperatorTest.testNotBetween4
-
org.exolab.jmscts.test.selector.BetweenOperatorTest.testNotBetween5
-
org.exolab.jmscts.test.selector.BetweenOperatorTest.testUnsetProperty1
-
org.exolab.jmscts.test.selector.BetweenOperatorTest.testUnsetProperty2
-
org.exolab.jmscts.test.selector.BetweenOperatorTest.testUnsetProperty3
-
org.exolab.jmscts.test.selector.FloatTest.testDivisionByZero
-
org.exolab.jmscts.test.selector.FloatTest.testDoubleNaN1
-
org.exolab.jmscts.test.selector.FloatTest.testDoubleNaN2
-
org.exolab.jmscts.test.selector.FloatTest.testEquals1
-
org.exolab.jmscts.test.selector.FloatTest.testEquals2
-
org.exolab.jmscts.test.selector.FloatTest.testEquals3
-
org.exolab.jmscts.test.selector.FloatTest.testEquals4
-
org.exolab.jmscts.test.selector.FloatTest.testEquals5
-
org.exolab.jmscts.test.selector.FloatTest.testEquals6
-
org.exolab.jmscts.test.selector.FloatTest.testEqualsProperty
-
org.exolab.jmscts.test.sel
ector.FloatTest.testFloatNaN1
-
org.exolab.jmscts.test.selector.FloatTest.testFloatNaN2
-
org.exolab.jmscts.test.selector.FloatTest.testGreaterEquals1
-
org.exolab.jmscts.test.selector.FloatTest.testGreaterEquals2
-
org.exolab.jmscts.test.selector.FloatTest.testGreaterThan1
-
org.exolab.jmscts.test.selector.FloatTest.testGreaterThan2
-
org.exolab.jmscts.test.selector.FloatTest.testLessEquals1
-
org.exolab.jmscts.test.selector.FloatTest.testLessEquals2
-
org.exolab.jmscts.test.selector.FloatTest.testLessThan1
-
org.exolab.jmscts.test.selector.FloatTest.testLessThan2
-
org.exolab.jmscts.test.selector.FloatTest.testNotEquals1
-
org.exolab.jmscts.test.selector.FloatTest.testNotEquals2
-
org.exolab.jmscts.test.selector.FloatTest.testNotEquals3
-
org.exolab.jmscts.test.selector.FloatTest.testNotEqualsProperty
-
org.exolab.jmscts.test.selector.FloatTest.testNumericRange
-
org.exolab.jmscts.test.selector.FloatTest.testUnaryMinus1
-
org.exolab.jmscts.test.selector.FloatTest.testUnaryMinus2
-
org.exolab.jmscts.test.selector.FloatTest.testUnaryMinus3
-
org.exolab.jmscts.test.selector.FloatTest.testUnsetProperty1
-
org.exolab.jmscts.test.selector.FloatTest.testUnsetProperty2
-
org.exolab.jmscts.test.selector.FloatTest.testUnsetProperty3
-
org.exolab.jmscts.test.selector.FloatTest.testUnsetProperty4
-
org.exolab.jmscts.test.selector.FloatTest.testUnsetProperty5
-
org.exolab.jmscts.test.selector.FloatTest.testUnsetProperty6
-
org.exolab.jmscts.test.selector.FloatTest.testUnsetProperty7
-
org.exolab.jmscts.test.selector.FloatTest.testUnsetProperty8
-
org.exolab.jmscts.test.selector.JMSDeliveryModeTest.testJMSDeliveryMode
-
org.exolab.jmscts.test.selector.AndOperatorTest.testAnd1
-
org.exolab.jmscts.test.selector.AndOperatorTest.testAnd2
-
org.exolab.jmscts.test.selector.AndOperatorTest.testAnd3
-
org.exolab.jmscts.test.selector.AndOperatorTest.testAnd4
-
org.exolab.jmscts.test.selector.AndOperatorTest.testAndCase
-
org.exolab.jmscts.test.selector.AndOperatorTest.testUnsetProperty1
-
org.exolab.jmscts.test.selector.AndOperatorTest.testUnsetProperty2
-
org.exolab.jmscts.test.selector.AndOperatorTest.testUnsetProperty3
-
org.exolab.jmscts.test.selector.AndOperatorTest.testUnsetProperty4
-
org.exolab.jmscts.test.selector.AndOperatorTest.testUnsetProperty5
-
org.exolab.jmscts.test.selector.BooleanTest.testEquals1
-
org.exolab.jmscts.test.selector.BooleanTest.testEquals2
-
org.exolab.jmscts.test.selector.BooleanTest.testFalse
-
org.exolab.jmscts.test.selector.BooleanTest.testFalseCase
-
org.exolab.jmscts.test.selector.BooleanTest.testNotEquals1
-
org.exolab.jmscts.test.selector.BooleanTest.testNotEquals2
-
org.exolab.jmscts.test.selector.BooleanTest.testTrue
-
org.exolab.jmscts.test.selector.BooleanTest.testTrueCase
Arithmetic expressions are composed of themselves, arithmetic
operations, identifiers with numeric values, and numeric literals.
See:
-
Section
3.8.1.1,
Message Selector Syntax
Test cases:
Conditional expressions are composed of themselves, comparison
operations, logical operations, identifiers with boolean values, and
boolean literals.
See:
-
Section
3.8.1.1,
Message Selector Syntax
Test cases:
Logical operators in order of precedence:
See:
-
Section
3.8.1.1,
Message Selector Syntax
Test cases:
Comparison operators in order of precedence:
-
=
-
>
-
>
=
-
<
-
<
=
-
<
>
(not equal)
See:
-
Section
3.8.1.1,
Message Selector Syntax
Test cases:
Arithmetic operators in order of precedence are:
-
+, - (unary)
-
*, / (multiplication and division)
-
+, - (addition and subtraction)
See:
-
Section
3.8.1.1,
Message Selector Syntax
Test cases:
Only like type values can be compared. One exception is that it is valid
to compare exact numeric values and approximate numeric values (the type
conversion required is defined by the rules of Java numeric promotion).
If the comparison of non-like type values is attempted, the value of the
operation is false. If either of the type values evaluates to NULL, the
value of the expression is unknown.
See:
-
Section
3.8.1.1,
Message Selector Syntax
Test cases:
Boolean comparison is restricted to = and
<
>
See:
-
Section
3.8.1.1,
Message Selector Syntax
Test cases:
-
org.exolab.jmscts.test.selector.BooleanTest.testEquals1
-
org.exolab.jmscts.test.selector.BooleanTest.testEquals2
-
org.exolab.jmscts.test.selector.BooleanTest.testGreaterEquals
-
org.exolab.jmscts.test.selector.BooleanTest.testGreaterThan
-
org.exolab.jmscts.test.selector.BooleanTest.testLessEquals
-
org.exolab.jmscts.test.selector.BooleanTest.testLessThan
-
org.exolab.jmscts.test.selector.BooleanTest.testNotEquals1
-
org.exolab.jmscts.test.selector.BooleanTest.testNotEquals2
String comparison is restricted to = and
<
>
Two strings are
equal if and only if they contain the same sequence of characters.
See:
-
Section
3.8.1.1,
Message Selector Syntax
Test cases:
-
org.exolab.jmscts.test.selector.StringTest.testCaseComparison1
-
org.exolab.jmscts.test.selector.StringTest.testCaseComparison2
-
org.exolab.jmscts.test.selector.StringTest.testCaseComparison3
-
org.exolab.jmscts.test.selector.StringTest.testCheckSingleQuotes1
-
org.exolab.jmscts.test.selector.StringTest.testCheckSingleQuotes2
-
org.exolab.jmscts.test.selector.StringTest.testEquals
-
org.exolab.jmscts.test.selector.StringTest.testEqualsProperty
-
org.exolab.jmscts.test.selector.StringTest.testGreaterEquals1
-
org.exolab.jmscts.test.selector.StringTest.testGreaterEquals2
-
org.exolab.jmscts.test.selector.StringTest.testGreaterEquals3
-
org.exolab.jmscts.test.selector.StringTest.testGreaterThan1
-
org.exolab.jmscts.test.selector.St
ringTest.testGreaterThan2
-
org.exolab.jmscts.test.selector.StringTest.testGreaterThan3
-
org.exolab.jmscts.test.selector.StringTest.testLessEquals1
-
org.exolab.jmscts.test.selector.StringTest.testLessEquals2
-
org.exolab.jmscts.test.selector.StringTest.testLessEquals3
-
org.exolab.jmscts.test.selector.StringTest.testLessThan1
-
org.exolab.jmscts.test.selector.StringTest.testLessThan2
-
org.exolab.jmscts.test.selector.StringTest.testLessThan3
BETWEEN expressions are of the form:
arithmetic-expr1 [NOT
]
BETWEEN arithmetic-expr2 and arithmetic-expr3
See:
-
Section
3.8.1.1,
Message Selector Syntax
Test cases:
-
org.exolab.jmscts.test.selector.BetweenOperatorTest.testBetween1
-
org.exolab.jmscts.test.selector.BetweenOperatorTest.testBetween2
-
org.exolab.jmscts.test.selector.BetweenOperatorTest.testBetween3
-
org.exolab.jmscts.test.selector.BetweenOperatorTest.testBetween4
-
org.exolab.jmscts.test.selector.BetweenOperatorTest.testBetween5
-
org.exolab.jmscts.test.selector.BetweenOperatorTest.testBetween6
-
org.exolab.jmscts.test.selector.BetweenOperatorTest.testNotBetween1
-
org.exolab.jmscts.test.selector.BetweenOperatorTest.testNotBetween2
-
org.exolab.jmscts.test.selector.BetweenOperatorTest.testNotBetween3
-
org.exolab.jmscts.test.selector.BetweenOperatorTest.testNotBetween4
-
org.exolab.jmscts.test.selector.BetweenOperatorTest.testNotBetween5
-
org.exolab.jmscts.test.selector.BetweenOperatorTest.testUnsetProperty1
-
org.exolab.jmscts.test.selector.BetweenOperatorTest.testUnsetProperty2
-
org.exolab.jmscts.test.selector.BetweenOperatorTest.testUnsetProperty3
IN expressions are of the form:
identifier [NOT
]
IN (string-literal1, string-literal2, ...)
where identifier has a String or NULL value.
If identifier is NULL, the value of the operation is unknown.
TODO - add tests where identifier is known to be a non-string value
See:
-
Section
3.8.1.1,
Message Selector Syntax
Test cases:
LIKE expressions are of the form:
identifier [NOT
]
LIKE pattern-value [ESCAPE escape-character
]
where identifier has a String value; pattern-value is a string literal
where '_' stands for any single character; '%' stands for any sequence of
characters, including the empty sequence, and all other characters stand
for themselves. The optional escape-character is a single-character
string literal whose character is used to escape the special meaning of
the '_' and '%' in pattern-value.
See:
-
Section
3.8.1.1,
Message Selector Syntax
Test cases:
IS expressions are of the form:
identifier IS [NOT
]
NULL
The IS NULL form tests for a null header field value or a missing
property value.
The IS NOT NULL form tests for the existence of a non-null header field
value or property value
The IS NULL and IS NOT NULL operators convert an unknown header or
property value into the respective TRUE and FALSE values.
See:
-
Section
3.8.1.1,
Message Selector Syntax
-
Section
3.8.1.2,
Null Values
Test cases:
JMS providers are required to verify the syntactic correctness of a
message selector at the time it is presented. A method providing a
syntactically incorrect selector must result in a JMS
InvalidSelectorException.
See:
-
Section
3.8.1.1,
Message Selector Syntax
Test cases:
-
org.exolab.jmscts.test.selector.JMSTimestampTest.testInvalid1
-
org.exolab.jmscts.test.selector.JMSTimestampTest.testInvalid2
-
org.exolab.jmscts.test.selector.JMSTimestampTest.testInvalid3
-
org.exolab.jmscts.test.selector.IdentifierTest.testInvalid1
-
org.exolab.jmscts.test.selector.IdentifierTest.testInvalid2
-
org.exolab.jmscts.test.selector.StringTest.testGreaterEquals1
-
org.exolab.jmscts.test.selector.StringTest.testGreaterEquals2
-
org.exolab.jmscts.test.selector.StringTest.testGreaterEquals3
-
org.exolab.jmscts.test.selector.StringTest.testGreaterThan1
-
org.exolab.jmscts.test.selector.StringTest.testGreaterThan2
-
org.exolab.jmscts.test.selector.StringTest.testGreaterThan3
-
org.exolab.jmscts.test.selector.StringTest.testInvalid1
-
org.exolab.jmscts.test.selector.StringTest.testInvalid2
-
org.exolab.jmscts.test.selector.StringTest.testInvalid3
-
org.exolab.jmscts.test.selector.StringTest.testInvalid4
-
org.exolab.jmscts.test.selector.StringTest.testInvalid5
-
org.exolab.jmscts.test.selector.StringTest.testInvalid6
-
org.exolab.jmscts.test.selector.StringTest.testLessEquals1
-
org.exolab.jmscts.test.selector.StringTest.testLessEquals2
-
org.exolab.jmscts.test.selector.StringTest.testLessEquals3
-
org.exolab.jmscts.test.selector.StringTest.testLessThan1
-
org.exolab.jmscts.test.selector.StringTest.testLessThan2
-
org.exolab.jmscts.tes
t.selector.StringTest.testLessThan3
-
org.exolab.jmscts.test.selector.JMSPriorityTest.testInvalid1
-
org.exolab.jmscts.test.selector.JMSPriorityTest.testInvalid2
-
org.exolab.jmscts.test.selector.BetweenOperatorTest.testInvalid1
-
org.exolab.jmscts.test.selector.BetweenOperatorTest.testInvalid2
-
org.exolab.jmscts.test.selector.BetweenOperatorTest.testInvalid3
-
org.exolab.jmscts.test.selector.BetweenOperatorTest.testInvalid4
-
org.exolab.jmscts.test.selector.BetweenOperatorTest.testInvalid5
-
org.exolab.jmscts.test.selector.BetweenOperatorTest.testInvalid6
-
org.exolab.jmscts.test.selector.BetweenOperatorTest.testInvalid7
-
org.exolab.jmscts.test.selector.BetweenOperatorTest.testInvalid8
-
org.exolab.jmscts.test.selector.BetweenOperatorTest.testInvalid9
-
org.exolab.jmscts.test.selector.FloatTest.testInvalid1
-
org.exolab.jmscts.test.selector.FloatTest.testInvalid2
-
org.exolab.jmscts.test.selector.FloatTest.testInvalid3
-
org.exolab.jmscts.test.selector.FloatTest.testInvalid4
-
org.exolab.jmscts.test.selector.FloatTest.testInvalid5
-
org.exolab.jmscts.test.selector.JMSDeliveryModeTest.testInvalid1
-
org.exolab.jmscts.test.selector.JMSDeliveryModeTest.testInvalid2
-
org.exolab.jmscts.test.selector.AndOperatorTest.testInvalidAnd1
-
org.exolab.jmscts.test.selector.AndOperatorTest.testInvalidAnd2
-
org.exolab.jmscts.test.selector.AndOperatorTest.testInvalidAnd3
-
org.exolab.jmscts.test.selector.BooleanTest.testGreaterEquals
-
org.exolab.jmscts.test.selector.BooleanTest.testGreaterThan
-
org.exolab.jmscts.test.selector.BooleanTest.testLessEquals
-
org.exolab.jmscts.test.selector.BooleanTest.testLessThan
Arithmetic operations must use Java numeric promotion.
See:
-
Section
3.8.1.1,
Message Selector Syntax
Test cases:
Header fields and property values may be NULL. Comparison or arithmetic
with an unknown value always yields an unknown value.
See:
-
Section
3.8.1.2,
Null Values
Test cases:
-
org.exolab.jmscts.test.selector.BetweenOperatorTest.testUnsetProperty1
-
org.exolab.jmscts.test.selector.BetweenOperatorTest.testUnsetProperty2
-
org.exolab.jmscts.test.selector.BetweenOperatorTest.testUnsetProperty3
-
org.exolab.jmscts.test.selector.FloatTest.testUnsetProperty1
-
org.exolab.jmscts.test.selector.FloatTest.testUnsetProperty2
-
org.exolab.jmscts.test.selector.FloatTest.testUnsetProperty3
-
org.exolab.jmscts.test.selector.FloatTest.testUnsetProperty4
-
org.exolab.jmscts.test.selector.FloatTest.testUnsetProperty5
-
org.exolab.jmscts.test.selector.FloatTest.testUnsetProperty6
-
org.exolab.jmscts.test.selector.FloatTest.testUnsetProperty7
-
org.exolab.jmscts.test.selector.FloatTest.testUnsetProperty8
-
org.exolab.jmscts.test.selector.AndOperatorTest.testUnsetProperty1
-
org.exolab.jmscts.test.selector.AndOperatorTest.testUnsetProperty2
-
org.exolab.jmscts.test.selector.AndOperatorTest.testUnsetProperty3
-
org.exolab.jmscts.test.selector.AndOperatorTest.testUnsetProperty4
-
org.exolab.jmscts.test.selector.AndOperatorTest.testUnsetProperty5
The AND operator evaluates as follows:
AND
|
T
|
F
|
U
|
T
|
T
|
F
|
U
|
F
|
F
|
F
|
F
|
U
|
U
|
F
|
U
|
See:
-
Section
3.8.1.2,
Null Values
-
Table 3-4
Test cases:
-
org.exolab.jmscts.test.selector.AndOperatorTest.testAnd1
-
org.exolab.jmscts.test.selector.AndOperatorTest.testAnd2
-
org.exolab.jmscts.test.selector.AndOperatorTest.testAnd3
-
org.exolab.jmscts.test.selector.AndOperatorTest.testAnd4
-
org.exolab.jmscts.test.selector.AndOperatorTest.testAndCase
-
org.exolab.jmscts.test.selector.AndOperatorTest.testUnsetProperty1
-
org.exolab.jmscts.test.selector.AndOperatorTest.testUnsetProperty2
-
org.exolab.jmscts.test.selector.AndOperatorTest.testUnsetProperty3
-
org.exolab.jmscts.test.selector.AndOperatorTest.testUnsetProperty4
-
org.exolab.jmscts.test.selector.AndOperatorTest.testUnsetProperty5
The OR operator evaluates as follows:
OR
|
T
|
F
|
U
|
T
|
T
|
T
|
T
|
F
|
T
|
F
|
U
|
U
|
T
|
U
|
U
|
See:
-
Section
3.8.1.2,
Null Values
-
Table 3-5
Test cases:
The NOT operator evaluates as follows:
See:
-
Section
3.8.1.2,
Null Values
-
Table 3-6
Test cases:
When used in a message selector JMSDeliveryMode is treated as having the
values 'PERSISTENT' and 'NON_PERSISTENT'.
See:
-
Section
3.8.1.3,
Special Notes
Test cases:
-
org.exolab.jmscts.test.selector.JMSDeliveryModeTest.testInvalid1
-
org.exolab.jmscts.test.selector.JMSDeliveryModeTest.testInvalid2
-
org.exolab.jmscts.test.selector.JMSDeliveryModeTest.testJMSDeliveryMode
Date and time values should use the standard Java long millis value.
When a date or time literal is included in a message selector, it should
be an integer literal for a millis value.
See:
-
Section
3.8.1.3,
Special Notes
Test cases:
-
org.exolab.jmscts.test.selector.JMSTimestampTest.testInvalid1
-
org.exolab.jmscts.test.selector.JMSTimestampTest.testInvalid2
-
org.exolab.jmscts.test.selector.JMSTimestampTest.testInvalid3
-
org.exolab.jmscts.test.selector.JMSTimestampTest.testJMSTimestamp1
-
org.exolab.jmscts.test.selector.JMSTimestampTest.testJMSTimestamp2
-
org.exolab.jmscts.test.selector.JMSTimestampTest.testJMSTimestamp3
-
org.exolab.jmscts.test.selector.JMSPriorityTest.testInvalid2
When creating a connection, a client may specify its credentials
as a name/password.
JMSSecurityException must be thrown when a provider rejects a
user name/password submitted by a clie
nt
See:
-
Section
4.3.1,
Authentication
-
Section
7.3,
Standard Exceptions
Test cases:
-
org.exolab.jmscts.test.connection.AuthTest.testInvalidQueueAuth
-
org.exolab.jmscts.test.connection.AuthTest.testInvalidTopicAuth
-
org.exolab.jmscts.test.connection.AuthTest.testQueueAuth
-
org.exolab.jmscts.test.connection.AuthTest.testTopicAuth
The facility to explicitly set a connection's client identifier is not a
mechanism for overriding the identifier that has been administratively
configured. It is provided for the case where no administratively
specified identifier exists. If one does exist, an attempt to change it
by setting it must throw an IllegalStateException.
See:
-
Section
4.3.2,
Client Identifier
Test cases:
-
org.exolab.jmscts.test.connection.ClientIdentifierTest.testSetOnCreation
If a client explicitly sets the client identifer it must do this
immediately after creating the connection and before any other action on
the connection is taken. After this point, setting the client identifier
is a programming error that should throw an IllegalStateException.
See:
-
Section
4.3.2,
Client Identifier
Test cases:
-
org.exolab.jmscts.test.connection.ClientIdentifierTest.testSetAfterClose
-
org.exolab.jmscts.test.connection.ClientIdentifierTest.testSetAfterCreateSession
-
org.exolab.jmscts.test.connection.ClientIdentif
ierTest.testSetAfterListenerRegistration
-
org.exolab.jmscts.test.connection.ClientIdentifierTest.testSetAfterStart
-
org.exolab.jmscts.test.connection.ClientIdentifierTest.testSetAfterStop
-
org.exolab.jmscts.test.connection.ClientIdentifierTest.testSetOnCreation
The client state identified by a client identifier can be in use by only
one client at a time. A JMS provider must prevent concurrently executing
clients from using it.
This prevention may take the form of JMSExceptions thrown when such use
is attempted; it may result in the offending client being blocked; or
some other solution. A JMS provider must insure that such attempted
'sharing' of an individual client state does not result in messages
being lost or doubly processed.
TODO - don't handle the blocked scenario
See:
-
Section
4.3.2,
Client Identifier
Test cases:
-
org.exolab.jmscts.test.connection.ClientIdentifierTest.testDuplicateClientID
When a Connection is created, it is in stopped mode. That means that no
messages are being delivered to it.
See:
-
Section
4.3.3,
Connection Setup
Test cases:
-
org.exolab.jmscts.test.connection.SendReceiveStopTest.testStoppedOnCreation
No messages are delivered by a connection to its client until it has been
started.
See:
-
Section
4.3.3,
Connection Setup
Test cases:
-
org.exolab.
jmscts.test.connection.SendReceiveStopTest.testStop
-
org.exolab.jmscts.test.connection.SendReceiveStopTest.testStoppedOnCreation
Stopping a connection has no effect on its ability to send messages.
See:
-
Section
4.3.4,
Pausing Delivery of Incoming Messages
Test cases:
-
org.exolab.jmscts.test.connection.SendReceiveStopTest.testStoppedOnCreation
A stop method call must not return until delivery of messages has paused.
This means a client can rely on the fact that none of its message
listeners will be called and all threads of control waiting for receive
to return will not return with a message until the connection is
restarted.
If MessageListeners are running when stop is invoked, stop must wait
until all of them have returned before it may return. While these
MessageListeners are completing, they must have the full services of the
connection available to them.
TODO - test behaviour of sending messages while a listener is active,
using a different session (i.e, not from the listener - undefined?)
TODO - add test where a thread stops a connection and another starts it
as the stop is in progress.
See:
-
Section
4.3.5,
Closing a Connection
Test cases:
-
org.exolab.jmscts.test.connection.ListenerTest.testConnectionStop
The receive timers for a stopped connection continue to advance, so
receives may time out and return a null message while the connection is
stopped.
See:
-
Section
4.3.5,
Closing a Connection
Test cases:
-
org.exolab.jmscts.test.connection.ReceiverTest.testConnectionRestart
-
org.exolab.jmscts.test.connection.ReceiverTest.testConnectionStop
Stopping a stopped connection is ignored.
See:
-
Section
4.3.5,
Closing a Connection
Test cases:
-
org.exolab.jmscts.test.connection.StopStartTest.testStopForStoppedConnection
Starting a started connection is ignored.
See:
-
Section
4.3.5,
Closing a Connection
Test cases:
-
org.exolab.jmscts.test.connection.StopStartTest.testStartForStartedConnection
A close terminates all pending message receives on the connection's
session's consumers. The receives may return with a message or null
depending on whether or not there was a message available at the time of
the close.
See:
-
Section
4.3.5,
Closing a Connection
Test cases:
-
org.exolab.jmscts.test.connection.ReceiverTest.testConnectionClose
If one or more of the connection's session's message listeners is
processing a message at the point when connection close is invoked, all
the facilities of the connection and its sessions must remain available
to those listeners until they
return control to the JMS provider.
See:
-
Section
4.3.5,
Closing a Connection
Test cases:
-
org.exolab.jmscts.test.connection.ListenerTest.testConnectionClose
Once a connection has been closed, an attempt to use it or its sessions
or their message consumers and producers must throw an
IllegalStateException (calls to the close method of these objects must
be ignored).
See:
-
Section
4.3.5,
Closing a Connection
Test cases:
-
org.exolab.jmscts.test.connection.ConnectionCloseTest.testExceptionOnClose
If a connection is closed, there is no need to close its constituent
objects. The connection close is sufficient to signal the JMS provider
that all resources for the connection should be released.
TODO: probably the only meaningful way to test this in a provider
independent fashion is to attempt to use a temporary destination created
by the closed connection, on another connection. This should throw
InvalidDestinationException?
See:
-
Section
4.3.5,
Closing a Connection
Test cases:
Closing a connection must roll back the transactions in progress on its
transacted sessions.
See:
-
Section
4.3.5,
Closing a Connection
Test cases:
-
org.exolab.jmscts.test.session.transacted.CloseTest.testRo
llbackForClosedConnection
Closing a connection does NOT force an acknowledgement of
client-acknowledged sessions.
See:
-
Section
4.3.5,
Closing a Connection
Test cases:
-
org.exolab.jmscts.test.session.clientack.CloseTest.testConnectionClose
It is valid to continue to use message objects created or received after
a connection has been closed with the exception of a received message's
acknowledge method.
Invoking the acknowledge method of a received message must throw an
IllegalStateException.
See:
-
Section
4.3.5,
Closing a Connection
Test cases:
-
org.exolab.jmscts.test.message.close.CloseTest.testCloseConnection
Closing a closed connection must NOT throw an exception.
See:
-
Section
4.3.5,
Closing a Connection
Test cases:
-
org.exolab.jmscts.test.connection.ConnectionCloseTest.testCloseForClosedConnection
Closing a transacted session must roll back its transaction in progress.
See:
-
Section
4.4.1,
Closing a Session
Test cases:
-
org.exolab.jmscts.test.session.transacted.CloseTest.testRollbackForClosedSession
Closing a client-acknowledged session does NOT force an acknowledge.
See:
-
Section
4.4.1,
Closing a Session
Test cases:
-
org.exolab.jmscts.test.session.clientack.CloseTest.testSessionClose
Once a session has been closed, an attempt to use it or its message
consumers and producers must throw an IllegalStateException (calls to
the close method of these objects must be ignored).
See:
-
Section
4.4.1,
Closing a Session
Test cases:
-
org.exolab.jmscts.test.session.transacted.RollbackTest.testClose
-
org.exolab.jmscts.test.session.CloseTest.testExceptionOnClose
It is valid to continue to use message objects created or received via
the session, with the exception of a received message'acknowledge method.
Invoking the acknowledge method of a received message must throw an
IllegalStateException.
See:
-
Section
4.4.1,
Closing a Session
Test cases:
-
org.exolab.jmscts.test.message.close.CloseTest.testCloseSession
Closing a closed session must NOT throw an exception.
See:
-
Section
4.4.1,
Closing a Session
Test cases:
-
org.exolab.jmscts.test.session.CloseTest.testCloseForClosedSession
A close terminates all pending message receive
s on the connection's
session's consumers. The receives may return with a message or null
depending on whether or not there was a message available at the time of
the close.
See:
-
Section
4.4.1,
Closing a Session
Test cases:
-
org.exolab.jmscts.test.session.ReceiverCloseTest.testSessionClose
If one or more of the connection's session's message listeners is
processing a message at the point when connection close is invoked, all
the facilities of the connection and its sessions must remain available
to those listeners until they return control to the JMS provider.
See:
-
Section
4.4.1,
Closing a Session
Test cases:
-
org.exolab.jmscts.test.session.ListenerCloseTest.testSessionClose
Each transacted session supports a single series of transactions.
Each transaction groups a set of produced messages and a set of consumed
messages into an atomic unit of work.
In effect, transactions organize a session's input message stream and
output message stream into series of atomic units. When a transaction
commits, its atomic unit of input is acknowledged and its associated
atomic unit of output is sent.
See:
-
Section
4.4.7,
Transactions
Test cases:
-
org.exolab.jmscts.test.session.transacted.CommitTest.testCommit
If a transacted session is rolled back, its produced messages are
destroyed and its
consumed messages are automatically recovered.
See:
-
Section
4.4.7,
Transactions
Test cases:
-
org.exolab.jmscts.test.session.transacted.RollbackTest.testRollback
With the DUPS_OK_ACKNOWLEDGE session acknowledgement mode, the session
lazily acknowledges the delivery of messages. This is likely to result
in the delivery of some duplicate messages if JMS fails, so it should be
used only by consumers that are tolerant of duplicate messages. Its
benefit is the reduction of session overhead achieved by minimizing the
work the session does to prevent duplicates.
See:
-
Section
4.4.11,
Message Acknowledgment
Test cases:
-
org.exolab.jmscts.test.session.DupsAckTest.testDupsOKAcknowledgement
With the AUTO_ACKNOWLEDGE session acknowledgement mode, the session
automatically acknowledges a client's receipt of a message when it has
either successfully returned from a call to receive or the
MessageListener it has called to process the message successfully
returns.
See:
-
Section
4.4.11,
Message Acknowledgment
Test cases:
-
org.exolab.jmscts.test.session.AutoAckTest.testAutoAcknowledgement
With the CLIENT_ACKNOWLEDGE session acknowledgement mode, a client
acknowledges a message by calling the message's acknowledge method.
Acknowledging a consumed message automatically acknowledges the receipt
of all messages that have been delivered by its session.
See:
-
Section
4.4.11,
Message Acknowledgment
Test cases:
-
org.exolab.jmscts.test.session.clientack.ClientAcknowledgeTest.testClientAcknowledge
-
org.exolab.jmscts.test.session.clientack.ClientAcknowledgeTest.testPartialClientAcknowledge
-
org.exolab.jmscts.test.session.clientack.RepublishTest.testRepublish
A session's recover method is used to stop a session and restart it with
its first unacknowledged message. In effect, the session's series of
delivered messages is reset to the point after its last acknowledged
message. The messages it now delivers may be different from those that
were originally delivered due to message expiration and the arrival of
higher-priority messages.
A session must set the redelivered flag of messages it redelivers due to
a recovery.
See:
-
Section
4.4.11,
Message Acknowledgment
-
Section
3.4.7,
JMSRedelivered
Test cases:
-
org.exolab.jmscts.test.session.clientack.ClientAcknowledgeTest.testClientAcknowledge
-
org.exolab.jmscts.test.session.clientack.ClientAcknowledgeTest.testPartialClientAcknowledge
-
org.exolab.jmscts.test.session.clientack.ClientAcknowledgeTest.testRecover
A TransactionInProgressException exception is thrown when an operation
is invalid because a transaction is in progress. For instance,
attempting to call Session.commit() when a session is part of a
distributed transaction.
See:
-
Section
7.3,
Standard Exceptions
Test cases:
A TransactionRolledBackException exception must be thrown when a call to
Session.commit() results in a rollback of the current transaction.
See:
-
Section
7.3,
Standard Exceptions
Test cases:
A message can be acknowledged after its message consumer has closed as
message acknowledgement is performed at the session level
TODO - need to test this for single message acknowledgement via
CLIENT_ACKWNOWLEDGE etc
See:
Test cases:
-
org.exolab.jmscts.test.session.transacted.CommitTest.testCommitForClosedEndpoint
A session serializes all asynchronous delivery of messages.
While the session is busy executing one listener, all other messages to
be asynchronously delivered to the session must wait.
See:
-
Section
4.4.14,
Serial Execution of Client Code
Test cases:
-
org.exolab.jmscts.test.session.MessageListenerTest.testSerialInvocation
Invoking commit() on a non-transacted session should throw
IllegalStateException
See:
Test cases:
-
org.exolab.jmscts.test.session.NonTransactedTest.testCommit
Invoking rollback() on a non-transacted session should throw
IllegalStateException
See:
Test cases:
-
org.exolab.jmscts.test.session.NonTransactedTest.testRollback
Invoking recover() on a transacted session should throw
IllegalStateException
See:
Test cases:
-
org.exolab.jmscts.test.session.transacted.RecoverTest.testRecover
If not specified, the default time-to-live for a producer equals
0
See:
Test cases:
-
org.exolab.jmscts.test.producer.ttl.QueueSenderTest.testDefaultTTL
-
org.exolab.jmscts.test.producer.ttl.QueueSenderTest.testDefaultTTLForAnonQueue
-
org.exolab.jmscts.test.producer.ttl.TopicPublisherTest.testDefaultTTL
-
org.exolab.jmscts.test.producer.ttl.TopicPublisherTest.testDefaultTTLForAnonTopic
A client can specify a default time-to-live for messages sent by a
message producer, to be used when a time-to-live isn't specified per
message.
Note:
the specification doesn't mention min or max
values for time-to-live, or if any exceptions will be thrown if
an invalid time-to-live is specified.
See:
Test cases:
-
org.exolab.jmscts.test.producer.ttl.QueueSenderTest.testSetTTL
-
org.exolab.jmscts.test.producer.ttl.QueueSenderTest.testSetTTLWithAnonQueue
-
org.exolab.jmscts.test.producer.ttl.TopicPublisherTest.testSetTTL
-
org.exolab.jmscts.test.producer.ttl.TopicPublisherTest.testSetTTLWithAnonTopic
When a message is sent, JMSDestination is ignored. After completion of
the send it holds the destination object specified by the sending method.
When a message is received, its destination value must be equivalent to
the value assigned when it was sent.
See:
-
Section
3.4.1,
JMSDestination
-
Section
3.4.11,
How Message Header Values Are Set
Test cases:
-
org.exolab.jmscts.test.message.header.JMSDestinationTest.testJMSDestination
-
org.exolab.jmscts.test.message.header.JMSDestinationTest.testJMSDestinationOnResend
When a message is sent, JMSMessageID is ignored. When the send method
returns it contains a provider-assigned value.
See:
-
Section
3.4.3,
JMSMessageID
-
Section
3.4.11,
How Message Header Values Are Set
Test cases:
-
org.exolab.jmscts.test.message.header.JMSMessageIDTest.testJMSMessageID
-
org.exolab.jmscts.test.message.header.JMSMessageIDTest.testJMSMessageIDAssignment
All JMSMessageID values must start with the prefix 'ID:'
See:
-
Section
3.4.3,
JMSMessageID
Test cases:
-
org.exolab.jmscts.test.message.header.JMSMessageIDTest.testJMSMessageIDPrefix
The JMSCorrelationID header field may be used to link one message with
another. It can contain a provider-specific message ID, an
application-specific string, or a provider-native byte[
]
value.
The application-specific string must not start with the 'ID:' prefix:
this is reserved for provider generated messages Ids.
See:
-
Section
2.10,
Request/Reply
-
Section
3.4.5,
JMSCorrelationID
-
Section
3.4.11,
How Message Header Values Are Set
Test cases:
-
org.exolab.jmscts.test.message.header.JMSCorrelationIDTest.testCorrelationID
-
org.exolab.jmscts.test.message.header.JMSCorrelationIDTest.testNullCorrelationID
If a provider supports the native concept of correlation ID, a JMS
client may need to assign specific JMSCorrelationID values to match
those expected by non-JMS clients. A byte[
]
value is used for this
purpose. JMS providers without native correlation ID values are not
required to support byte[
]
values - in this case
setJMSCorrelationIDAsBytes() and getJMSCorrelationIDAsBytes() may throw
java.lang.UnsupportedOperationException.
See:
-
Section
3.4.5,
JMSCorrelationID
Test cases:
-
org.exolab.jmscts.test.message.header.JMSCorrelationIDTest.testCorrelationIDAsBytes
If a client receives a message with the JMSRedelivered indicator set, it
is likely, but not guaranteed, that this message was delivered but not
acknowledged in the past. In general, a provider must set the
JMSRedelivered message header field of a message whenever it is
redelivering a message.
See:
-
Section
3.4.7,
JMSRedelivered
-
Section
3.4.11,
How Message Header Values Are Set
Test cases:
-
org.exolab.jmscts.test.session.clientack.SubscriberRedeliveredTest.testJMSRedelivered
-
org.exolab.jmscts.test.session.clientack.ClientAcknowledgeTest.testPartialClientAcknowledge
-
org.exolab.jmscts.test.session.clientack.ClientAcknowledgeTest.testRecover
The JMSRedelivered header field has no meaning on send and is left
unassigned by the sending method.
See:
-
Section
3.4.7,
JMSRedelivered
Test cases:
When a message is sent, its expiration time is calculated as the sum of
the time-to-live value specified on the send method and the current GMT
value. On return from the send method, the message's JMSExpiration header
field contains this value.
See:
-
Section
3.4.9,
JMSExpiration
Test cases:
-
org.exolab.jmscts.test.producer.ttl.QueueSenderTest.testDefaultTTL
-
org.exolab.jmscts.test.producer.ttl.QueueSenderTest.testDefaultTTLForAnonQueue
-
org.exolab.jmscts.test.producer.ttl.QueueSenderTest
.testSendWithTTL
-
org.exolab.jmscts.test.producer.ttl.QueueSenderTest.testSendWithTTLAndAnonQueue
-
org.exolab.jmscts.test.producer.ttl.QueueSenderTest.testSetTTL
-
org.exolab.jmscts.test.producer.ttl.QueueSenderTest.testSetTTLWithAnonQueue
-
org.exolab.jmscts.test.producer.ttl.TopicPublisherTest.testDefaultTTL
-
org.exolab.jmscts.test.producer.ttl.TopicPublisherTest.testDefaultTTLForAnonTopic
-
org.exolab.jmscts.test.producer.ttl.TopicPublisherTest.testPublishWithTTL
-
org.exolab.jmscts.test.producer.ttl.TopicPublisherTest.testPublishWithTTLAndAnonTopic
-
org.exolab.jmscts.test.producer.ttl.TopicPublisherTest.testSetTTL
-
org.exolab.jmscts.test.producer.ttl.TopicPublisherTest.testSetTTLWithAnonTopic
When a message is received its JMSExpiration header field contains the
expiration as that on send.
See:
-
Section
3.4.9,
JMSExpiration
Test cases:
-
org.exolab.jmscts.test.producer.ttl.QueueSenderTest.testDefaultTTL
-
org.exolab.jmscts.test.producer.ttl.QueueSenderTest.testDefaultTTLForAnonQueue
-
org.exolab.jmscts.test.producer.ttl.QueueSenderTest.testSendWithTTL
-
org.exolab.jmscts.test.producer.ttl.QueueSenderTest.testSendWithTTLAndAnonQueue
-
org.exolab.jmscts.test.producer.ttl.QueueSenderTest.testSetTTL
-
org.exolab.jmscts.test.producer.ttl.QueueSenderTest.testSetTTLWithAnonQueue
-
org.exolab.jmscts.test.producer.ttl.TopicPublisherTest.testDefaultTTL
-
org.exolab.jmscts.test.producer.ttl.TopicPublisherTest.testDefaultTTLForAnonTopic
-
org.exolab.jmscts.test.producer.ttl.TopicPublisherTest.testPublishWithTTL
-
org.exolab.jmscts.test.producer.ttl.TopicPublisherTest.testPublishWithTTLAndAnonTopic
-
org.exolab.jmscts.test.producer.ttl.TopicPub
lisherTest.testSetTTL
-
org.exolab.jmscts.test.producer.ttl.TopicPublisherTest.testSetTTLWithAnonTopic
If the time-to-live is specified as zero, expiration is set to zero to
indicate that the message does not expire.
See:
-
Section
3.4.9,
JMSExpiration
Test cases:
-
org.exolab.jmscts.test.producer.ttl.QueueSenderTest.testDefaultTTL
-
org.exolab.jmscts.test.producer.ttl.QueueSenderTest.testDefaultTTLForAnonQueue
-
org.exolab.jmscts.test.producer.ttl.ExpirationTest.testExpiration
-
org.exolab.jmscts.test.producer.ttl.ExpirationTest.testExpiration2DiffSubscribers
-
org.exolab.jmscts.test.producer.ttl.ExpirationTest.testExpiration2Subscribers
-
org.exolab.jmscts.test.producer.ttl.ExpirationTest.testSingleMessageExpiration
-
org.exolab.jmscts.test.producer.ttl.TopicPublisherTest.testDefaultTTL
-
org.exolab.jmscts.test.producer.ttl.TopicPublisherTest.testDefaultTTLForAnonTopic
When GMT is later than an undelivered message's expiration time, the
message should be destroyed.
Clients should not receive messages that have expired; however, JMS does
not guarantee that this will not happen.
See:
-
Section
3.4.9,
JMSExpiration
Test cases:
-
org.exolab.jmscts.test.producer.ttl.ExpirationTest.testExpiration
-
org.exolab.jmscts.test.producer.ttl.ExpirationTest.testExpiration2DiffSubscribers
-
org.exolab.jmscts.test.producer.ttl.ExpirationTest.testExpiration2Subscribers
-
org.exolab.jmscts.test.producer.ttl.ExpirationTest.testSingleMessageExpiration
The JMSReplyTo header field contains a Destination supplied by a client
when a message is sent. It is the destination where a reply to the
message should be sent.
Messages sent with a null JMSReplyTo value may be a notification of some
event or they may just be some data the sender thinks is of interest.
See:
-
Section
2.10,
Request/Reply
-
Section
3.4.6,
JMSReplyTo
Test cases:
-
org.exolab.jmscts.test.message.header.JMSReplyToTest.testReplyTo
When a message is created, its message body and properties may be set.
See:
-
Section
3.3,
JMS Messages
Test cases:
-
org.exolab.jmscts.test.message.readwrite.ReadWriteTest.testBytesReadableOnCreation
-
org.exolab.jmscts.test.message.readwrite.ReadWriteTest.testReadableOnCreation
-
org.exolab.jmscts.test.message.readwrite.ReadWriteTest.testStreamReadableOnCreation
-
org.exolab.jmscts.test.message.readwrite.ReadWriteTest.testWriteableOnCreation
An identifier is an unlimited-length character sequence that must begin
with a Java identifier start character; all following characters must be
Java identifier part characters. An identifier start character is any
character for which the method Character.isJavaIdentifierStart returns
true. An identifier part character is any character for which the
method Character.isJavaIdentifierPart returns true.
See:
-
Section
3.8.1.1,
Message Selector Syntax
Test cases:
-
org.exolab.jmscts.test.message.properties.IdentifierTest.testInvalidIdentifiers
-
org.exolab.jmscts.test.message.properties.IdentifierTest.testValidIdentifiers
Identifiers cannot be the words NULL, TRUE, FALSE, NOT, AND, OR, BETWEEN,
LIKE, IN, IS, or ESCAPE. These are case-insensitive reserved words.
See:
-
Section
3.8.1.1,
Message Selector Syntax
Test cases:
-
org.exolab.jmscts.test.message.properties.IdentifierTest.testReservedWords
Identifiers are case sensitive.
See:
-
Section
3.8.1.1,
Message Selector Syntax
Test cases:
-
org.exolab.jmscts.test.message.properties.IdentifierTest.testIdentifierCase
Property values can be boolean, byte, short, int, long, float, double,
and String.
See:
-
Section
3.5.2,
Property Values
Test cases:
-
org.exolab.jmscts.test.message.properties.PropertyTypeTest.testPropertyTypes
The setObjectProperty method accepts values of Boolean, Byte, Short,
Integer, Long, Float, Double and String. An attempt to use any other
class must throw a JMS MessageFormatException.
The getObjectProperty method only returns values of null, Boolean, Byte,
Short, Integer, Long, Float, Double and String. A null value is returned
if a property by the s
pecified name does not exist.
See:
-
Section
3.5.5,
Property Values as Objects
-
Section
3.5.8,
Nonexistent Properties
Test cases:
-
org.exolab.jmscts.test.message.properties.PropertyTypeTest.testObjectPropertyTypes
User properties may not be modified by the provider
See:
-
Section
Undefined,
An implied requirement
Test cases:
-
org.exolab.jmscts.test.message.properties.PropertyTest.testPropertyIntegrity
Properties support the following conversion table. The marked cases must
be supported. The unmarked cases must throw the JMS
MessageFormatException.
The String to numeric conversions must throw the
java.lang.NumberFormatException if the numeric's valueOf() method does
not accept the String value as a valid representation.
A value set as the row type can be read as the column type.
|
boolean
|
byte
|
short
|
int
|
long
|
float
|
double
|
String
|
boolean
|
X
|
|
|
|
|
|
|
X
|
byte
|
|
X
|
X
|
X
|
X
|
|
|
X
|
short
|
|
|
X
|
X
|
X
|
|
|
X
|
int
|
|
|
|
X
|
X
|
|
|
X
|
long
|
|
|
|
|
X
|
|
|
X
|
float
|
|
|
|
|
|
X
|
X
|
X
|
double
|
|
|
|
|
|
|
X
|
X
|
String
|
X
|
X
|
X
|
X
|
X
|
X
|
X
|
X
|
See:
-
Section
3.5.4,
Property Value Conversion
-
Table 3-2
Test cases:
-
org.exolab.jmscts.test.message.properties.PropertyConversionTest.testBoolean
-
org.exolab.jmscts.test.message.properties.PropertyConversionTest.testByte
-
org.exolab.jmscts.test.message.properties.PropertyConversionTest.testDouble
-
org.exolab.jmscts.test.message.properties.PropertyConversionTest.testFloat
-
org.exolab.jmscts.test.message.properties.PropertyConversionTest.testInt
-
org.exolab.jmscts.test.m
essage.properties.PropertyConversionTest.testLong
-
org.exolab.jmscts.test.message.properties.PropertyConversionTest.testShort
-
org.exolab.jmscts.test.message.properties.PropertyConversionTest.testStringBoolean
-
org.exolab.jmscts.test.message.properties.PropertyConversionTest.testStringByte
-
org.exolab.jmscts.test.message.properties.PropertyConversionTest.testStringDouble
-
org.exolab.jmscts.test.message.properties.PropertyConversionTest.testStringFloat
-
org.exolab.jmscts.test.message.properties.PropertyConversionTest.testStringInt
-
org.exolab.jmscts.test.message.properties.PropertyConversionTest.testStringLong
-
org.exolab.jmscts.test.message.properties.PropertyConversionTest.testStringObject
-
org.exolab.jmscts.test.message.properties.PropertyConversionTest.testStringShort
Attempting to read a null value as a Java primitive type must be treated
as calling the primitive's corresponding valueOf(String) conversion
method with a null value.
See:
-
Section
3.5.4,
Property Value Conversion
-
Section
3.5.8,
Nonexistent Properties
Test cases:
-
org.exolab.jmscts.test.message.properties.PropertyConversionTest.testNullToPrimitive
The order of property values is not defined. To iterate through a
message's property values, use getPropertyNames to retrieve a property
name enumeration and then use the various property get methods to
retrieve their values.
The getPropertyNames method does not return the names of the JMS standard
header fields.
See:
-
Section
3.5.6,
Property Iteration
Test cases:
-
org.exolab.jmscts.test.message.properties.PropertyTest.testPropertyIntegrity
-
org.exolab.jmscts.test.message.properties.PropertyTest.testPropertyNames
After sending a message, a client may retain and modify it without
affecting the message that has been sent. The same message object may be
sent multiple times.
See:
-
Section
3.9,
Access to sent messages
Test cases:
-
org.exolab.jmscts.test.message.copy.MessageCopyTest.testCopyOnSend
-
org.exolab.jmscts.test.message.readwrite.SendReceiveReadWriteTest.testWriteableOnSend
When a message is received its body is read only. If an attempt is made
to change them, a MessageNotWriteableException must be thrown.
If its properties or body are subsequently cleared, they are in the same
state as a newly created message.
TODO - need to test in transaction context
See:
-
Section
3.5.3,
Using Properties
-
Section
3.10,
Changing the Value of a Received Message
-
Section
3.11.2,
Read-Only Message Body
Test cases:
-
org.exolab.jmscts.test.message.readwrite.SendReceiveReadWriteTest.testReadOnlyOnReceipt
The clearBody method of Message resets the value of the message body to
the empty initial message value as set by the message type's create method
provided by Session. Clearing a message's body does not clear its property
entries. When
a message is cleared, its message body and properties may
be set.
See:
-
Section
3.11.1,
Clearing a message body
Test cases:
-
org.exolab.jmscts.test.message.readwrite.ReadWriteTest.testWriteableOnClear
-
org.exolab.jmscts.test.message.clear.RecoverClearTest.testRecover
-
org.exolab.jmscts.test.message.clear.RollbackClearTest.testRollback
-
org.exolab.jmscts.test.message.clear.SendReceiveClearTest.testBytesClearBodyOnReceipt
-
org.exolab.jmscts.test.message.clear.SendReceiveClearTest.testClearBodyOnReceipt
-
org.exolab.jmscts.test.message.clear.SendReceiveClearTest.testClearOnSend
-
org.exolab.jmscts.test.message.clear.SendReceiveClearTest.testStreamClearBodyOnReceipt
-
org.exolab.jmscts.test.message.clear.ClearTest.testBytesClearBody
-
org.exolab.jmscts.test.message.clear.ClearTest.testBytesClearBodyOnCreation
-
org.exolab.jmscts.test.message.clear.ClearTest.testClearBody
-
org.exolab.jmscts.test.message.clear.ClearTest.testClearBodyOnCreation
-
org.exolab.jmscts.test.message.clear.ClearTest.testStreamClearBody
-
org.exolab.jmscts.test.message.clear.ClearTest.testStreamClearBodyOnCreation
Clearing a message's properties leaves the message with an empty set of
properties. New property entries can then be both created and read.
Clearing a message's property entries does not clear the value of its
body.
See:
-
Section
3.5.7,
Clearing a Message's Property Values
Test cases:
-
org.exolab.jmscts.test.message.clear.RecoverClearTest.testRecover
-
org.exolab.jmscts.test.message.clear.RollbackClearTest.testRollback
-
org.exolab.jmscts.test
.message.clear.SendReceiveClearTest.testClearOnSend
-
org.exolab.jmscts.test.message.clear.SendReceiveClearTest.testClearPropertiesOnReceipt
-
org.exolab.jmscts.test.message.clear.ClearTest.testClearProperties
-
org.exolab.jmscts.test.message.clear.ClearTest.testClearPropertiesOnCreation
When the message is first created, the body of the message is in
write-only mode. If a client attempts to read a message in write-only
mode, a MessageNotReadableException is thrown.
See:
Test cases:
-
org.exolab.jmscts.test.message.readwrite.ReadWriteTest.testBytesReadableOnCreation
MessageEOFException must be thrown when an unexpected end of stream has
been reached when a message is being read.
See:
-
Section
7.3,
Standard Exceptions
Test cases:
-
org.exolab.jmscts.test.message.readwrite.ReadWriteTest.testBytesReadableOnCreation
The setObject method places a copy of the input in the message.
See:
-
Section
11.2.21,
JMS Source JavaDoc Clarifications
Test cases:
-
org.exolab.jmscts.test.message.object.ObjectMessageTest.testNull
When the message is first created, the body of the message is in
write-only mode. If a client
attempts to read a message in write-only
mode, a MessageNotReadableException is thrown.
See:
Test cases:
-
org.exolab.jmscts.test.message.readwrite.ReadWriteTest.testStreamReadableOnCreation
MessageEOFException must be thrown when an unexpected end of stream has
been reached when a message is being read.
See:
-
Section
7.3,
Standard Exceptions
Test cases:
-
org.exolab.jmscts.test.message.readwrite.ReadWriteTest.testStreamReadableOnCreation
If a read method of a BytesMessage throws a MessageFormatException or
NumberFormatException, the current position of the read pointer must not
be incremented. A subsequent read must be capable of recovering from the
exception by re-reading the data as a different type.
NOTE: With the exception of the readUTF() method, it is difficult to
conceive test cases for read methods.
-
A provider that implements BytesMessage using a DataInputStream
or equivalent, is likely to only throw MessageFormatException for
the readUTF() method.
The other likely exceptions are MessageEOFException for stream
overruns, and JMSException for any other error.
-
As BytesMessage does not support conversion, NumberFormatException
is unlikely to be thrown.
See:
-
Section
3.11.3,
Conversions Provided by StreamMessage and MapMessage
Test cases:
-
org.exolab.jmscts.test.message.bytes.BytesMessageTest.testReadFailure
If a read method of a StreamMessage throws a MessageFormatException or
NumberFormatException, the current position of the read pointer must not
be incremented. A subsequent read must be capable of recovering from the
exception by re-reading the data as a different type.
See:
-
Section
3.11.3,
Conversions Provided by StreamMessage and MapMessage
-
Table 3-7
Test cases:
-
org.exolab.jmscts.test.message.stream.StreamMessageTest.testReadFailure
A MapMessage is a message whose body contains a set of name-value pairs
where names are Strings and values are Java primitive types. The entries
can be accessed sequentially by enumerator or randomly by name. The
order of the entries is undefined.
See:
-
Section
3.11,
JMS Message Body
Test cases:
-
org.exolab.jmscts.test.message.map.MapMessageTest.testMap
MapMessage supports the following conversion table.
The marked cases must be supported. The unmarked cases must throw a JMS
MessageFormatException. The String to numeric conversions must throw a
java.lang.NumberFormatException if the numeric's valueOf() method does
not accept the String value as a valid representation.
MapMessage must implement the String to boolean conversion as
specified by the valueOf(Stri
ng) method of Boolean as defined by the
Java language.
A value written as the row type can be read as the column type.
|
boolean
|
byte
|
short
|
char
|
int
|
long
|
float
|
double
|
String
|
byte[
]
|
boolean
|
X
|
|
|
|
|
|
|
|
X
|
|
byte
|
|
X
|
X
|
|
X
|
X
|
|
|
X
|
|
short
|
|
|
X
|
|
X
|
X
|
|
|
X
|
|
char
|
|
|
|
X
|
|
|
|
|
X
|
|
int
|
|
|
|
|
X
|
X
|
|
|
X
|
|
long
|
|
|
|
|
|
X
|
|
|
X
|
|
float
|
|
|
|
|
|
|
X
|
X
|
X
|
|
double
|
|
|
|
|
|
|
|
X
|
X
|
|
String
|
X
|
X
|
X
|
|
X
|
X
|
X
|
X
|
X
|
|
byte[
]
|
|
|
|
|
|
|
|
|
|
X
|
See:
-
Section
3.11.3,
Conversions Provided by StreamMessage and MapMessage
-
Table 3-7
Test cases:
-
org.exolab.jmscts.test.message.map.MapMessageTest.testConversion
-
org.exolab.jmscts.test.message.map.MapMessageTest.testInvalidConversion
-
org.exolab.jmscts.test.message.map.MapMessageTest.testInvalidNumericConversion
-
org.exolab.jmscts.test.message.map.MapMessageTest.testStringConversion
For MapMessage, attempting to read a null value as a Java primitive
type must be treated as calling the primitive's corresponding
valueOf(String) conversion method with a null value. Since char does not
support a String conversion, attempting to read a null value as a char
must throw NullPointerException.
See:
-
Section
3.11.3,
Conversions Provided by StreamMessage and MapMessage
Test cases:
-
org.exolab.jmscts.test.message.map.MapMessageTest.testNullConversion
Getting a MapMessage field for a field name that has not been set is
handled as if the field exists with a null value.
See:
-
Section
3.11.3,
Conversions Provided by StreamMessage and MapMessage
Test cases:
-
org.exolab.jmscts.test.message.map.MapMessageTest.testUnset
StreamMessage supports the following conversion table.
The marked cases must be supported. The unmarked cases must throw a JMS
MessageFormatException. The String to numeric conversions must throw a
java.lang.NumberFormatException if the numeric's valueOf() method does
not accept the String value as a valid representation.
StreamMessage must implement the String to boolean conversion as
specified by the valueOf(String) method of Boolean as defined by the
Java language.
A value written as the row type can be read as the column type.
|
boolean
|
byte
|
short
|
char
|
int
|
long
|
float
|
double
|
String
|
byte[
]
|
boolean
|
X
|
|
|
|
|
|
|
|
X
|
|
byte
|
|
X
|
X
|
|
X
|
X
|
|
|
X
|
|
short
|
|
|
X
|
|
X
|
X
|
|
|
X
|
|
char
|
|
|
|
X
|
|
|
|
|
X
|
|
int
|
|
|
|
|
X
|
X
|
|
|
X
|
|
long
|
|
|
|
|
|
X
|
|
|
X
|
|
float
|
|
|
|
|
|
|
X
|
X
|
X
|
|
double
|
|
|
|
|
|
|
|
X
|
X
|
|
String
|
X
|
X
|
X
|
|
X
|
X
|
X
|
X
|
X
|
|
byte[
]
|
|
|
|
|
|
|
|
|
|
X
|
See:
-
Section
3.11.3,
Conversions Provided by StreamMessage and MapMessage
-
Table 3-7
Test cases:
-
org.exolab.jmscts.test.message.stream.StreamMessageTest.testConversion
-
org.exolab.jmscts.test.message.stream.StreamMessageTest.testInvalidNumericConversion
-
org.exolab.jmscts.test.message.stream.StreamMessageTest.testStringConversion
MapMessage field names are case sensitive.
NOTE: the specification does not explicitly mention this requirement,
but it is in keeping with property name requirements.
See:
-
Section
Undefined,
An implied requirement
Test cases:
-
org.exolab.jmscts.test.message.map.MapMessageTest.testCase
For StreamMessage, attempting to read a null value as a Java primitive
type must be treated as calling the primitive's corresponding
valueOf(String) conversion method with a null value. Since char does not
support a String conversion, attempting to read a null value as a char
must throw NullPointerException.
NOTE: the specification is not explicit on the behaviour of invoking
writeBytes() or writeString() with a null value, but an acceptable policy
is to throw a NullPointerException. This is in keeping with the behaviour
of DataOutputStream.
See:
-
Section
3.11.3,
Conversions Provided by StreamMessage and MapMessage
Test cases:
-
org.exolab.jmscts.test.message.stream.StreamMessageTest.testNull
A provider must be prepared to accept, from a client, a
message whose implementation is not one of its own.
A message with a 'foreign' implementation may not be handled as
efficiently as a provider's own implementation; however, it must be
handled.
Note that if the foreign message implementation contains a
JMSReplyTo
header field that is set to a foreign destination
implementation, the provider is not required to handle or preserve the
value of this field.
See:
-
Section
3.12,
Provider Implementations of JMS Message Interfaces
Test cases:
-
org.exolab.jmscts.test.message.foreign.ForeignMessageTest.test
The JMS message interfaces provide read/get methods for accessing
objects in a message body. All of these methods must be implemented to
return a copy of the accessed objects.
See:
-
Section
3.12,
Provider Implementations of JMS Message Interfaces
Test cases:
-
org.exolab.jmscts.test.message.copy.MapMessageTest.testByteArrayCopy
-
org.exolab.jmscts.test.message.copy.MapMessageTest.testPartialSetBytesCopy
-
org.exolab.jmscts.test.message.copy.MapMessageTest.testSetBytesCopy
-
org.exolab.jmscts.test.message.copy.BytesMessageTest.testPartialWriteBytesCopy
-
org.exolab.jmscts.test.message.copy.BytesMessageTest.testWriteBytesCopy
-
org.exolab.jmsct
s.test.message.copy.ObjectMessageTest.testByteArrayCopy
-
org.exolab.jmscts.test.message.copy.ObjectMessageTest.testCopyAtConstruction
-
org.exolab.jmscts.test.message.copy.ObjectMessageTest.testCustomObjectCopy
-
org.exolab.jmscts.test.message.copy.StreamMessageTest.testByteArrayCopy
-
org.exolab.jmscts.test.message.copy.StreamMessageTest.testPartialWriteBytesCopy
-
org.exolab.jmscts.test.message.copy.StreamMessageTest.testWriteBytesCopy
The JMS message interfaces provide read/get methods for accessing
message object properties. All of these methods must be implemented to
return a copy of the accessed objects.
See:
-
Section
3.12,
Provider Implementations of JMS Message Interfaces
Test cases:
When clearBody is called on a BytesMessage, the body of the message is in
write-only mode.
If clearBody is called on a message in read-only mode, the message body
is cleared and the message is in write-only mode.
See:
Test cases:
-
org.exolab.jmscts.test.message.clear.SendReceiveClearTest.testBytesClearBodyOnReceipt
-
org.exolab.jmscts.test.message.clear.ClearTest.testBytesClearBody
-
org.exolab.jmscts.test.message.clear.ClearTest.testBytesClearBodyOnCreation
Refer to javadoc
See:
Test cases:
-
org.exolab.jmscts.test.message.bytes.BytesMessageTest.testReadBytes
-
org.exolab.jmscts.test.message.bytes.BytesMessageTest.testReadBytesForEmptyStream1
Refer to javadoc
See:
Test cases:
-
org.exolab.jmscts.test.message.bytes.BytesMessageTest.testPartialReadBytes1
-
org.exolab.jmscts.test.message.bytes.BytesMessageTest.testPartialReadBytes2
-
org.exolab.jmscts.test.message.bytes.BytesMessageTest.testReadBytesForEmptyStream2
-
org.exolab.jmscts.test.message.bytes.BytesMessageTest.testReadBytesIndexException
Refer to javadoc
See:
Test cases:
-
org.exolab.jmscts.test.message.stream.StreamMessageTest.testWriteObject
-
org.exolab.jmscts.test.message.bytes.BytesMessageTest.testInvalidObject
-
org.exolab.jmscts.test.message.bytes.BytesMessageTest.testWriteObject
Refer to javadoc
See:
Test cases:
-
org.exolab.jmscts.test.message.map.MapMessageTest.testInvalidObject
-
org.exolab.jmscts.test.message.map.MapMessageTest.testSetObject
Refer to javadoc
See:
Test cases:
-
org.exolab.jmscts.test.message.map.MapMessageTest.testItemExists
Refer to javadoc
See:
Test cases:
-
org.exolab.jmscts.test.message.map.MapMessageTest.testGetMapNames
When clearBody is called on a StreamMessage, the body of the message is
in write-only mode.
If clearBody is called on a message in read-only mode, the message body
is cleared and the message is in write-only mode.
See:
Test cases:
-
org.exolab.jmscts.test.message.clear.SendReceiveClearTest.testStreamClearBodyOnReceipt
-
org.exolab.jmscts.test.message.clear.ClearTest.testStreamClearBo
dy
-
org.exolab.jmscts.test.message.clear.ClearTest.testStreamClearBodyOnCreation
Refer to javadoc
See:
Test cases:
-
org.exolab.jmscts.test.message.stream.StreamMessageTest.testInvalidObject
Refer to javadoc
See:
Test cases:
-
org.exolab.jmscts.test.message.stream.StreamMessageTest.testReadWriteBytes
-
org.exolab.jmscts.test.message.stream.StreamMessageTest.testWriteBytes
Refer to javadoc
See:
Test cases:
-
org.exolab.jmscts.test.message.stream.StreamMessageTest.testReadWriteBytes
-
org.exolab.jmscts.test.message.stream.StreamMessageTest.testWriteBytes
Refer to javadoc
See:
Test cases:
-
org.exolab.jmscts.test.message.stream.StreamMessageTest.testFullReadBytes
-
org.exolab.jmscts.test.message.stream.StreamMessageTest.testIncrementalReadBytes
-
org.exolab.jmscts.test.message.stream.StreamMessageTest.testPartialReadBytes
-
org.exolab.jmscts.test.message.stream.StreamMessageTest.testReadBytesClearBody1
-
org.exolab.jmscts.test.message.stream.StreamMessageTest.testReadBytesClearBody2
-
org.exolab.jmscts.test.message.stream.StreamMessageTest.testReadBytesReset1
-
org.exolab.jmscts.test.message.stream.StreamMessageTest.testReadBytesReset2
JMSXGroupID and JMSXGroupSeq are standard properties clients should use
if they want to group messages. All providers must support them.
JMSXGroupID is a string property. JMSXGroupSeq is an int property,
starting at 1. @todo - need to verify if the range is applicable
See:
-
Section
3.5.9,
JMS Defined Properties
-
Table 3-3
Test cases:
-
org.exolab.jmscts.test.message.properties.JMSXGroupTest.testJMSGroupSeq
-
org.exolab.jmscts.test.message.properties.JMSXGroupTest.testJMSGroupSeqRange
-
org.exolab.jmscts.test.message.properties.JMSXGroupTest.testJMSXGroupID
JMS reserves the 'JMSX' property name prefix for JMS defined properties.
Unless noted otherwise, support for these properties is optional. The
Enumeration ConnectionMetaData.getJMSXPropertyNames() method returns the
names of the JMSX properties supported by a connection.
Properties that may only be set by the provider include JMSXUs
erID,
JMSXAppID, JMSXDeliveryCount, JMSXProducerTXID, JMSXConsumerTXID,
JMSXRcvTimestamp and JMSXState.
See:
-
Section
3.5.9,
JMS Defined Properties
-
Table 3-3
Test cases:
-
org.exolab.jmscts.test.message.properties.IdentifierTest.testJMSXProviderIdentifiers
ConnectionMetaData provides a list of the JMS defined property names
supported by the connection. This must include JMSXGroupID and
JMSXGroupSeq
See:
-
Section
3.5.9,
JMS Defined Properties
Test cases:
-
org.exolab.jmscts.test.connection.MetaDataTest.testMetaData
In some cases, a connection may both publish and subscribe to a topic.
The subscriber NoLocal attribute allows a subscriber to inhibit the
delivery of messages published by its own connection.
See:
-
Section
6.11,
Topic Subscriber
Test cases:
-
org.exolab.jmscts.test.topic.NoLocalTest.testNoLocal
If a client needs to receive all the messages published on a topic,
including the ones published while the subscriber is inactive, it uses a
durable TopicSubscriber. JMS retains a record of this durable
subscription and insures that all messages from the topic's publishers
are retained until either they are acknowledged by this durable
subscriber or they have expired.
See:
-
Section
6.11.1,
Durable Topic Subscriber
-
Section
6.3,
Durable Subscription
Test cases:
-
org.exolab.jmscts.test.topic.DurableSubscriberTest.testDurableSubscriber
Sessions with durable subscribers must always provide the same client
identifier. In addition, each client must specify a name that uniquely
identifies (within client identifier) each durable subscription it
creates.
See:
-
Section
6.11.1,
Durable Topic Subscriber
Test cases:
Only one session at a time can have a TopicSubscriber for a
particular durable subscription.
See:
-
Section
6.11.1,
Durable Topic Subscriber
-
Section
4.3.2,
Client Identifier
Test cases:
-
org.exolab.jmscts.test.topic.DuplicateDurableSubscriberTest.testDuplicateSubscriber
-
org.exolab.jmscts.test.topic.DuplicateDurableSubscriberTest.testDuplicateSubscriberPerSession
A client can change an existing durable subscription by creating a
durable TopicSubscriber with the same name and a new topic and/or
message selector. Changing a durable subscription is equivalent to
deleting and recreating it.
See:
-
Section
6.11.1,
Durable Topic Subscriber
Test cases:
-
org.exolab.jmscts.test.topic.DurableSubscriberTest.testChangeSubscription
TopicSessions provide the unsubscribe method for deleting a durable
subscription created by their client. This deletes the state being
maintained on behalf of the subscriber by its provider.
It is erroneous for a client to delete a durable subscription while it
has an active TopicSubscriber for it or while a message received by it
is part of a current transaction or has not been acknowledged in the
session.
(Note: this last sentence suggests that a provider doesn't need to check
that a client can remove a subscription)
See:
-
Section
6.11.1,
Durable Topic Subscriber
Test cases:
-
org.exolab.jmscts.test.topic.DurableSubscriberTest.testUnsubscribe
For application servers, connections provide a special facility for
creating a ConnectionConsumer. The messages it is to consume are
specified by a destination and a message selector. In addition, a
ConnectionConsumer must be given a ServerSessionPool to use for
processing its messages. A maxMessages value is specified to limit the
number of messages a ConnectionConsumer may load at one time into a
ServerSession's session.
See:
-
Section
8.2.4,
ConnectionConsumer
Test cases:
-
org.exolab.jmscts.test.asf.ConnectionConsumerTest.test
If a destination is removed via the provider's administration interface,
and subsequently recreated, all messages to that destination must also
be removed.
See:
-
Section
Undefined,
An implied requirement
Test cases: