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

CreateTableRandom.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 import java.util.Random;
00029 
00030 /**
00031  * Implements a random strategy for <code>CREATE TABLE</code> 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 CreateTableRandom extends CreateTableRule
00039 {
00040   private Random random = new Random();
00041 
00042   /**
00043    * Creates a new <code>CreateTableRandom</code>.
00044    */
00045   public CreateTableRandom()
00046   {
00047     super(CreateTablePolicy.RANDOM);
00048   }
00049 
00050   /**
00051    * Creates a new <code>CreateTableRandom</code>.
00052    * 
00053    * @param backendList <code>ArrayList</code> of <code>DatabaseBackend</code>
00054    */
00055   public CreateTableRandom(ArrayList backendList)
00056   {
00057     super(CreateTablePolicy.RANDOM, 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     for (int i = 0; i < nbOfNodes; i++)
00085       result.add(clonedList.remove(random.nextInt(clonedSize - i)));
00086 
00087     return result;
00088   }
00089 
00090   /**
00091    * @see org.objectweb.cjdbc.controller.loadbalancer.policies.createtable.CreateTableRule#getInformation()
00092    */
00093   public String getInformation()
00094   {
00095     String s;
00096     if (tableName == null)
00097       s = "Default rule create table on ";
00098     else
00099       s = "Rule for table " + tableName + " create table on ";
00100 
00101     return s + nbOfNodes + " node(s) randomly from " + backendList;
00102   }
00103 }

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