KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > daffodilwoods > daffodildb > server > sessionsystem > CommitedSessionIterator


1 package com.daffodilwoods.daffodildb.server.sessionsystem;
2
3 import com.daffodilwoods.daffodildb.server.sql99.dql.iterator._Iterator;
4 import com.daffodilwoods.daffodildb.server.sql99.utils.*;
5 import com.daffodilwoods.database.resource.*;
6 import com.daffodilwoods.database.utility.P;
7 import com.daffodilwoods.daffodildb.client.*;
8 import com.daffodilwoods.database.general.*;
9 import com.daffodilwoods.daffodildb.server.serversystem._ServerSession;
10
11 /**
12  * Iterator for getting records according to Read Committed Isolation Level
13  */

14 public class CommitedSessionIterator extends SessionIterator {
15   SessionDatabase sessionDatabase;
16   _Iterator iteratorMemory;
17   long time ;
18   int queryTimeOut = 0;
19   boolean questionMarkNotFound;
20   _Reference[] references0;
21   Object JavaDoc[] values0 ;
22   QualifiedIdentifier tableName;
23   DeadLockDetector deadLockDetector;
24   Object JavaDoc sessionId;
25   _ServerSession serverSession;
26 boolean checkingForLocking;
27
28   public CommitedSessionIterator(_Iterator iteratorMemory0, _Iterator iteratorUser0,SessionDatabase sessionDatabase0, boolean questionMarkNotFound0,_ServerSession serverSession0,QualifiedIdentifier tableName0,boolean checkingForLocking0) throws DException{
29     super(iteratorUser0 );
30     sessionDatabase = sessionDatabase0;
31     iteratorMemory = iteratorMemory0;
32     time = System.currentTimeMillis();
33     questionMarkNotFound = questionMarkNotFound0;
34     serverSession = serverSession0;
35     tableName = tableName0;
36     deadLockDetector = sessionDatabase.getDeadLockDetector(tableName) ;
37     sessionId = serverSession.getSessionId() ;
38     checkingForLocking = checkingForLocking0;
39     if(questionMarkNotFound){
40       iteratorMemory.setConditionVariableValue( null, null, 1);
41       checkingForLockedRow( );
42     }
43   }
44
45   public void setTableName(QualifiedIdentifier tableName0){
46       tableName = tableName0;
47   }
48
49   public void setConditionVariableValue(_Reference[] references, Object JavaDoc[] values , int priority) throws DException{
50      iteratorMemory.setConditionVariableValue( references, values, priority);
51      super.setConditionVariableValue(references, values, priority);
52      references0 = references;
53      values0 = values;
54       if(!questionMarkNotFound){
55         checkingForLockedRow();
56       }
57   }
58
59
60   private void checkingForLockedRow( ) throws DException {
61     if(!checkingForLocking){
62          return ; /*in case of select operation there is no need for checking of row locking */
63       }
64
65     int number =0;
66       long time = System.currentTimeMillis();
67       boolean isAddedIntoDeadLockMap = false;
68       try{
69        while (true) {
70          if (!iteratorMemory.first()) {
71            return;
72          }
73          number++;
74          if (System.currentTimeMillis() - time >= queryTimeOut &&
75              queryTimeOut != 0) {
76            throw new DException("DSE1178",
77                                 new Object JavaDoc[] {new Integer JavaDoc(queryTimeOut)});
78          }
79          if(!isAddedIntoDeadLockMap){
80            deadLockDetector.addIntoWaitingMap(sessionId, iteratorMemory);
81            isAddedIntoDeadLockMap = true;
82          }
83
84          synchronized (sessionDatabase) {
85            try {
86              long startTime = System.currentTimeMillis();
87              sessionDatabase.wait(5000);
88              if ( (System.currentTimeMillis() - startTime) >= 5000) {
89                   deadLockDetector.checkDeadLock(serverSession,sessionId);
90              }
91
92            }
93            catch (InterruptedException JavaDoc i) {
94              i.printStackTrace();
95            }
96          }
97        }
98      }finally{
99               deadLockDetector.removeFromWaitingMap(sessionId );
100     }
101
102   }
103
104   public String JavaDoc toString2(){
105      return "CommittedIterator [ "+ super.toString()+" ] "+( references0 == null ? "nullss" : P.print(references0))+" "+(values0 == null ? "nullss" : P.print(values0));
106   }
107 /*
108   public boolean first() throws DException {
109     return super.first();
110   }
111   public boolean last() throws DException {
112     return super.last();
113   }
114 */

115
116
117   public _ExecutionPlan getExecutionPlan() throws DException{
118      _ExecutionPlan cplan = null;
119      try{
120         cplan = ((_Iterator)iterator).getExecutionPlan();
121      }catch(ClassCastException JavaDoc cce){
122      }
123      _ExecutionPlan cplan1 = iteratorMemory.getExecutionPlan();
124      _ExecutionPlan cplans[] = new _ExecutionPlan[]{cplan,cplan1};
125      return new ExecutionPlan("CommitedSessionIterator",cplans,null,null,null);
126   }
127
128 }
129
Popular Tags