KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > daffodilwoods > daffodildb > server > backup > Scheduler


1 package com.daffodilwoods.daffodildb.server.backup;
2
3 import com.daffodilwoods.daffodildb.server.datasystem.persistentsystem.DatabaseConstants;
4 import com.daffodilwoods.daffodildb.server.serversystem.ServerSystem;
5 import com.daffodilwoods.database.resource.*;
6 import com.daffodilwoods.daffodildb.server.datasystem.persistentsystem.PersistentDatabase;
7 import com.daffodilwoods.daffodildb.server.datasystem.indexsystem.IndexDatabase;
8 import com.daffodilwoods.daffodildb.server.datasystem.mergesystem.MergeDatabase;
9 import com.daffodilwoods.daffodildb.server.datasystem.interfaces._Table;
10 import com.daffodilwoods.daffodildb.server.datasystem.persistentsystem.DatabaseUserTableIterator;
11 import com.daffodilwoods.daffodildb.server.datasystem.interfaces._TableCharacteristics;
12 import java.util.ArrayList JavaDoc;
13 import com.daffodilwoods.daffodildb.server.datadictionarysystem.SystemTables;
14 import com.daffodilwoods.daffodildb.server.datasystem.interfaces._DatabaseUser;
15 import com.daffodilwoods.daffodildb.utils.BufferRange;
16 import com.daffodilwoods.daffodildb.server.datasystem.interfaces.Utility;
17 import com.daffodilwoods.daffodildb.server.datasystem.interfaces._UserTableOperations;
18 import com.daffodilwoods.daffodildb.server.datasystem.interfaces._DataTable;
19 import com.daffodilwoods.daffodildb.utils.comparator.CTusjohJoTfotjujwfDpnqbsbups;
20 import com.daffodilwoods.daffodildb.utils.byteconverter.CCzufDpowfsufs;
21
22 /**
23  * <p>Title: Scheduler</p>
24  * <p>Description: This class implements Runnable and hence has a Run method overridden
25  * which starts a thread and takes OnlineBackup of the database </p>
26  * <p>Copyright: Copyright (c) 2003</p>
27  * <p>Company: </p>
28  * @author not attributable
29  * @version 1.0
30  */

31
32 public class Scheduler implements Runnable JavaDoc{
33      long lastBackupTime = 0;
34      long timeIntervalForBackup = 0;
35      long targetTime = 0;
36      String JavaDoc backupType = null;
37      ServerSystem ss = null;
38      String JavaDoc backupPath = "";
39      String JavaDoc databaseNameSource = "";
40      String JavaDoc databaseNameForBackup = "";
41      String JavaDoc scheduleName = "";
42      boolean overwrite = true;
43      boolean start = true;
44
45      public Scheduler(ServerSystem serverSystem,String JavaDoc databaseNameSource0,String JavaDoc scheduleName0,long lastBackupTime0, long timeIntervalForBackup0 ,String JavaDoc backupType0 ,String JavaDoc backupPath0,String JavaDoc databaseNameForBackup0 ){
46         lastBackupTime = lastBackupTime0;
47         timeIntervalForBackup = timeIntervalForBackup0;
48         targetTime = lastBackupTime + timeIntervalForBackup;
49         backupType = backupType0;
50         ss=serverSystem;
51         databaseNameSource= databaseNameSource0;
52         backupPath = backupPath0;
53         databaseNameForBackup = databaseNameForBackup0;
54         scheduleName = scheduleName0;
55      }
56      /**
57       * This method takes OnlineBackup of the database when the target time is reached
58       * It updates lastBackupTime in the SCHEDULEINFO Table and then enters into wait till the
59       * time for the next backup.
60       */

61
62      public void run() {
63        _DatabaseUser user = null;
64         try {
65           do {
66             long startTime;
67             if (targetTime <= System.currentTimeMillis()) {
68               startTime = System.currentTimeMillis();
69               if (backupType.equalsIgnoreCase(DatabaseConstants.
70                                               INCONSISTENTONLINEBACKUP)) {
71                 try {
72                   ss.getInconsistentOnlineBackup(backupPath, databaseNameSource,
73                                                  databaseNameForBackup,
74                                                  overwrite);
75
76                   lastBackupTime = targetTime;
77                   PersistentDatabase systemDatabase = (PersistentDatabase) ( (
78                       IndexDatabase) ( (MergeDatabase) ss.getMergeDatabase(
79                       DatabaseConstants.SYSTEMDATABASE)).
80                       getFileDatabase()).getUnderLyingDatabase();
81                   _Table table = systemDatabase.getTable(SystemTables.
82                       SCHEDULEINFO);
83                   DatabaseUserTableIterator scheduleInfoTableIteartor = (
84                       DatabaseUserTableIterator) ( (_DataTable) table).
85                       getIterator();
86                   _TableCharacteristics tableCharacteristicsScheduleInfo =
87                       table.
88                       getTableCharacteristics();
89                   ArrayList JavaDoc list = new ArrayList JavaDoc();
90                   list.add(SystemTables.SCHEDULEINFO);
91                   user = systemDatabase.getDatabaseUser(list);
92                   Object JavaDoc[] valueForScheduleInfo = new Object JavaDoc[] {new Long JavaDoc(lastBackupTime)};
93                   int[] columnIndex = new int[] {4};
94                   BufferRange[] bytesForScheduleInfo = Utility.convertIntoBufferRange(tableCharacteristicsScheduleInfo.getColumnTypes(columnIndex),valueForScheduleInfo,tableCharacteristicsScheduleInfo.getCollator());
95                   BufferRange bytesOfScheduleName = new BufferRange(CCzufDpowfsufs.getBytes(scheduleName, scheduleName.length(), false));
96                   CTusjohJoTfotjujwfDpnqbsbups stringComparator = new CTusjohJoTfotjujwfDpnqbsbups();
97                   if (scheduleInfoTableIteartor.first())
98                     do {
99                       BufferRange bytesGot = (BufferRange)scheduleInfoTableIteartor.getColumnValues(1);
100                       if (stringComparator.compare(bytesGot,bytesOfScheduleName) == 0) {
101                         ( (_UserTableOperations) scheduleInfoTableIteartor).update(user, columnIndex, bytesForScheduleInfo);
102                         break;
103                       }
104                     }
105                     while (scheduleInfoTableIteartor.next());
106                   user.writeToFile();
107                   targetTime += timeIntervalForBackup;
108                   if(targetTime < System.currentTimeMillis())
109                     targetTime =System.currentTimeMillis() + timeIntervalForBackup ;
110
111                 }
112                 catch (DException ex1) {
113                   ex1.printStackTrace();
114                   if (ex1.getDseCode().equalsIgnoreCase("DSE5579")){//in case if backup files have been deleted from path
115
targetTime += timeIntervalForBackup;
116                     if(targetTime < System.currentTimeMillis())
117                       targetTime =System.currentTimeMillis() + timeIntervalForBackup ;
118                   }
119                 }
120               }
121
122             }
123             else {
124               long currentTime = System.currentTimeMillis();
125               long waitTime = targetTime - currentTime;
126               synchronized (this) {
127                 try {
128                   wait(waitTime);
129
130                 }
131                 catch (InterruptedException JavaDoc ex) {
132                 }
133               }
134             }
135           }
136           while (start);
137           Thread.currentThread().stop();
138         }
139         finally{
140         try {
141           if(user!=null)
142             user.releaseCluster();
143         }
144         catch (DException ex2) {
145           ex2.printStackTrace();
146         }
147         }
148      }
149
150      public void stopThread(){
151        start = false;
152      }
153
154      public String JavaDoc getScheduleName(){
155        return scheduleName;
156      }
157   }
158
Popular Tags