Save This Page
Home » jboss-5.0.0.CR1-src » org.jboss.ha.framework » interfaces » [javadoc | source]
    1   /*
    2     * JBoss, Home of Professional Open Source
    3     * Copyright 2005, JBoss Inc., and individual contributors as indicated
    4     * by the @authors tag. See the copyright.txt in the distribution for a
    5     * full listing of individual contributors.
    6     *
    7     * This is free software; you can redistribute it and/or modify it
    8     * under the terms of the GNU Lesser General Public License as
    9     * published by the Free Software Foundation; either version 2.1 of
   10     * the License, or (at your option) any later version.
   11     *
   12     * This software is distributed in the hope that it will be useful,
   13     * but WITHOUT ANY WARRANTY; without even the implied warranty of
   14     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
   15     * Lesser General Public License for more details.
   16     *
   17     * You should have received a copy of the GNU Lesser General Public
   18     * License along with this software; if not, write to the Free
   19     * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
   20     * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
   21     */
   22   package org.jboss.ha.framework.interfaces;
   23   
   24   import java.util.List;
   25   import java.util.Random;
   26   
   27   import org.jboss.invocation.Invocation;
   28   
   29   /**
   30    * LoadBalancingPolicy implementation that always fully randomly select its target
   31    * (without basing its decision on any historic).
   32    *
   33    * @author <a href="mailto:sacha.labourey@cogito-info.ch">Sacha Labourey</a>.
   34    * @version $Revision: 56192 $
   35    * @see org.jboss.ha.framework.interfaces.LoadBalancePolicy
   36    */
   37   public class RandomRobin implements LoadBalancePolicy
   38   {
   39      // Constants -----------------------------------------------------
   40      /** @since 1.1.2.3 */
   41      private static final long serialVersionUID = -3599638697906618428L;
   42      /** This needs to be a class variable or else you end up with multiple
   43       * Random numbers with the same seed when many clients lookup a proxy.
   44       */
   45      public static final Random localRandomizer = new Random (System.currentTimeMillis ());
   46   
   47      // Static --------------------------------------------------------
   48      
   49      // Constructors --------------------------------------------------
   50          
   51       // Public --------------------------------------------------------
   52      
   53      // LoadBalancePolicy implementation ----------------------------------------------
   54   
   55      public void init (HARMIClient father)
   56      {
   57         // do not use the HARMIClient in this policy
   58      }
   59   
   60      public Object chooseTarget (FamilyClusterInfo clusterFamily)
   61      {
   62         return chooseTarget(clusterFamily, null);
   63      }
   64      public Object chooseTarget (FamilyClusterInfo clusterFamily, Invocation routingDecision)
   65      {
   66         List targets = clusterFamily.getTargets ();
   67         int max = targets.size();
   68   
   69         if (max == 0)
   70            return null;
   71   
   72         int cursor = localRandomizer.nextInt (max);
   73         return targets.get(cursor);
   74      }
   75   
   76   }

Save This Page
Home » jboss-5.0.0.CR1-src » org.jboss.ha.framework » interfaces » [javadoc | source]