KickJava   Java API By Example, From Geeks To Geeks.

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


1 package com.daffodilwoods.daffodildb.server.sessionsystem;
2
3 import java.util.HashMap JavaDoc;
4 import java.util.ArrayList JavaDoc;
5 import com.daffodilwoods.daffodildb.server.sql99.dql.iterator._Iterator;
6 import com.daffodilwoods.database.resource.DException;
7 import com.daffodilwoods.daffodildb.server.datasystem.utility._Record;
8 import com.daffodilwoods.database.general.SystemFields;
9 import java.util.*;
10 import com.daffodilwoods.daffodildb.server.serversystem._ServerSession;
11
12 public class DeadLockDetector {
13
14   private HashMap JavaDoc waitingIdsMap;
15
16
17   public DeadLockDetector() {
18     waitingIdsMap = new HashMap JavaDoc();
19
20   }
21
22   public synchronized void addIntoWaitingMap(Object JavaDoc sessionId0,_Iterator iterator0){
23     waitingIdsMap.put(sessionId0 ,iterator0) ;
24   }
25
26   public synchronized void removeFromWaitingMap(Object JavaDoc sessionId0){
27     waitingIdsMap.remove(sessionId0) ;
28   }
29
30
31   public synchronized void checkDeadLock(_ServerSession serverSession,Object JavaDoc sessionId0) throws DException{
32       ArrayList JavaDoc idsList = new ArrayList JavaDoc();
33        idsList.add(sessionId0);
34       _Iterator iterator = (_Iterator) waitingIdsMap.get(sessionId0) ;
35       try {
36         checkForWaitingIds(iterator, idsList);
37       }
38       catch (DException ex) {
39         if(ex.getDseCode().equalsIgnoreCase("DSE2050") ){
40          ;//// Removed By Program ** System.out.println(" session rollbacked is =" +serverSession.hashCode() +" sessionid from server session is ="+serverSession.getSessionId() );
41
serverSession.rollback() ;
42           throw ex;
43         }
44
45       }
46     }
47
48   private void checkForWaitingIds(_Iterator iterator,ArrayList JavaDoc idsList) throws DException{
49    if(iterator.first() )
50       do{
51       try {
52         _Record record = iterator.getRecord();
53         Object JavaDoc invalidSessionId = record.getObject(SystemFields.
54             invalidSessionId);
55         Object JavaDoc sessionId = invalidSessionId.equals(SystemFields.maxIntegerValue) ?
56             record.getObject(SystemFields.sessionId) : invalidSessionId;
57         if (idsList.contains(sessionId)) {
58          ;//// Removed By Program ** System.out.println(" Dead Lock found for session Id " + sessionId);
59
throw new DException("DSE2050", null);
60         }
61         idsList.add(sessionId);
62         detectDeadLock(sessionId, idsList);
63         idsList.remove(idsList.size() - 1);
64       }
65       catch (DException ex) {
66         if(ex.getDseCode().equalsIgnoreCase("DSE2050") )
67           throw ex;
68       }
69      }while(iterator.next() );
70  }
71
72   private void detectDeadLock(Object JavaDoc sessionId0,ArrayList JavaDoc idsList ) throws DException{
73      Object JavaDoc iterator = waitingIdsMap.get(sessionId0) ;
74      if(iterator != null )
75        checkForWaitingIds( (_Iterator) iterator, idsList );
76    }
77 }
78
Popular Tags