クラス org.objectweb.cjdbc.controller.loadbalancer.paralleldb.ParallelDB_LPRF

org.objectweb.cjdbc.controller.loadbalancer.paralleldb.ParallelDB_LPRFに対する継承グラフ

Inheritance graph
[凡例]
org.objectweb.cjdbc.controller.loadbalancer.paralleldb.ParallelDB_LPRFのコラボレーション図

Collaboration graph
[凡例]
すべてのメンバ一覧

説明

This class defines a ParallelDB_LPRF load balancer. This load balancer chooses the node that has the least pending queries for read and write queries execution.

作者:
Emmanuel Cecchet
バージョン:
1.0

ParallelDB_LPRF.java45 行で定義されています。

Public メソッド

 ParallelDB_LPRF (VirtualDatabase vdb) throws SQLException
DatabaseBackend chooseBackendForReadRequest (AbstractRequest request) throws SQLException
DatabaseBackend chooseBackendForWriteRequest (AbstractWriteRequest request) throws SQLException
String getInformation ()
String getParallelDBXml ()
ResultSet execReadRequest (SelectRequest request) throws SQLException
ResultSet execReadOnlyReadStoredProcedure (StoredProcedure proc) throws SQLException
ResultSet execReadStoredProcedure (StoredProcedure proc) throws SQLException
int execWriteRequest (AbstractWriteRequest request) throws AllBackendsFailedException, SQLException
ResultSet execWriteRequestWithKeys (AbstractWriteRequest request) throws AllBackendsFailedException, SQLException
int execWriteStoredProcedure (StoredProcedure proc) throws SQLException
void begin (TransactionMarkerMetaData tm) throws SQLException
void commit (TransactionMarkerMetaData tm) throws SQLException
void rollback (TransactionMarkerMetaData tm) throws SQLException
void enableBackend (DatabaseBackend db, boolean writeEnabled) throws SQLException
void disableBackend (DatabaseBackend db) throws SQLException
String getXmlImpl ()
int getRAIDbLevel ()
void setRAIDbLevel (int raidbLevel)
int getParsingGranularity ()
void setParsingGranularity (int parsingGranularity)
void setWeight (String name, int w) throws SQLException
String getXml ()

Protected メソッド

ResultSet executeStatementOnBackend (SelectRequest request, DatabaseBackend backend, Connection c) throws SQLException, BadConnectionException

Protected 変数

VirtualDatabase vdb
int raidbLevel
int parsingGranularity

Static Protected 変数

Trace logger


コンストラクタとデストラクタ

org.objectweb.cjdbc.controller.loadbalancer.paralleldb.ParallelDB_LPRF.ParallelDB_LPRF VirtualDatabase  vdb  )  throws SQLException
 

Creates a new ParallelDB_LPRF object.

引数:
vdb the virtual database this load balancer belongs to.
例外:
SQLException if an error occurs

ParallelDB_LPRF.java54 行で定義されています。

00055   {
00056     super(vdb);
00057   }


メソッド

void org.objectweb.cjdbc.controller.loadbalancer.paralleldb.ParallelDB.begin TransactionMarkerMetaData  tm  )  throws SQLException [virtual, inherited]
 

参照:
org.objectweb.cjdbc.controller.loadbalancer.AbstractLoadBalancer.begin(org.objectweb.cjdbc.controller.requestmanager.TransactionMarkerMetaData)

org.objectweb.cjdbc.controller.loadbalancer.AbstractLoadBalancerに実装されています.

ParallelDB.java1042 行で定義されています。

参照先 org.objectweb.cjdbc.controller.backend.DatabaseBackend.startTransaction().

01043   {
01044     Long lTid = new Long(tm.getTransactionId());
01045     if (backendPerTransactionId.containsKey(lTid))
01046       throw new SQLException(Translate.get(
01047           "loadbalancer.transaction.already.started", lTid.toString()));
01048 
01049     DatabaseBackend backend = chooseBackendForReadRequest(new UnknownRequest(
01050         "begin", false, 0));
01051     backendPerTransactionId.put(lTid, backend);
01052     backend.startTransaction(lTid);
01053   }

DatabaseBackend org.objectweb.cjdbc.controller.loadbalancer.paralleldb.ParallelDB_LPRF.chooseBackendForReadRequest AbstractRequest  request  )  throws SQLException [virtual]
 

参照:
org.objectweb.cjdbc.controller.loadbalancer.paralleldb.ParallelDB.chooseBackendForReadRequest(org.objectweb.cjdbc.common.sql.AbstractRequest)

org.objectweb.cjdbc.controller.loadbalancer.paralleldb.ParallelDBに実装されています.

ParallelDB_LPRF.java62 行で定義されています。

参照先 org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.acquireReadLockBackendLists(), org.objectweb.cjdbc.common.log.Trace.error(), org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.getBackends(), org.objectweb.cjdbc.controller.backend.DatabaseBackend.getPendingRequests(), org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.getSQLShortFormLength(), と org.objectweb.cjdbc.controller.backend.DatabaseBackend.isReadEnabled.

00064   {
00065     // Choose a backend
00066     try
00067     {
00068       vdb.acquireReadLockBackendLists();
00069     }
00070     catch (InterruptedException e)
00071     {
00072       String msg = Translate.get(
00073           "loadbalancer.backendlist.acquire.readlock.failed", e);
00074       logger.error(msg);
00075       throw new SQLException(msg);
00076     }
00077 
00078     DatabaseBackend backend = null; // The backend that will execute the query
00079 
00080     // Note that vdb lock is released in the finally clause of this try/catch
00081     // block
00082     try
00083     {
00084       ArrayList backends = vdb.getBackends();
00085       int size = backends.size();
00086 
00087       if (size == 0)
00088         throw new SQLException(Translate.get(
00089             "loadbalancer.execute.no.backend.available", request.getId()));
00090 
00091       // Choose the backend that has the least pending requests
00092       int leastRequests = 0;
00093       for (int i = 0; i < size; i++)
00094       {
00095         DatabaseBackend b = (DatabaseBackend) backends.get(i);
00096         if (b.isReadEnabled())
00097         {
00098           int pending = b.getPendingRequests().size();
00099           if ((backend == null) || (pending < leastRequests))
00100           {
00101             backend = b;
00102             if (pending == 0)
00103               break; // Stop here we will never find a less loaded node
00104             else
00105               leastRequests = pending;
00106           }
00107         }
00108       }
00109 
00110       if (backend == null)
00111         throw new SQLException(Translate.get(
00112             "loadbalancer.execute.no.backend.enabled", request.getId()));
00113     }
00114     catch (RuntimeException e)
00115     {
00116       String msg = Translate.get("loadbalancer.execute.find.backend.failed",
00117           new String[]{request.getSQLShortForm(vdb.getSQLShortFormLength()),
00118               e.getMessage()});
00119       logger.error(msg, e);
00120       throw new SQLException(msg);
00121     }
00122     finally
00123     {
00124       vdb.releaseReadLockBackendLists();
00125     }
00126 
00127     return backend;
00128   }

DatabaseBackend org.objectweb.cjdbc.controller.loadbalancer.paralleldb.ParallelDB_LPRF.chooseBackendForWriteRequest AbstractWriteRequest  request  )  throws SQLException [virtual]
 

参照:
org.objectweb.cjdbc.controller.loadbalancer.paralleldb.ParallelDB.chooseBackendForWriteRequest(org.objectweb.cjdbc.common.sql.AbstractWriteRequest)

org.objectweb.cjdbc.controller.loadbalancer.paralleldb.ParallelDBに実装されています.

ParallelDB_LPRF.java133 行で定義されています。

参照先 org.objectweb.cjdbc.controller.backend.DatabaseBackend.getPendingRequests(), と org.objectweb.cjdbc.controller.backend.DatabaseBackend.isWriteEnabled.

00135   {
00136     // Choose a backend
00137     try
00138     {
00139       vdb.acquireReadLockBackendLists();
00140     }
00141     catch (InterruptedException e)
00142     {
00143       String msg = Translate.get(
00144           "loadbalancer.backendlist.acquire.readlock.failed", e);
00145       logger.error(msg);
00146       throw new SQLException(msg);
00147     }
00148 
00149     DatabaseBackend backend = null; // The backend that will execute the query
00150 
00151     // Note that vdb lock is released in the finally clause of this try/catch
00152     // block
00153     try
00154     {
00155       ArrayList backends = vdb.getBackends();
00156       int size = backends.size();
00157 
00158       if (size == 0)
00159         throw new SQLException(Translate.get(
00160             "loadbalancer.execute.no.backend.available", request.getId()));
00161 
00162       // Choose the backend that has the least pending requests
00163       int leastRequests = 0;
00164       for (int i = 0; i < size; i++)
00165       {
00166         DatabaseBackend b = (DatabaseBackend) backends.get(i);
00167         if (b.isWriteEnabled())
00168         {
00169           int pending = b.getPendingRequests().size();
00170           if ((backend == null) || (pending < leastRequests))
00171           {
00172             backend = b;
00173             if (pending == 0)
00174               break; // Stop here we will never find a less loaded node
00175             else
00176               leastRequests = pending;
00177           }
00178         }
00179       }
00180 
00181       if (backend == null)
00182       {
00183         throw new SQLException(Translate.get(
00184             "loadbalancer.execute.no.backend.enabled", request.getId()));
00185       }
00186     }
00187     catch (RuntimeException e)
00188     {
00189       String msg = Translate.get("loadbalancer.execute.find.backend.failed",
00190           new String[]{request.getSQLShortForm(vdb.getSQLShortFormLength()),
00191               e.getMessage()});
00192       logger.error(msg, e);
00193       throw new SQLException(msg);
00194     }
00195     finally
00196     {
00197       vdb.releaseReadLockBackendLists();
00198     }
00199 
00200     return backend;
00201   }

void org.objectweb.cjdbc.controller.loadbalancer.paralleldb.ParallelDB.commit TransactionMarkerMetaData  tm  )  throws SQLException [virtual, inherited]
 

参照:
org.objectweb.cjdbc.controller.loadbalancer.AbstractLoadBalancer.commit(org.objectweb.cjdbc.controller.requestmanager.TransactionMarkerMetaData)

org.objectweb.cjdbc.controller.loadbalancer.AbstractLoadBalancerに実装されています.

ParallelDB.java1058 行で定義されています。

参照先 org.objectweb.cjdbc.controller.backend.DatabaseBackend.getConnectionManager(), org.objectweb.cjdbc.controller.backend.DatabaseBackend.getName(), org.objectweb.cjdbc.controller.connection.AbstractConnectionManager.retrieveConnection(), と org.objectweb.cjdbc.controller.backend.DatabaseBackend.stopTransaction().

01059   {
01060     long tid = tm.getTransactionId();
01061     Long lTid = new Long(tid);
01062     DatabaseBackend db = (DatabaseBackend) backendPerTransactionId.remove(lTid);
01063 
01064     AbstractConnectionManager cm = db.getConnectionManager(tm.getLogin());
01065     Connection c = cm.retrieveConnection(tid);
01066 
01067     // Sanity check
01068     if (c == null)
01069     { // Bad connection
01070       db.stopTransaction(lTid);
01071 
01072       throw new SQLException(Translate.get(
01073           "loadbalancer.unable.retrieve.connection", new String[]{
01074               String.valueOf(tid), db.getName()}));
01075     }
01076 
01077     // Execute Query
01078     try
01079     {
01080       c.commit();
01081       c.setAutoCommit(true);
01082     }
01083     catch (Exception e)
01084     {
01085       String msg = Translate.get("loadbalancer.commit.failed", new String[]{
01086           String.valueOf(tid), db.getName(), e.getMessage()});
01087       logger.error(msg);
01088       throw new SQLException(msg);
01089     }
01090     finally
01091     {
01092       cm.releaseConnection(tid);
01093       db.stopTransaction(lTid);
01094     }
01095   }

void org.objectweb.cjdbc.controller.loadbalancer.paralleldb.ParallelDB.disableBackend DatabaseBackend  db  )  throws SQLException [virtual, inherited]
 

Disables a backend that was previously enabled. Asks the corresponding connection manager to finalize the connections if needed.

No sanity checks are performed by this function.

引数:
db the database backend to disable
例外:
SQLException if an error occurs

org.objectweb.cjdbc.controller.loadbalancer.AbstractLoadBalancerに実装されています.

ParallelDB.java1169 行で定義されています。

01170   {
01171     logger.info(Translate.get("loadbalancer.backend.disabling", db.getName()));
01172     db.disable();
01173     if (db.isInitialized())
01174       db.finalizeConnections();
01175   }

void org.objectweb.cjdbc.controller.loadbalancer.paralleldb.ParallelDB.enableBackend DatabaseBackend  db,
boolean  writeEnabled
throws SQLException [virtual, inherited]
 

Enables a backend that was previously disabled. Asks the corresponding connection manager to initialize the connections if needed.

No sanity checks are performed by this function.

引数:
db the database backend to enable
writeEnabled True if the backend must be enabled for writes
例外:
SQLException if an error occurs

org.objectweb.cjdbc.controller.loadbalancer.AbstractLoadBalancerに実装されています.

ParallelDB.java1149 行で定義されています。

01151   {
01152     logger.info(Translate.get("loadbalancer.backend.enabling", db.getName()));
01153     if (!db.isInitialized())
01154       db.initializeConnections();
01155     db.enableRead();
01156     if (writeEnabled)
01157       db.enableWrite();
01158   }

ResultSet org.objectweb.cjdbc.controller.loadbalancer.paralleldb.ParallelDB.execReadOnlyReadStoredProcedure StoredProcedure  proc  )  throws SQLException [virtual, inherited]
 

参照:
org.objectweb.cjdbc.controller.loadbalancer.AbstractLoadBalancer.execReadOnlyReadStoredProcedure(org.objectweb.cjdbc.common.sql.StoredProcedure)

org.objectweb.cjdbc.controller.loadbalancer.AbstractLoadBalancerに実装されています.

ParallelDB.java136 行で定義されています。

00138   {
00139     return execReadStoredProcedure(proc);
00140   }

ResultSet org.objectweb.cjdbc.controller.loadbalancer.paralleldb.ParallelDB.execReadRequest SelectRequest  request  )  throws SQLException [virtual, inherited]
 

参照:
org.objectweb.cjdbc.controller.loadbalancer.AbstractLoadBalancer.execReadRequest(org.objectweb.cjdbc.common.sql.SelectRequest)

org.objectweb.cjdbc.controller.loadbalancer.AbstractLoadBalancerに実装されています.

ParallelDB.java88 行で定義されています。

参照先 org.objectweb.cjdbc.controller.loadbalancer.paralleldb.ParallelDB.backendPerTransactionId, org.objectweb.cjdbc.controller.loadbalancer.paralleldb.ParallelDB.chooseBackendForReadRequest(), org.objectweb.cjdbc.controller.loadbalancer.paralleldb.ParallelDB.executeReadRequestOnBackend(), org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.getSQLShortFormLength(), org.objectweb.cjdbc.common.log.Trace.info(), と org.objectweb.cjdbc.common.log.Trace.isInfoEnabled().

00089   {
00090     DatabaseBackend backend;
00091     if (request.isAutoCommit())
00092       backend = chooseBackendForReadRequest(request);
00093     else
00094       backend = (DatabaseBackend) backendPerTransactionId.get(new Long(request
00095           .getTransactionId()));
00096 
00097     if (backend == null)
00098       throw new SQLException(Translate.get(
00099           "loadbalancer.execute.no.backend.found", request.getSQLShortForm(vdb
00100               .getSQLShortFormLength())));
00101 
00102     ResultSet rs = null;
00103     // Execute the request on the chosen backend
00104     try
00105     {
00106       rs = executeReadRequestOnBackend((SelectRequest) request, backend);
00107     }
00108     catch (UnreachableBackendException urbe)
00109     {
00110       // Try to execute query on different backend
00111       return execReadRequest(request);
00112     }
00113     catch (SQLException se)
00114     {
00115       String msg = Translate.get("loadbalancer.request.failed", new String[]{
00116           String.valueOf(request.getId()), se.getMessage()});
00117       if (logger.isInfoEnabled())
00118         logger.info(msg);
00119       throw new SQLException(msg);
00120     }
00121     catch (RuntimeException e)
00122     {
00123       String msg = Translate.get("loadbalancer.request.failed.on.backend",
00124           new String[]{request.getSQLShortForm(vdb.getSQLShortFormLength()),
00125               backend.getName(), e.getMessage()});
00126       logger.error(msg, e);
00127       throw new SQLException(msg);
00128     }
00129 
00130     return rs;
00131   }

ResultSet org.objectweb.cjdbc.controller.loadbalancer.paralleldb.ParallelDB.execReadStoredProcedure StoredProcedure  proc  )  throws SQLException [virtual, inherited]
 

参照:
org.objectweb.cjdbc.controller.loadbalancer.AbstractLoadBalancer.execReadStoredProcedure(org.objectweb.cjdbc.common.sql.StoredProcedure)

org.objectweb.cjdbc.controller.loadbalancer.AbstractLoadBalancerに実装されています.

ParallelDB.java145 行で定義されています。

00147   {
00148     DatabaseBackend backend;
00149     if (proc.isAutoCommit())
00150       backend = chooseBackendForReadRequest(proc);
00151     else
00152       backend = (DatabaseBackend) backendPerTransactionId.get(new Long(proc
00153           .getTransactionId()));
00154 
00155     if (backend == null)
00156       throw new SQLException(Translate.get(
00157           "loadbalancer.storedprocedure.no.backend.found", proc
00158               .getSQLShortForm(vdb.getSQLShortFormLength())));
00159 
00160     ResultSet rs = null;
00161     // Execute the request on the chosen backend
00162     try
00163     {
00164       rs = executeReadStoredProcedureOnBackend((StoredProcedure) proc, backend);
00165     }
00166     catch (UnreachableBackendException urbe)
00167     {
00168       // Try to execute query on different backend
00169       return execReadStoredProcedure(proc);
00170     }
00171     catch (SQLException se)
00172     {
00173       String msg = Translate.get("loadbalancer.storedprocedure.failed",
00174           new String[]{String.valueOf(proc.getId()), se.getMessage()});
00175       if (logger.isInfoEnabled())
00176         logger.info(msg);
00177       throw new SQLException(msg);
00178     }
00179     catch (RuntimeException e)
00180     {
00181       String msg = Translate.get(
00182           "loadbalancer.storedprocedure.failed.on.backend", new String[]{
00183               proc.getSQLShortForm(vdb.getSQLShortFormLength()),
00184               backend.getName(), e.getMessage()});
00185       logger.error(msg, e);
00186       throw new SQLException(msg);
00187     }
00188 
00189     return rs;
00190   }

ResultSet org.objectweb.cjdbc.controller.loadbalancer.AbstractLoadBalancer.executeStatementOnBackend SelectRequest  request,
DatabaseBackend  backend,
Connection  c
throws SQLException, BadConnectionException [protected, inherited]
 

Execute a statement on a backend. If the execution fails, the connection is checked for validity. If the connection was not valid, the query is automatically retried on a new connection.

引数:
request the request to execute
backend the backend on which the request is executed
c connection used to create the statement
戻り値:
the ResultSet
例外:
SQLException if an error occurs

AbstractLoadBalancer.java251 行で定義されています。

参照先 java.sql.Statement.executeQuery(), java.sql.Statement.setCursorName(), java.sql.Statement.setFetchSize(), java.sql.Statement.setMaxRows(), java.sql.Statement.setQueryTimeout(), org.objectweb.cjdbc.controller.backend.DriverCompliance.supportSetCursorName, org.objectweb.cjdbc.controller.backend.DriverCompliance.supportSetFetchSize, org.objectweb.cjdbc.controller.backend.DriverCompliance.supportSetMaxRows, と org.objectweb.cjdbc.controller.backend.DriverCompliance.supportSetQueryTimeout.

参照元 org.objectweb.cjdbc.controller.loadbalancer.singledb.SingleDB.execReadRequest().

00254   {
00255     ResultSet rs = null;
00256     try
00257     {
00258       backend.addPendingReadRequest(request);
00259       String sql = request.getSQL();
00260       // Rewrite the query if needed
00261       sql = backend.rewriteQuery(sql);
00262       // Execute the query
00263       Statement s = c.createStatement();
00264       DriverCompliance driverCompliance = backend.getDriverCompliance();
00265       if (driverCompliance.supportSetQueryTimeout())
00266         s.setQueryTimeout(request.getTimeout());
00267       if ((request.getCursorName() != null)
00268           && (driverCompliance.supportSetCursorName()))
00269         s.setCursorName(request.getCursorName());
00270       if ((request.getFetchSize() != 0)
00271           && driverCompliance.supportSetFetchSize())
00272         s.setFetchSize(request.getFetchSize());
00273       if ((request.getMaxRows() > 0) && driverCompliance.supportSetMaxRows())
00274         s.setMaxRows(request.getMaxRows());
00275       rs = s.executeQuery(sql);
00276     }
00277     catch (SQLException e)
00278     { // Something bad happened
00279       if (backend.isValidConnection(c))
00280         throw e; // Connection is valid, throw the exception
00281       else
00282         throw new BadConnectionException();
00283     }
00284     finally
00285     {
00286       backend.removePendingRequest(request);
00287     }
00288     return rs;
00289   }

int org.objectweb.cjdbc.controller.loadbalancer.paralleldb.ParallelDB.execWriteRequest AbstractWriteRequest  request  )  throws AllBackendsFailedException, SQLException [virtual, inherited]
 

参照:
org.objectweb.cjdbc.controller.loadbalancer.AbstractLoadBalancer.execWriteRequest(org.objectweb.cjdbc.common.sql.AbstractWriteRequest)

org.objectweb.cjdbc.controller.loadbalancer.AbstractLoadBalancerに実装されています.

ParallelDB.java195 行で定義されています。

00197   {
00198     DatabaseBackend backend;
00199     if (request.isAutoCommit())
00200       backend = chooseBackendForWriteRequest(request);
00201     else
00202       backend = (DatabaseBackend) backendPerTransactionId.get(new Long(request
00203           .getTransactionId()));
00204 
00205     if (backend == null)
00206       throw new SQLException(Translate.get(
00207           "loadbalancer.execute.no.backend.found", request.getSQLShortForm(vdb
00208               .getSQLShortFormLength())));
00209 
00210     int result;
00211     // Execute the request on the chosen backend
00212     try
00213     {
00214       result = executeWriteRequestOnBackend(request, backend);
00215     }
00216     catch (UnreachableBackendException urbe)
00217     {
00218       // Try to execute query on different backend
00219       return execWriteRequest(request);
00220     }
00221     catch (SQLException se)
00222     {
00223       String msg = Translate.get("loadbalancer.request.failed", new String[]{
00224           String.valueOf(request.getId()), se.getMessage()});
00225       if (logger.isInfoEnabled())
00226         logger.info(msg);
00227       throw new SQLException(msg);
00228     }
00229     catch (RuntimeException e)
00230     {
00231       String msg = Translate.get("loadbalancer.request.failed.on.backend",
00232           new String[]{request.getSQLShortForm(vdb.getSQLShortFormLength()),
00233               backend.getName(), e.getMessage()});
00234       logger.error(msg, e);
00235       throw new SQLException(msg);
00236     }
00237 
00238     return result;
00239   }

ResultSet org.objectweb.cjdbc.controller.loadbalancer.paralleldb.ParallelDB.execWriteRequestWithKeys AbstractWriteRequest  request  )  throws AllBackendsFailedException, SQLException [virtual, inherited]
 

参照:
org.objectweb.cjdbc.controller.loadbalancer.AbstractLoadBalancer.execWriteRequestWithKeys(org.objectweb.cjdbc.common.sql.AbstractWriteRequest)

org.objectweb.cjdbc.controller.loadbalancer.AbstractLoadBalancerに実装されています.

ParallelDB.java244 行で定義されています。

00246   {
00247     DatabaseBackend backend;
00248     if (request.isAutoCommit())
00249       backend = chooseBackendForWriteRequest(request);
00250     else
00251       backend = (DatabaseBackend) backendPerTransactionId.get(new Long(request
00252           .getTransactionId()));
00253 
00254     if (backend == null)
00255       throw new SQLException(Translate.get(
00256           "loadbalancer.execute.no.backend.found", request.getSQLShortForm(vdb
00257               .getSQLShortFormLength())));
00258 
00259     ResultSet rs;
00260     // Execute the request on the chosen backend
00261     try
00262     {
00263       rs = executeWriteRequestWithKeysOnBackend(request, backend);
00264     }
00265     catch (UnreachableBackendException urbe)
00266     {
00267       // Try to execute query on different backend
00268       return execWriteRequestWithKeys(request);
00269     }
00270     catch (SQLException se)
00271     {
00272       String msg = Translate.get("loadbalancer.request.failed", new String[]{
00273           String.valueOf(request.getId()), se.getMessage()});
00274       if (logger.isInfoEnabled())
00275         logger.info(msg);
00276       throw new SQLException(msg);
00277     }
00278     catch (RuntimeException e)
00279     {
00280       String msg = Translate.get("loadbalancer.request.failed.on.backend",
00281           new String[]{request.getSQLShortForm(vdb.getSQLShortFormLength()),
00282               backend.getName(), e.getMessage()});
00283       logger.error(msg, e);
00284       throw new SQLException(msg);
00285     }
00286 
00287     return rs;
00288   }

int org.objectweb.cjdbc.controller.loadbalancer.paralleldb.ParallelDB.execWriteStoredProcedure StoredProcedure  proc  )  throws SQLException [virtual, inherited]
 

参照:
org.objectweb.cjdbc.controller.loadbalancer.AbstractLoadBalancer.execWriteStoredProcedure(org.objectweb.cjdbc.common.sql.StoredProcedure)

org.objectweb.cjdbc.controller.loadbalancer.AbstractLoadBalancerに実装されています.

ParallelDB.java293 行で定義されています。

00294   {
00295     DatabaseBackend backend;
00296     if (proc.isAutoCommit())
00297       backend = chooseBackendForReadRequest(proc);
00298     else
00299       backend = (DatabaseBackend) backendPerTransactionId.get(new Long(proc
00300           .getTransactionId()));
00301 
00302     if (backend == null)
00303       throw new SQLException(Translate.get(
00304           "loadbalancer.storedprocedure.no.backend.found", proc
00305               .getSQLShortForm(vdb.getSQLShortFormLength())));
00306 
00307     int result;
00308     // Execute the request on the chosen backend
00309     try
00310     {
00311       result = executeWriteStoredProcedureOnBackend(proc, backend);
00312     }
00313     catch (UnreachableBackendException urbe)
00314     {
00315       // Try to execute query on different backend
00316       return execWriteStoredProcedure(proc);
00317     }
00318     catch (SQLException se)
00319     {
00320       String msg = Translate.get("loadbalancer.storedprocedure.failed",
00321           new String[]{String.valueOf(proc.getId()), se.getMessage()});
00322       if (logger.isInfoEnabled())
00323         logger.info(msg);
00324       throw new SQLException(msg);
00325     }
00326     catch (RuntimeException e)
00327     {
00328       String msg = Translate.get(
00329           "loadbalancer.storedprocedure.failed.on.backend", new String[]{
00330               proc.getSQLShortForm(vdb.getSQLShortFormLength()),
00331               backend.getName(), e.getMessage()});
00332       logger.error(msg, e);
00333       throw new SQLException(msg);
00334     }
00335 
00336     return result;
00337   }

String org.objectweb.cjdbc.controller.loadbalancer.paralleldb.ParallelDB_LPRF.getInformation  )  [virtual]
 

参照:
org.objectweb.cjdbc.controller.loadbalancer.AbstractLoadBalancer.getInformation()

org.objectweb.cjdbc.controller.loadbalancer.AbstractLoadBalancerに実装されています.

ParallelDB_LPRF.java206 行で定義されています。

00207   {
00208     // We don't lock since we don't need a top accurate value
00209     int size = vdb.getBackends().size();
00210 
00211     if (size == 0)
00212       return "ParallelDB Least Pending Request First Request load balancer: !!!Warning!!! No backend nodes found\n";
00213     else
00214       return "ParallelDB Least Pending Request First Request load balancer ("
00215           + size + " backends)\n";
00216   }

String org.objectweb.cjdbc.controller.loadbalancer.paralleldb.ParallelDB_LPRF.getParallelDBXml  )  [virtual]
 

参照:
org.objectweb.cjdbc.controller.loadbalancer.paralleldb.ParallelDB.getParallelDBXml()

org.objectweb.cjdbc.controller.loadbalancer.paralleldb.ParallelDBに実装されています.

ParallelDB_LPRF.java221 行で定義されています。

00222   {
00223     return "<" + DatabasesXmlTags.ELT_ParallelDB_LeastPendingRequestsFirst
00224         + "/>";
00225   }

int org.objectweb.cjdbc.controller.loadbalancer.AbstractLoadBalancer.getParsingGranularity  )  [inherited]
 

Get the needed query parsing granularity.

戻り値:
needed query parsing granularity

AbstractLoadBalancer.java151 行で定義されています。

参照元 org.objectweb.cjdbc.controller.requestmanager.RequestManager.setLoadBalancer().

00152   {
00153     return parsingGranularity;
00154   }

int org.objectweb.cjdbc.controller.loadbalancer.AbstractLoadBalancer.getRAIDbLevel  )  [inherited]
 

Returns the RAIDbLevel.

戻り値:
int the RAIDb level

AbstractLoadBalancer.java131 行で定義されています。

参照先 org.objectweb.cjdbc.controller.loadbalancer.AbstractLoadBalancer.raidbLevel.

参照元 org.objectweb.cjdbc.controller.requestmanager.RequestManager.assignAndCheckSchedulerLoadBalancerValidity().

00132   {
00133     return raidbLevel;
00134   }

String org.objectweb.cjdbc.controller.loadbalancer.AbstractLoadBalancer.getXml  )  [inherited]
 

参照:
org.objectweb.cjdbc.common.xml.XmlComponent.getXml()

AbstractLoadBalancer.java385 行で定義されています。

参照先 org.objectweb.cjdbc.controller.loadbalancer.AbstractLoadBalancer.getXmlImpl().

00386   {
00387     StringBuffer info = new StringBuffer();
00388     info.append("<" + DatabasesXmlTags.ELT_LoadBalancer + ">");
00389     info.append(getXmlImpl());
00390     info.append("</" + DatabasesXmlTags.ELT_LoadBalancer + ">");
00391     return info.toString();
00392   }

String org.objectweb.cjdbc.controller.loadbalancer.paralleldb.ParallelDB.getXmlImpl  )  [virtual, inherited]
 

参照:
org.objectweb.cjdbc.controller.loadbalancer.AbstractLoadBalancer.getXmlImpl

org.objectweb.cjdbc.controller.loadbalancer.AbstractLoadBalancerに実装されています.

ParallelDB.java1180 行で定義されています。

01181   {
01182     StringBuffer info = new StringBuffer();
01183     info.append("<" + DatabasesXmlTags.ELT_ParallelDB + ">");
01184     info.append(getParallelDBXml());
01185     info.append("</" + DatabasesXmlTags.ELT_ParallelDB + ">");
01186     return info.toString();
01187   }

void org.objectweb.cjdbc.controller.loadbalancer.paralleldb.ParallelDB.rollback TransactionMarkerMetaData  tm  )  throws SQLException [virtual, inherited]
 

参照:
org.objectweb.cjdbc.controller.loadbalancer.AbstractLoadBalancer.rollback(org.objectweb.cjdbc.controller.requestmanager.TransactionMarkerMetaData)

org.objectweb.cjdbc.controller.loadbalancer.AbstractLoadBalancerに実装されています.

ParallelDB.java1100 行で定義されています。

参照先 org.objectweb.cjdbc.controller.backend.DatabaseBackend.getConnectionManager(), org.objectweb.cjdbc.controller.backend.DatabaseBackend.getName(), org.objectweb.cjdbc.controller.connection.AbstractConnectionManager.retrieveConnection(), と org.objectweb.cjdbc.controller.backend.DatabaseBackend.stopTransaction().

01101   {
01102     long tid = tm.getTransactionId();
01103     Long lTid = new Long(tid);
01104     DatabaseBackend db = (DatabaseBackend) backendPerTransactionId.remove(lTid);
01105 
01106     AbstractConnectionManager cm = db.getConnectionManager(tm.getLogin());
01107     Connection c = cm.retrieveConnection(tid);
01108 
01109     // Sanity check
01110     if (c == null)
01111     { // Bad connection
01112       db.stopTransaction(lTid);
01113 
01114       throw new SQLException(Translate.get(
01115           "loadbalancer.unable.retrieve.connection", new String[]{
01116               String.valueOf(tid), db.getName()}));
01117     }
01118 
01119     // Execute Query
01120     try
01121     {
01122       c.rollback();
01123       c.setAutoCommit(true);
01124     }
01125     catch (Exception e)
01126     {
01127       String msg = Translate.get("loadbalancer.rollback.failed", new String[]{
01128           String.valueOf(tid), db.getName(), e.getMessage()});
01129       logger.error(msg);
01130       throw new SQLException(msg);
01131     }
01132     finally
01133     {
01134       cm.releaseConnection(tid);
01135       db.stopTransaction(lTid);
01136     }
01137   }

void org.objectweb.cjdbc.controller.loadbalancer.AbstractLoadBalancer.setParsingGranularity int  parsingGranularity  )  [inherited]
 

Set the needed query parsing granularity.

引数:
parsingGranularity the granularity to set

AbstractLoadBalancer.java161 行で定義されています。

00162   {
00163     this.parsingGranularity = parsingGranularity;
00164   }

void org.objectweb.cjdbc.controller.loadbalancer.AbstractLoadBalancer.setRAIDbLevel int  raidbLevel  )  [inherited]
 

Sets the RAIDbLevel.

引数:
raidbLevel The RAIDb level to set

AbstractLoadBalancer.java141 行で定義されています。

00142   {
00143     this.raidbLevel = raidbLevel;
00144   }

void org.objectweb.cjdbc.controller.loadbalancer.AbstractLoadBalancer.setWeight String  name,
int  w
throws SQLException [inherited]
 

Associate a weight to a backend identified by its logical name.

引数:
name the backend name
w the weight
例外:
SQLException if an error occurs

org.objectweb.cjdbc.controller.loadbalancer.raidb0.RAIDb0, org.objectweb.cjdbc.controller.loadbalancer.raidb1.RAIDb1_WRR, org.objectweb.cjdbc.controller.loadbalancer.raidb1.RAIDb1ec_WRR, org.objectweb.cjdbc.controller.loadbalancer.raidb2.RAIDb2_WRR, org.objectweb.cjdbc.controller.loadbalancer.raidb2.RAIDb2ec_WRR, と org.objectweb.cjdbc.controller.loadbalancer.singledb.SingleDBで再定義されています。

AbstractLoadBalancer.java359 行で定義されています。

00360   {
00361     throw new SQLException("Weight is not supported by this load balancer");
00362   }


変数

Trace org.objectweb.cjdbc.controller.loadbalancer.AbstractLoadBalancer.logger [static, protected, inherited]
 

初期値:

 Trace
                                       .getLogger("org.objectweb.cjdbc.controller.loadbalancer")

org.objectweb.cjdbc.controller.loadbalancer.raidb0.RAIDb0, org.objectweb.cjdbc.controller.loadbalancer.raidb1.RAIDb1, org.objectweb.cjdbc.controller.loadbalancer.raidb1.RAIDb1ec, org.objectweb.cjdbc.controller.loadbalancer.raidb2.RAIDb2, org.objectweb.cjdbc.controller.loadbalancer.raidb2.RAIDb2ec, と org.objectweb.cjdbc.controller.loadbalancer.singledb.SingleDBで再定義されています。

AbstractLoadBalancer.java76 行で定義されています。

int org.objectweb.cjdbc.controller.loadbalancer.AbstractLoadBalancer.parsingGranularity [protected, inherited]
 

AbstractLoadBalancer.java74 行で定義されています。

int org.objectweb.cjdbc.controller.loadbalancer.AbstractLoadBalancer.raidbLevel [protected, inherited]
 

AbstractLoadBalancer.java73 行で定義されています。

参照元 org.objectweb.cjdbc.controller.loadbalancer.AbstractLoadBalancer.AbstractLoadBalancer(), と org.objectweb.cjdbc.controller.loadbalancer.AbstractLoadBalancer.getRAIDbLevel().

VirtualDatabase org.objectweb.cjdbc.controller.loadbalancer.AbstractLoadBalancer.vdb [protected, inherited]
 

AbstractLoadBalancer.java72 行で定義されています。

参照元 org.objectweb.cjdbc.controller.loadbalancer.AbstractLoadBalancer.AbstractLoadBalancer().


このクラスの説明は次のファイルから生成されました:
CJDBCversion1.0rc6に対してWed May 5 18:02:22 2004に生成されました。 doxygen 1.3.6