BullyElectionStrategy xref

View Javadoc

    1   /***
    2    *
    3    * Copyright 2004 Protique Ltd
    4    *
    5    * Licensed under the Apache License, Version 2.0 (the "License");
    6    * you may not use this file except in compliance with the License.
    7    * You may obtain a copy of the License at
    8    *
    9    * http://www.apache.org/licenses/LICENSE-2.0
    10   *
    11   * Unless required by applicable law or agreed to in writing, software
    12   * distributed under the License is distributed on an "AS IS" BASIS,
    13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    14   * See the License for the specific language governing permissions and
    15   * limitations under the License.
    16   *
    17   **/
    18
    19  package org.codehaus.activecluster.election.impl;
    20
    21  import org.codehaus.activecluster.Cluster;
    22  import org.codehaus.activecluster.Node;
    23  import org.codehaus.activecluster.election.ElectionStrategy;
    24
    25  import javax.jms.JMSException;
    26  import java.util.Iterator;
    27  import java.util.Map;
    28
    29  /***
    30   * <p><code>BullyElectionStrategy</code> Use a simple bully algorithm to elect a coordinator.
    31   * the member with the lowest lexicographical name is choosen</p>
    32   *
    33   * @version $Revision: 1.2 $
    34   */
    35  public class BullyElectionStrategy implements ElectionStrategy {
    36
    37      /***
    38       * Elect a coordinator.
    39       *
    40       * @param cluster
    41       * @return the elected Node
    42       * @throws JMSException
    43       */
    44      public Node doElection(Cluster cluster) throws JMSException {
    45          Node elect = cluster.getLocalNode();
    46
    47          Map nodes = cluster.getNodes();
    48          for (Iterator i = nodes.values().iterator(); i.hasNext();) {
    49              Node node = (Node) i.next();
    50              if (elect.getName().compareTo(node.getName()) < 0) {
    51                  elect = node;
    52              }
    53          }
    54
    55          return elect;
    56      }
    57
    58  }