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

ErrorCheckingPolicy.java

00001 /**
00002  * C-JDBC: Clustered JDBC.
00003  * Copyright (C) 2002-2004 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): _______________________
00023  */
00024 
00025 package org.objectweb.cjdbc.controller.loadbalancer.policies.errorchecking;
00026 
00027 import java.util.ArrayList;
00028 
00029 import org.objectweb.cjdbc.common.xml.DatabasesXmlTags;
00030 
00031 /**
00032  * Defines the policy to adopt for error checking.
00033  * 
00034  * @author <a href="mailto:Emmanuel.Cecchet@inria.fr">Emmanuel Cecchet</a>
00035  * @version 1.0
00036  */
00037 public abstract class ErrorCheckingPolicy
00038 {
00039   /** Pickup backends randomly. */
00040   public static final int RANDOM = 0;
00041 
00042   /** Backends are chosen using a round-robin algorithm. */
00043   public static final int ROUND_ROBIN = 1;
00044 
00045   /** Request is sent to all backends. */
00046   public static final int ALL = 2;
00047 
00048   /** Number of nodes that are involved in error-checking per request. */
00049   protected int nbOfNodes = 0;
00050 
00051   protected int policy;
00052 
00053   /**
00054    * Creates a new <code>CreateTableRule</code>.
00055    * 
00056    * @param policy implemented policy
00057    * @param numberOfNodes number of nodes to use to check for errors on a query
00058    */
00059   public ErrorCheckingPolicy(int policy, int numberOfNodes)
00060   {
00061     setPolicy(policy);
00062     setNumberOfNodes(numberOfNodes);
00063   }
00064 
00065   /**
00066    * Returns the number of nodes.
00067    * 
00068    * @return an <code>int</code> value
00069    * @see #setNumberOfNodes
00070    */
00071   public int getNumberOfNodes()
00072   {
00073     return nbOfNodes;
00074   }
00075 
00076   /**
00077    * Sets the number of nodes.
00078    * 
00079    * @param numberOfNodes the number of nodes to set
00080    * @see #getNumberOfNodes
00081    */
00082   public void setNumberOfNodes(int numberOfNodes)
00083   {
00084     if (numberOfNodes < 3)
00085       throw new IllegalArgumentException(
00086         "You must use at least 3 nodes for error checking ("
00087           + numberOfNodes
00088           + " is not acceptable)");
00089     this.nbOfNodes = numberOfNodes;
00090   }
00091 
00092   /**
00093    * Returns the policy.
00094    * 
00095    * @return an <code>int</code> value
00096    * @see #setPolicy
00097    */
00098   public int getPolicy()
00099   {
00100     return policy;
00101   }
00102 
00103   /**
00104    * Sets the policy.
00105    * 
00106    * @param policy the policy to set
00107    * @see #getPolicy
00108    */
00109   public void setPolicy(int policy)
00110   {
00111     this.policy = policy;
00112   }
00113 
00114   /**
00115    * Pickups backends from the given backends arraylist according to the
00116    * current rule policy.
00117    * 
00118    * @param backends backends to choose from
00119    * @return Arraylist of choosen <code>DatabaseBackend</code>
00120    * @exception ErrorCheckingException if the rule cannot be applied
00121    */
00122   public abstract ArrayList getBackends(ArrayList backends)
00123     throws ErrorCheckingException;
00124 
00125   /**
00126    * Gives information about the current policy.
00127    * 
00128    * @return a <code>String</code> value
00129    */
00130   public abstract String getInformation();
00131 
00132   /**
00133    * Convert this error checking policy to xml
00134    * 
00135    * @return xml formatted string
00136    */
00137   public String getXml()
00138   
00139   {
00140     StringBuffer info = new StringBuffer();
00141     info.append(
00142       "<"
00143         + DatabasesXmlTags.ELT_ErrorChecking
00144         + " />"
00145         + DatabasesXmlTags.ATT_numberOfNodes
00146         + "=\""
00147         + this.getNumberOfNodes()
00148         + "\" "
00149         + DatabasesXmlTags.ATT_policy
00150         + "=\"");
00151     switch (policy)
00152     {
00153       case RANDOM :
00154         info.append(DatabasesXmlTags.VAL_random);
00155       case ROUND_ROBIN :
00156         info.append(DatabasesXmlTags.VAL_roundRobin);
00157       case ALL :
00158         info.append(DatabasesXmlTags.VAL_all);
00159       default :
00160         }
00161     info.append("\"/>");
00162     return info.toString();
00163   }
00164 }

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