comparison artifact-database/src/main/java/de/intevation/artifactdatabase/DatabaseCleaner.java @ 41:5e4bc24ea438

Made serilization more flexible. DB update required!!! Fixed problem with touching artifacts in database. artifacts/trunk@119 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Wed, 23 Sep 2009 16:55:12 +0000
parents c2d53bd30ab8
children 4ae4dc99127d
comparison
equal deleted inserted replaced
40:af22d4de275c 41:5e4bc24ea438
18 * @author Sascha L. Teichmann 18 * @author Sascha L. Teichmann
19 */ 19 */
20 public class DatabaseCleaner 20 public class DatabaseCleaner
21 extends Thread 21 extends Thread
22 { 22 {
23 public interface ArtifactReviver {
24
25 Artifact reviveArtifact(String factoryName, byte [] bytes);
26
27 } // interface ArtifactReviver
28
23 private static Logger logger = Logger.getLogger(DatabaseCleaner.class); 29 private static Logger logger = Logger.getLogger(DatabaseCleaner.class);
24 30
25 public static final int MAX_ROWS = 50; 31 public static final int MAX_ROWS = 50;
26 32
27 public static final String SQL_OUTDATED = 33 public static final String SQL_OUTDATED =
42 48
43 protected Object context; 49 protected Object context;
44 50
45 protected Id.Filter filter; 51 protected Id.Filter filter;
46 52
53 protected ArtifactReviver reviver;
54
47 public DatabaseCleaner() { 55 public DatabaseCleaner() {
48 } 56 }
49 57
50 public DatabaseCleaner(Object context) { 58 public DatabaseCleaner(Object context, ArtifactReviver reviver) {
51 setDaemon(true); 59 setDaemon(true);
52 sleepTime = getSleepTime(); 60 sleepTime = getSleepTime();
53 this.context = context; 61 this.context = context;
62 this.reviver = reviver;
54 } 63 }
55 64
56 public void setFilter(Id.Filter filter) { 65 public void setFilter(Id.Filter filter) {
57 this.filter = filter; 66 this.filter = filter;
58 } 67 }
81 90
82 private static final class IdData 91 private static final class IdData
83 extends Id 92 extends Id
84 { 93 {
85 byte [] data; 94 byte [] data;
86 95 String factoryName;
87 public IdData(int id, byte [] data) { 96
97 public IdData(int id, String factoryName, byte [] data) {
88 super(id); 98 super(id);
89 this.data = data; 99 this.factoryName = factoryName;
100 this.data = data;
90 } 101 }
91 } // class IdData 102 } // class IdData
92 103
93 /** 104 /**
94 * Cleaning is done in two phases. First we fetch a list of ids 105 * Cleaning is done in two phases. First we fetch a list of ids
126 137
127 result = fetchIds.executeQuery(); 138 result = fetchIds.executeQuery();
128 139
129 while (result.next()) { 140 while (result.next()) {
130 ids.add(new IdData( 141 ids.add(new IdData(
131 result.getInt(1), result.getBytes(2))); 142 result.getInt(1),
143 result.getString(2),
144 result.getBytes(3)));
132 } 145 }
133 146
134 result.close(); result = null; 147 result.close(); result = null;
135 148
136 if (ids.isEmpty()) { 149 if (ids.isEmpty()) {
141 ids = filter.filterIds(ids); 154 ids = filter.filterIds(ids);
142 } 155 }
143 156
144 for (int i = ids.size()-1; i >= 0; --i) { 157 for (int i = ids.size()-1; i >= 0; --i) {
145 IdData idData = (IdData)ids.get(i); 158 IdData idData = (IdData)ids.get(i);
146 Artifact artifact = Backend.restoreArtifact( 159 Artifact artifact = reviver.reviveArtifact(
147 idData.data); 160 idData.factoryName, idData.data);
148 idData.data = null; 161 idData.data = null;
149 162
150 deleteId.setInt(1, idData.id); 163 deleteId.setInt(1, idData.id);
151 deleteId.execute(); 164 deleteId.execute();
152 connection.commit(); 165 connection.commit();

http://dive4elements.wald.intevation.org