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