KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > objectweb > cjdbc > controller > loadbalancer > policies > createtable > CreateTableRandom


1 /**
2  * C-JDBC: Clustered JDBC.
3  * Copyright (C) 2002-2005 French National Institute For Research In Computer
4  * Science And Control (INRIA).
5  * Contact: c-jdbc@objectweb.org
6  *
7  * This library is free software; you can redistribute it and/or modify it
8  * under the terms of the GNU Lesser General Public License as published by the
9  * Free Software Foundation; either version 2.1 of the License, or any later
10  * version.
11  *
12  * This library is distributed in the hope that it will be useful, but WITHOUT
13  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
15  * for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public License
18  * along with this library; if not, write to the Free Software Foundation,
19  * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
20  *
21  * Initial developer(s): Emmanuel Cecchet.
22  * Contributor(s): Jean-Bernard van Zuylen
23  */

24
25 package org.objectweb.cjdbc.controller.loadbalancer.policies.createtable;
26
27 import java.util.ArrayList JavaDoc;
28 import java.util.Random JavaDoc;
29
30 /**
31  * Implements a random strategy for <code>CREATE TABLE</code> statements.
32  *
33  * @author <a HREF="mailto:Emmanuel.Cecchet@inria.fr">Emmanuel Cecchet</a>
34  * @author <a HREF="mailto:jbvanzuylen@transwide.com">Jean-Bernard van Zuylen
35  * </a>
36  * @version 1.0
37  */

38 public class CreateTableRandom extends CreateTableRule
39 {
40   private Random JavaDoc random = new Random JavaDoc();
41
42   /**
43    * Creates a new <code>CreateTableRandom</code>.
44    */

45   public CreateTableRandom()
46   {
47     super(CreateTablePolicy.RANDOM);
48   }
49
50   /**
51    * Creates a new <code>CreateTableRandom</code>.
52    *
53    * @param backendList <code>ArrayList</code> of <code>DatabaseBackend</code>
54    */

55   public CreateTableRandom(ArrayList JavaDoc backendList)
56   {
57     super(CreateTablePolicy.RANDOM, backendList);
58   }
59
60   /**
61    * @see org.objectweb.cjdbc.controller.loadbalancer.policies.createtable.CreateTableRule#getBackends(ArrayList)
62    */

63   public ArrayList JavaDoc getBackends(ArrayList JavaDoc backends) throws CreateTableException
64   {
65     if (nbOfNodes == 0)
66       return null;
67     
68     ArrayList JavaDoc clonedList = super.getBackends(backends);
69
70     int clonedSize = clonedList.size();
71
72     if (nbOfNodes == clonedSize)
73       return clonedList;
74     else if (nbOfNodes > clonedSize)
75       throw new CreateTableException(
76         "Asking for more backends ("
77           + nbOfNodes
78           + ") than available ("
79           + clonedSize
80           + ")");
81
82     ArrayList JavaDoc result = new ArrayList JavaDoc(nbOfNodes);
83
84     for (int i = 0; i < nbOfNodes; i++)
85       result.add(clonedList.remove(random.nextInt(clonedSize - i)));
86
87     return result;
88   }
89
90   /**
91    * @see org.objectweb.cjdbc.controller.loadbalancer.policies.createtable.CreateTableRule#getInformation()
92    */

93   public String JavaDoc getInformation()
94   {
95     String JavaDoc s;
96     if (tableName == null)
97       s = "Default rule create table on ";
98     else
99       s = "Rule for table " + tableName + " create table on ";
100
101     return s + nbOfNodes + " node(s) randomly from " + backendList;
102   }
103 }
104
Popular Tags