1 22 23 package org.continuent.sequoia.controller.virtualdatabase.protocol; 24 25 import java.io.Serializable ; 26 import java.sql.SQLException ; 27 import java.util.LinkedList ; 28 29 import org.continuent.sequoia.common.exceptions.NoMoreBackendException; 30 import org.continuent.sequoia.common.i18n.Translate; 31 import org.continuent.sequoia.controller.requestmanager.distributed.DistributedRequestManager; 32 import org.continuent.sequoia.controller.requests.SelectRequest; 33 34 41 public class DistributedStatementExecuteQuery extends DistributedRequest 42 { 43 private static final long serialVersionUID = -7183844510032678987L; 44 45 50 public DistributedStatementExecuteQuery(SelectRequest request) 51 { 52 super(request); 53 } 54 55 58 public Object scheduleRequest(DistributedRequestManager drm) 59 throws SQLException  60 { 61 if (((SelectRequest) request).isMustBroadcast()) 62 { LinkedList totalOrderQueue = drm.getVirtualDatabase() 64 .getTotalOrderQueue(); 65 synchronized (totalOrderQueue) 66 { 67 totalOrderQueue.addLast(request); 68 } 69 } 70 return request; 71 } 72 73 76 public Serializable executeScheduledRequest(DistributedRequestManager drm) 77 throws SQLException  78 { 79 Serializable result = null; 80 SelectRequest selectRequest = ((SelectRequest) request); 81 try 82 { 83 if (selectRequest.isMustBroadcast() || (!selectRequest.isAutoCommit())) 84 { 85 drm.getLoadBalancer().waitForSuspendWritesToComplete(request); 86 drm.lazyTransactionStart(request); 91 } 92 93 result = drm.execLocalStatementExecuteQuery(selectRequest); 94 95 if (drm.storeRequestResult(request, result)) 96 result = DistributedRequestManager.SUCCESSFUL_COMPLETION; 97 98 return result; 99 } 100 catch (NoMoreBackendException e) 101 { 102 if (drm.getLogger().isDebugEnabled()) 103 drm.getLogger().debug( 104 Translate.get("virtualdatabase.distributed.write.logging.only", 105 request.getSqlShortForm(drm.getVirtualDatabase() 106 .getSqlShortFormLength()))); 107 108 120 drm.addFailedOnAllBackends(request, false); 121 122 return e; 123 } 124 catch (SQLException e) 125 { 126 138 drm.addFailedOnAllBackends(request, false); 139 drm.getLogger().warn( 140 Translate.get("virtualdatabase.distributed.read.sqlexception", e 141 .getMessage()), e); 142 if (selectRequest.isMustBroadcast()) 143 { 144 drm.getLoadBalancer().removeObjectFromAndNotifyTotalOrderQueue(request); 147 } 148 return e; 149 } 150 catch (RuntimeException re) 151 { 152 164 drm.addFailedOnAllBackends(request, false); 165 drm.getLogger().warn( 166 Translate.get("virtualdatabase.distributed.read.exception", re 167 .getMessage()), re); 168 if (selectRequest.isMustBroadcast()) 169 { 170 drm.getLoadBalancer().removeObjectFromAndNotifyTotalOrderQueue(request); 173 } 174 return new SQLException (re.getMessage()); 175 } 176 } 177 178 181 public String toString() 182 { 183 return "S " + request.getId() + " " + request.getTransactionId() + " " 184 + request.getUniqueKey(); 185 } 186 187 } | Popular Tags |