BeginTask.java の 39 行で定義されています。
Public メソッド | |
BeginTask (int nbToComplete, int totalNb, long timeout, String login, int transactionId) | |
void | execute (BackendWorkerThread backendThread) throws SQLException |
String | toString () |
boolean | hasTid () |
synchronized void | notifySuccess () |
synchronized boolean | notifyFailure (BackendWorkerThread backendThread, long timeout, SQLException e) throws SQLException |
ArrayList | getExceptions () |
int | getFailed () |
int | getNbToComplete () |
int | getSuccess () |
int | getTotalNb () |
void | setTotalNb (int totalNb) |
void | setHasTid (boolean hasTid) |
Private 変数 | |
String | login |
int | transactionId |
long | timeout |
|
Begins a new transaction given a login and a transaction id.
BeginTask.java の 59 行で定義されています。
00061 { 00062 super(nbToComplete, totalNb); 00063 this.login = login; 00064 this.transactionId = transactionId; 00065 this.timeout = timeout; 00066 } |
|
Begins a new transaction with the given backend thread.
org.objectweb.cjdbc.controller.loadbalancer.tasks.AbstractTaskに実装されています. BeginTask.java の 74 行で定義されています。 参照先 org.objectweb.cjdbc.controller.loadbalancer.tasks.AbstractTask.notifyFailure(), と org.objectweb.cjdbc.controller.loadbalancer.tasks.AbstractTask.notifySuccess().
00075 { 00076 try 00077 { 00078 Connection c = backendThread.getBackend().getConnectionManager(login) 00079 .getConnection(transactionId); 00080 00081 // Sanity check 00082 if (c == null) 00083 { // Bad connection 00084 SQLException se = new SQLException( 00085 "No more connection to start a new transaction."); 00086 try 00087 { // All backends failed, just ignore 00088 if (!notifyFailure(backendThread, timeout, se)) 00089 return; 00090 } 00091 catch (SQLException ignore) 00092 { 00093 } 00094 } 00095 00096 c.setAutoCommit(false); 00097 notifySuccess(); 00098 backendThread.getBackend().startTransaction(new Long(transactionId)); 00099 } 00100 catch (Exception e) 00101 { 00102 try 00103 { 00104 if (!notifyFailure(backendThread, timeout, new SQLException(e 00105 .getMessage()))) 00106 return; 00107 } 00108 catch (SQLException ignore) 00109 { 00110 } 00111 String msg = "Failed to begin transaction " + transactionId 00112 + " on backend " + backendThread.getBackend().getName() + " (" + e 00113 + ")"; 00114 backendThread.getLogger().error(msg); 00115 throw new SQLException(msg); 00116 } 00117 } |
|
Returns the exceptions lists.
AbstractTask.java の 167 行で定義されています。 参照先 org.objectweb.cjdbc.controller.loadbalancer.tasks.AbstractTask.exceptions.
00168 {
00169 return exceptions;
00170 }
|
|
|
Returns the number of threads that must succeed before returning.
AbstractTask.java の 187 行で定義されています。 参照先 org.objectweb.cjdbc.controller.loadbalancer.tasks.AbstractTask.nbToComplete.
00188 {
00189 return nbToComplete;
00190 }
|
|
|
Returns the total number of threads.
AbstractTask.java の 208 行で定義されています。 参照先 org.objectweb.cjdbc.controller.loadbalancer.tasks.AbstractTask.totalNb.
00209 {
00210 return totalNb;
00211 }
|
|
Returns true if this task has a tid attached to it. Used internally by BackendWorkerThread.
AbstractTask.java の 231 行で定義されています。
00232 { 00233 return hasTid; 00234 } |
|
Notifies that the specified backendThread failed to execute this task. If all nodes failed, this method return
AbstractTask.java の 127 行で定義されています。 参照先 org.objectweb.cjdbc.controller.loadbalancer.tasks.AbstractTask.exceptions, org.objectweb.cjdbc.controller.loadbalancer.tasks.AbstractTask.failed, org.objectweb.cjdbc.controller.loadbalancer.tasks.AbstractTask.success, と org.objectweb.cjdbc.controller.loadbalancer.tasks.AbstractTask.totalNb. 参照元 org.objectweb.cjdbc.controller.loadbalancer.tasks.WriteStoredProcedureTask.execute(), org.objectweb.cjdbc.controller.loadbalancer.tasks.WriteRequestWithKeysTask.execute(), org.objectweb.cjdbc.controller.loadbalancer.tasks.WriteRequestTask.execute(), org.objectweb.cjdbc.controller.loadbalancer.tasks.SelectRequestTask.execute(), org.objectweb.cjdbc.controller.loadbalancer.tasks.RollbackTask.execute(), org.objectweb.cjdbc.controller.loadbalancer.tasks.ReadStoredProcedureTask.execute(), org.objectweb.cjdbc.controller.loadbalancer.tasks.CommitTask.execute(), org.objectweb.cjdbc.controller.loadbalancer.tasks.BeginTask.execute(), と org.objectweb.cjdbc.controller.loadbalancer.BackendWorkerThread.kill().
00129 { 00130 failed++; 00131 00132 // Log the exception 00133 if (exceptions == null) 00134 exceptions = new ArrayList(); 00135 exceptions.add(new SQLException("BackendThread " 00136 + backendThread.getBackend().getName() + " failed (" + e + ")")); 00137 00138 // Notify if needed 00139 if (success + failed == totalNb) 00140 { 00141 notifyAll(); // Notify all failed threads 00142 } 00143 else 00144 { 00145 try 00146 { // Wait to check if all other threads failed or not 00147 wait(timeout); 00148 } 00149 catch (InterruptedException ie) 00150 { 00151 throw new SQLException("Wait interrupted() in failed task of backend " 00152 + backendThread.getBackend().getName() + " (" + e + ")"); 00153 } 00154 } 00155 return success > 0; 00156 } |
|
|
Sets the hasTid value. Used internally by BackendWorkerThread.
AbstractTask.java の 243 行で定義されています。 参照元 org.objectweb.cjdbc.controller.loadbalancer.BackendWorkerThread.addPriorityTask(), と org.objectweb.cjdbc.controller.loadbalancer.BackendWorkerThread.addTask().
00244 {
00245 this.hasTid = hasTid;
00246 }
|
|
Sets the total number of threads.
AbstractTask.java の 219 行で定義されています。 参照元 org.objectweb.cjdbc.controller.loadbalancer.raidb2.RAIDb2.callStoredProcedure().
00220 {
00221 this.totalNb = totalNb;
00222 }
|
|
BeginTask.java の 122 行で定義されています。
00123 { 00124 return "BeginTask (" + transactionId + ")"; 00125 } |
|
Login used by the connection. BeginTask.java の 42 行で定義されています。 |
|
Request timeout in milliseconds. BeginTask.java の 48 行で定義されています。 |
|
Unique transaction identifier. BeginTask.java の 45 行で定義されています。 |