User: juha
Date: 01/01/14 07:23:12
Modified: src/java/org/spydermq/selectors Selector.java
Log:
Missing feature impl: selectors ignored message header
fields as identifiers. With this fix selectors like
"JMSType='foobar'" should work correctly.
Revision Changes Path
1.4 +32 -5 spyderMQ/src/java/org/spydermq/selectors/Selector.java
Index: Selector.java
===================================================================
RCS file:
/products/cvs/ejboss/spyderMQ/src/java/org/spydermq/selectors/Selector.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- Selector.java 2000/12/29 22:24:42 1.3
+++ Selector.java 2001/01/14 15:23:12 1.4
@@ -16,8 +16,9 @@
* This class implements a Message Selector.
*
* @author Norbert Lataille ([EMAIL PROTECTED])
- *
- * @version $Revision: 1.3 $
+ * @author Juha Lindfors ([EMAIL PROTECTED])
+ *
+ * @version $Revision: 1.4 $
*/
public class Selector
{
@@ -43,6 +44,7 @@
public boolean test(SpyMessage mes) throws JMSException
{
+
try {
//Set the identifiers values
@@ -51,8 +53,12 @@
while (i.hasNext())
{
Identifier id=(Identifier)i.next();
-
+
Object find=mes.getObjectProperty(id.name);
+
+ if (find == null)
+ find = getHeaderFieldReferences(mes, id.name);
+
if (find==null) {
Log.log("Warning : missing property "+id.name);
id.value=null;
@@ -67,7 +73,7 @@
//Log.notice("SEL:"+id.name+" =>"+id.value);
}
}
-
+
//Compute the result of this operator
Object res;
@@ -76,7 +82,7 @@
} else if (result.getClass().equals(Operator.class)) {
res=((Operator)result).apply();
} else res=result;
-
+
if (res==null) return false;
if (!(res.getClass().equals(Boolean.class)))
throw new Exception("Bad object type");
@@ -90,4 +96,25 @@
}
}
+ // [JPL]
+ private Object getHeaderFieldReferences(SpyMessage msg, String idName) throws
JMSException {
+
+ // JMS 3.8.1.1 -- Message header field references are restricted to:
+ // JMSDeliveryMode, JMSPriority, JMSMessageID,
+ // JMSTimeStamp, JMSCorrelationID and JMSType
+ if (idName.equals("JMSDeliveryMode"))
+ return new Integer(msg.getJMSDeliveryMode());
+ else if (idName.equals("JMSPriority"))
+ return new Integer(msg.getJMSPriority());
+ else if (idName.equals("JMSMessageID"))
+ return msg.getJMSMessageID();
+ else if (idName.equals("JMSTimestamp"))
+ return new Long(msg.getJMSTimestamp());
+ else if (idName.equals("JMSCorrelationID"))
+ return new Integer(msg.getJMSCorrelationID());
+ else if (idName.equals("JMSType"))
+ return msg.getJMSType();
+ else
+ return null;
+ }
}