KickJava   Java API By Example, From Geeks To Geeks.

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


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
29 /**
30  * Implements a round-robin strategy for <code>CREATE TABLE</code>
31  * 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 CreateTableRoundRobin extends CreateTableRule
39 {
40   private int index = 0;
41
42   /**
43    * Creates a new <code>CreateTableRoundRobin</code>.
44    */

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

55   public CreateTableRoundRobin(ArrayList JavaDoc backendList)
56   {
57     super(CreateTablePolicy.ROUND_ROBIN, 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     synchronized (this)
85     { // index must be modified in mutual exclusion
86
for (int i = 0; i < nbOfNodes; i++)
87       {
88         index = (index + 1) % clonedSize;
89         if (index - i < 0)
90           result.add(clonedList.remove(0));
91         else
92           result.add(clonedList.remove(index - i));
93       }
94     }
95
96     return result;
97   }
98
99   /**
100    * @see org.objectweb.cjdbc.controller.loadbalancer.policies.createtable.CreateTableRule#getInformation()
101    */

102   public String JavaDoc getInformation()
103   {
104     String JavaDoc s;
105     if (tableName == null)
106       s = "Default rule create table on ";
107     else
108       s = "Rule for table " + tableName + " create table on ";
109
110     return s + nbOfNodes + " node(s) in round-robin from " + backendList;
111   }
112 }
113
Popular Tags