KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > activemq > broker > region > policy > StrictOrderDispatchPolicy


1 /**
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one or more
4  * contributor license agreements. See the NOTICE file distributed with
5  * this work for additional information regarding copyright ownership.
6  * The ASF licenses this file to You under the Apache License, Version 2.0
7  * (the "License"); you may not use this file except in compliance with
8  * the License. You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  */

18 package org.apache.activemq.broker.region.policy;
19
20
21 import java.util.Iterator JavaDoc;
22 import java.util.List JavaDoc;
23 import org.apache.activemq.broker.region.MessageReference;
24 import org.apache.activemq.broker.region.Subscription;
25 import org.apache.activemq.filter.MessageEvaluationContext;
26
27 /**
28  * Dispatch policy that causes every subscription to see messages in the same order.
29  *
30  * @org.apache.xbean.XBean
31  *
32  * @version $Revision$
33  */

34 public class StrictOrderDispatchPolicy implements DispatchPolicy {
35     
36     /**
37      * @param node
38      * @param msgContext
39      * @param consumers
40      * @return true if dispatched
41      * @throws Exception
42      * @see org.apache.activemq.broker.region.policy.DispatchPolicy#dispatch(org.apache.activemq.broker.region.MessageReference, org.apache.activemq.filter.MessageEvaluationContext, java.util.List)
43      */

44     public boolean dispatch(MessageReference node, MessageEvaluationContext msgContext, List JavaDoc consumers) throws Exception JavaDoc {
45         // Big synch here so that only 1 message gets dispatched at a time. Ensures
46
// Everyone sees the same order.
47
synchronized(consumers) {
48             int count = 0;
49             for (Iterator JavaDoc iter = consumers.iterator(); iter.hasNext();) {
50                 Subscription sub = (Subscription) iter.next();
51                 
52                 // Only dispatch to interested subscriptions
53
if (!sub.matches(node, msgContext))
54                     continue;
55                 
56                 sub.add(node);
57                 count++;
58             }
59             return count > 0;
60         }
61     }
62
63 }
64
Popular Tags