comparison artifact-database/src/main/java/de/intevation/artifactdatabase/DatabaseCleaner.java @ 32:c2d53bd30ab8

Re-factored artifact API for better integration of background processing. artifacts/trunk@78 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Sun, 13 Sep 2009 14:50:53 +0000
parents 88972c6daa4f
children 5e4bc24ea438
comparison
equal deleted inserted replaced
31:c4d85a8532d1 32:c2d53bd30ab8
10 import javax.sql.DataSource; 10 import javax.sql.DataSource;
11 11
12 import org.apache.log4j.Logger; 12 import org.apache.log4j.Logger;
13 13
14 import java.util.ArrayList; 14 import java.util.ArrayList;
15 import java.util.List;
15 16
16 /** 17 /**
17 * @author Sascha L. Teichmann 18 * @author Sascha L. Teichmann
18 */ 19 */
19 public class DatabaseCleaner 20 public class DatabaseCleaner
39 40
40 protected Object sleepLock = new Object(); 41 protected Object sleepLock = new Object();
41 42
42 protected Object context; 43 protected Object context;
43 44
45 protected Id.Filter filter;
46
44 public DatabaseCleaner() { 47 public DatabaseCleaner() {
45 } 48 }
46 49
47 public DatabaseCleaner(Object context) { 50 public DatabaseCleaner(Object context) {
48 setDaemon(true); 51 setDaemon(true);
49 sleepTime = getSleepTime(); 52 sleepTime = getSleepTime();
50 this.context = context; 53 this.context = context;
51 } 54 }
52 55
56 public void setFilter(Id.Filter filter) {
57 this.filter = filter;
58 }
59
53 public void wakeup() { 60 public void wakeup() {
54 synchronized (sleepLock) { 61 synchronized (sleepLock) {
55 sleepLock.notify(); 62 sleepLock.notify();
56 } 63 }
57 } 64 }
70 logger.warn("Cleaner sleep time defaults to " + SLEEP_DEFAULT); 77 logger.warn("Cleaner sleep time defaults to " + SLEEP_DEFAULT);
71 } 78 }
72 return SLEEP_DEFAULT; 79 return SLEEP_DEFAULT;
73 } 80 }
74 81
75 private static final class IdData { 82 private static final class IdData
76 83 extends Id
77 int id; 84 {
78 byte [] data; 85 byte [] data;
79 86
80 public IdData(int id, byte [] data) { 87 public IdData(int id, byte [] data) {
81 this.id = id; 88 super(id);
82 this.data = data; 89 this.data = data;
83 } 90 }
84 } // class IdData 91 } // class IdData
85 92
86 /** 93 /**
113 // some dbms like derby do not support LIMIT 120 // some dbms like derby do not support LIMIT
114 // in SQL statements. 121 // in SQL statements.
115 fetchIds.setMaxRows(MAX_ROWS); 122 fetchIds.setMaxRows(MAX_ROWS);
116 123
117 for (;;) { 124 for (;;) {
118 ArrayList ids = new ArrayList(); 125 List ids = new ArrayList();
119 126
120 result = fetchIds.executeQuery(); 127 result = fetchIds.executeQuery();
121 128
122 while (result.next()) { 129 while (result.next()) {
123 ids.add(new IdData( 130 ids.add(new IdData(
126 133
127 result.close(); result = null; 134 result.close(); result = null;
128 135
129 if (ids.isEmpty()) { 136 if (ids.isEmpty()) {
130 break; 137 break;
138 }
139
140 if (filter != null) {
141 ids = filter.filterIds(ids);
131 } 142 }
132 143
133 for (int i = ids.size()-1; i >= 0; --i) { 144 for (int i = ids.size()-1; i >= 0; --i) {
134 IdData idData = (IdData)ids.get(i); 145 IdData idData = (IdData)ids.get(i);
135 Artifact artifact = Backend.restoreArtifact( 146 Artifact artifact = Backend.restoreArtifact(

http://dive4elements.wald.intevation.org