Mercurial > dive4elements > framework
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(); |