1 21 22 package org.continuent.sequoia.driver.connectpolicy; 23 24 import java.util.ArrayList ; 25 26 import org.continuent.sequoia.common.exceptions.NoMoreControllerException; 27 import org.continuent.sequoia.driver.ControllerInfo; 28 import org.continuent.sequoia.driver.SequoiaUrl; 29 30 43 public class OrderedConnectPolicy extends AbstractControllerConnectPolicy 44 { 45 private ArrayList availableControllerList; 46 47 56 public OrderedConnectPolicy(ControllerInfo[] controllerList, 57 long retryIntervalInMs, int debugLevel) 58 { 59 super(controllerList, retryIntervalInMs, debugLevel); 60 availableControllerList = new ArrayList (controllerList.length); 62 for (int i = 0; i < controllerList.length; i++) 63 availableControllerList.add(controllerList[i]); 64 } 65 66 69 public synchronized void removeControllerFromSuspectList( 70 ControllerInfo controller) 71 { 72 super.removeControllerFromSuspectList(controller); 73 availableControllerList.clear(); 75 for (int i = 0; i < controllerList.length; i++) 76 if (!isSuspectedOfFailure(controllerList[i])) 77 availableControllerList.add(controllerList[i]); 78 } 79 80 83 public synchronized void suspectControllerOfFailure( 84 ControllerInfo controllerInfo) 85 { 86 super.suspectControllerOfFailure(controllerInfo); 87 while (availableControllerList.remove(controllerInfo)) 88 { 89 } 91 } 92 93 96 public synchronized ControllerInfo getController() 97 throws NoMoreControllerException 98 { 99 int size = availableControllerList.size(); 100 if (size == 0) 101 throw new NoMoreControllerException(); 102 103 ControllerInfo controllerInfo = (ControllerInfo) availableControllerList 105 .get(0); 106 if (debugLevel == SequoiaUrl.DEBUG_LEVEL_DEBUG) 107 System.out.println("Selected controller " + controllerInfo); 108 return controllerInfo; 109 } 110 111 } 112 | Popular Tags |