Main Page | Packages | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | Related Pages

CreateTableRoundRobin.java

00001 /**
00002  * C-JDBC: Clustered JDBC.
00003  * Copyright (C) 2002-2005 French National Institute For Research In Computer
00004  * Science And Control (INRIA).
00005  * Contact: c-jdbc@objectweb.org
00006  * 
00007  * This library is free software; you can redistribute it and/or modify it
00008  * under the terms of the GNU Lesser General Public License as published by the
00009  * Free Software Foundation; either version 2.1 of the License, or any later
00010  * version.
00011  * 
00012  * This library is distributed in the hope that it will be useful, but WITHOUT
00013  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
00014  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
00015  * for more details.
00016  * 
00017  * You should have received a copy of the GNU Lesser General Public License
00018  * along with this library; if not, write to the Free Software Foundation,
00019  * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
00020  *
00021  * Initial developer(s): Emmanuel Cecchet.
00022  * Contributor(s): Jean-Bernard van Zuylen
00023  */
00024 
00025 package org.objectweb.cjdbc.controller.loadbalancer.policies.createtable;
00026 
00027 import java.util.ArrayList;
00028 
00029 /**
00030  * Implements a round-robin strategy for <code>CREATE TABLE</code>
00031  * statements.
00032  * 
00033  * @author <a href="mailto:Emmanuel.Cecchet@inria.fr">Emmanuel Cecchet</a>
00034  * @author <a href="mailto:jbvanzuylen@transwide.com">Jean-Bernard van Zuylen
00035  *         </a>
00036  * @version 1.0
00037  */
00038 public class CreateTableRoundRobin extends CreateTableRule
00039 {
00040   private int index = 0;
00041 
00042   /**
00043    * Creates a new <code>CreateTableRoundRobin</code>.
00044    */
00045   public CreateTableRoundRobin()
00046   {
00047     super(CreateTablePolicy.ROUND_ROBIN);
00048   }
00049 
00050   /**
00051    * Creates a new <code>CreateTableRoundRobin</code>.
00052    * 
00053    * @param backendList <code>ArrayList</code> of <code>DatabaseBackend</code>
00054    */
00055   public CreateTableRoundRobin(ArrayList backendList)
00056   {
00057     super(CreateTablePolicy.ROUND_ROBIN, backendList);
00058   }
00059 
00060   /**
00061    * @see org.objectweb.cjdbc.controller.loadbalancer.policies.createtable.CreateTableRule#getBackends(ArrayList)
00062    */
00063   public ArrayList getBackends(ArrayList backends) throws CreateTableException
00064   {
00065     if (nbOfNodes == 0)
00066       return null;
00067     
00068     ArrayList clonedList = super.getBackends(backends);
00069     
00070     int clonedSize = clonedList.size();
00071 
00072     if (nbOfNodes == clonedSize)
00073       return clonedList;
00074     else if (nbOfNodes > clonedSize)
00075       throw new CreateTableException(
00076         "Asking for more backends ("
00077           + nbOfNodes
00078           + ") than available ("
00079           + clonedSize
00080           + ")");
00081 
00082     ArrayList result = new ArrayList(nbOfNodes);
00083 
00084     synchronized (this)
00085     { // index must be modified in mutual exclusion
00086       for (int i = 0; i < nbOfNodes; i++)
00087       {
00088         index = (index + 1) % clonedSize;
00089         if (index - i < 0)
00090           result.add(clonedList.remove(0));
00091         else
00092           result.add(clonedList.remove(index - i));
00093       }
00094     }
00095 
00096     return result;
00097   }
00098 
00099   /**
00100    * @see org.objectweb.cjdbc.controller.loadbalancer.policies.createtable.CreateTableRule#getInformation()
00101    */
00102   public String getInformation()
00103   {
00104     String s;
00105     if (tableName == null)
00106       s = "Default rule create table on ";
00107     else
00108       s = "Rule for table " + tableName + " create table on ";
00109 
00110     return s + nbOfNodes + " node(s) in round-robin from " + backendList;
00111   }
00112 }

Generated on Mon Apr 11 22:01:30 2005 for C-JDBC by  doxygen 1.3.9.1