annotate artifact-database/src/main/java/org/dive4elements/artifactdatabase/DatabaseCleaner.java @ 547:266b599a4819 3.2.1

Remove unused imports.
author Tom Gottfried <tom@intevation.de>
date Mon, 28 Dec 2015 17:46:55 +0100
parents e9abf747f6ce
children 584591f8203c
rev   line source
100
933bbc9fc11f Added license file and license headers.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 93
diff changeset
1 /*
933bbc9fc11f Added license file and license headers.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 93
diff changeset
2 * Copyright (c) 2010 by Intevation GmbH
933bbc9fc11f Added license file and license headers.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 93
diff changeset
3 *
933bbc9fc11f Added license file and license headers.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 93
diff changeset
4 * This program is free software under the LGPL (>=v2.1)
933bbc9fc11f Added license file and license headers.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 93
diff changeset
5 * Read the file LGPL.txt coming with the software for details
933bbc9fc11f Added license file and license headers.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 93
diff changeset
6 * or visit http://www.gnu.org/licenses/ if it does not exist.
933bbc9fc11f Added license file and license headers.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 93
diff changeset
7 */
933bbc9fc11f Added license file and license headers.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 93
diff changeset
8
475
415df0fc4fa1 Fixed maven group ids
Sascha L. Teichmann <teichmann@intevation.de>
parents: 473
diff changeset
9 package org.dive4elements.artifactdatabase;
30
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
10
475
415df0fc4fa1 Fixed maven group ids
Sascha L. Teichmann <teichmann@intevation.de>
parents: 473
diff changeset
11 import org.dive4elements.artifacts.common.utils.Config;
415df0fc4fa1 Fixed maven group ids
Sascha L. Teichmann <teichmann@intevation.de>
parents: 473
diff changeset
12 import org.dive4elements.artifacts.common.utils.StringUtils;
207
b2115f484edb Move Config and XMLUtils totally to commons package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 100
diff changeset
13
475
415df0fc4fa1 Fixed maven group ids
Sascha L. Teichmann <teichmann@intevation.de>
parents: 473
diff changeset
14 import org.dive4elements.artifacts.Artifact;
30
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
15
475
415df0fc4fa1 Fixed maven group ids
Sascha L. Teichmann <teichmann@intevation.de>
parents: 473
diff changeset
16 import org.dive4elements.artifactdatabase.db.SQL;
541
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
17 import org.dive4elements.artifactdatabase.db.SQLExecutor;
305
f33401ea2a6c Artifact database: Refactorized the usage of dialect independent SQL to be reusable.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 301
diff changeset
18
30
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
19 import java.sql.PreparedStatement;
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
20 import java.sql.ResultSet;
93
e27cf9c84eb8 Unified imports.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 91
diff changeset
21 import java.sql.SQLException;
e27cf9c84eb8 Unified imports.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 91
diff changeset
22
e27cf9c84eb8 Unified imports.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 91
diff changeset
23 import java.util.ArrayList;
e27cf9c84eb8 Unified imports.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 91
diff changeset
24 import java.util.List;
230
fbd57d2eeaef Changed semantics of locked artifact ids.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 207
diff changeset
25 import java.util.Set;
542
9497f58484a0 Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 541
diff changeset
26 import java.util.HashSet;
230
fbd57d2eeaef Changed semantics of locked artifact ids.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 207
diff changeset
27 import java.util.Collections;
30
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
28
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
29 import org.apache.log4j.Logger;
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
30
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
31 /**
90
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
32 * The database cleaner runs in background. It sleep for a configurable
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
33 * while and when it wakes up it removes outdated artifacts from the
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
34 * database. Outdated means that the the last access to the artifact
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
35 * is longer aga then the time to live of this artifact.<br>
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
36 * Before the artifact is finally removed from the system it is
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
37 * revived one last time an the #endOfLife() method of the artifact
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
38 * is called.<br>
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
39 * The artifact implementations may e.g. use this to remove some extrenal
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
40 * resources form the system.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
41 *
80
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 48
diff changeset
42 * @author <a href="mailto:sascha.teichmann@intevation.de">Sascha L. Teichmann</a>
30
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
43 */
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
44 public class DatabaseCleaner
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
45 extends Thread
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
46 {
90
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
47 /**
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
48 * Implementors of this interface are able to create a
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
49 * living artifact from a given byte array.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
50 */
41
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 32
diff changeset
51 public interface ArtifactReviver {
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 32
diff changeset
52
90
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
53 /**
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
54 * Called to revive an artifact from a given byte array.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
55 * @param factoryName The name of the factory which
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
56 * created this artifact.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
57 * @param bytes The bytes of the serialized artifact.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
58 * @return The revived artfiact.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
59 */
41
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 32
diff changeset
60 Artifact reviveArtifact(String factoryName, byte [] bytes);
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 32
diff changeset
61
314
31ee2b3b5a57 forward list of deleted collections and artifacts from data cleaner to backend to backend listeners.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 305
diff changeset
62 void killedArtifacts(List<String> identifiers);
31ee2b3b5a57 forward list of deleted collections and artifacts from data cleaner to backend to backend listeners.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 305
diff changeset
63 void killedCollections(List<String> identifiers);
31ee2b3b5a57 forward list of deleted collections and artifacts from data cleaner to backend to backend listeners.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 305
diff changeset
64
41
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 32
diff changeset
65 } // interface ArtifactReviver
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 32
diff changeset
66
230
fbd57d2eeaef Changed semantics of locked artifact ids.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 207
diff changeset
67 public interface LockedIdsProvider {
fbd57d2eeaef Changed semantics of locked artifact ids.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 207
diff changeset
68 Set<Integer> getLockedIds();
fbd57d2eeaef Changed semantics of locked artifact ids.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 207
diff changeset
69 } // interface LockedIdsProvider
fbd57d2eeaef Changed semantics of locked artifact ids.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 207
diff changeset
70
30
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
71 private static Logger logger = Logger.getLogger(DatabaseCleaner.class);
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
72
90
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
73 /**
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
74 * Number of artifacts to be loaded at once. Used to
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
75 * mitigate the problem of a massive denial of service
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
76 * if too many artifacts have died since last cleanup.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
77 */
30
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
78 public static final int MAX_ROWS = 50;
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
79
230
fbd57d2eeaef Changed semantics of locked artifact ids.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 207
diff changeset
80 public static final Set<Integer> EMPTY_IDS = Collections.emptySet();
fbd57d2eeaef Changed semantics of locked artifact ids.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 207
diff changeset
81
90
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
82 /**
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
83 * The SQL statement to select the outdated artifacts.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
84 */
305
f33401ea2a6c Artifact database: Refactorized the usage of dialect independent SQL to be reusable.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 301
diff changeset
85 public String SQL_OUTDATED;
30
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
86
305
f33401ea2a6c Artifact database: Refactorized the usage of dialect independent SQL to be reusable.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 301
diff changeset
87 public String SQL_OUTDATED_COLLECTIONS;
f33401ea2a6c Artifact database: Refactorized the usage of dialect independent SQL to be reusable.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 301
diff changeset
88 public String SQL_DELETE_COLLECTION_ITEMS;
f33401ea2a6c Artifact database: Refactorized the usage of dialect independent SQL to be reusable.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 301
diff changeset
89 public String SQL_DELETE_COLLECTION;
542
9497f58484a0 Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 541
diff changeset
90 public String SQL_COLLECTION_ITEMS_ARTIFACT_IDS;
232
202b6ae2fcad Database cleaner: Removes outdated collections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 231
diff changeset
91
90
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
92 /**
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
93 * The SQL statement to delete some artifacts from the database.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
94 */
305
f33401ea2a6c Artifact database: Refactorized the usage of dialect independent SQL to be reusable.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 301
diff changeset
95 public String SQL_DELETE_ARTIFACT;
30
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
96
90
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
97 /**
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
98 * XPath to figure out how long the cleaner should sleep between
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
99 * cleanups. This is stored in the global configuration.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
100 */
30
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
101 public static final String SLEEP_XPATH =
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
102 "/artifact-database/cleaner/sleep-time/text()";
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
103
90
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
104 /**
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
105 * Default nap time between cleanups: 5 minutes.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
106 */
30
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
107 public static final long SLEEP_DEFAULT =
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
108 5 * 60 * 1000L; // 5 minutes
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
109
90
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
110 /**
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
111 * The configured nap time.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
112 */
30
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
113 protected long sleepTime;
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
114
90
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
115 /**
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
116 * Internal locking mechanism to prevent some race conditions.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
117 */
30
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
118 protected Object sleepLock = new Object();
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
119
90
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
120 /**
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
121 * A reference to the global context.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
122 */
30
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
123 protected Object context;
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
124
90
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
125 /**
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
126 * A specialized Id filter which only delete some artifacts.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
127 * This is used to prevent deletion of living artifacts.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
128 */
230
fbd57d2eeaef Changed semantics of locked artifact ids.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 207
diff changeset
129 protected LockedIdsProvider lockedIdsProvider;
32
c2d53bd30ab8 Re-factored artifact API for better integration of background processing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 30
diff changeset
130
90
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
131 /**
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
132 * The reviver used to bring the dead artifact on last
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
133 * time back to live to call endOfLife() on them.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
134 */
41
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 32
diff changeset
135 protected ArtifactReviver reviver;
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 32
diff changeset
136
541
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
137 protected SQLExecutor sqlExecutor;
305
f33401ea2a6c Artifact database: Refactorized the usage of dialect independent SQL to be reusable.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 301
diff changeset
138
90
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
139 /**
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
140 * Default constructor.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
141 */
30
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
142 public DatabaseCleaner() {
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
143 }
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
144
90
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
145 /**
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
146 * Constructor to create a cleaner with a given global context
91
730ff077a58c More javadoc, some code formatting.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 90
diff changeset
147 * and a given reviver.
90
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
148 * @param context The global context of the artifact database
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
149 * @param reviver The reviver to awake artifact one last time.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
150 */
541
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
151 public DatabaseCleaner(
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
152 Object context,
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
153 ArtifactReviver reviver,
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
154 SQLExecutor sqlExecutor,
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
155 DBConfig config
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
156 ) {
30
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
157 setDaemon(true);
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
158 sleepTime = getSleepTime();
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
159 this.context = context;
41
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 32
diff changeset
160 this.reviver = reviver;
541
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
161 this.sqlExecutor = sqlExecutor;
305
f33401ea2a6c Artifact database: Refactorized the usage of dialect independent SQL to be reusable.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 301
diff changeset
162 setupSQL(config.getSQL());
f33401ea2a6c Artifact database: Refactorized the usage of dialect independent SQL to be reusable.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 301
diff changeset
163 }
f33401ea2a6c Artifact database: Refactorized the usage of dialect independent SQL to be reusable.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 301
diff changeset
164
f33401ea2a6c Artifact database: Refactorized the usage of dialect independent SQL to be reusable.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 301
diff changeset
165 protected void setupSQL(SQL sql) {
542
9497f58484a0 Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 541
diff changeset
166 SQL_OUTDATED = sql.get("artifacts.outdated");
9497f58484a0 Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 541
diff changeset
167 SQL_OUTDATED_COLLECTIONS = sql.get("collections.outdated");
9497f58484a0 Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 541
diff changeset
168 SQL_DELETE_COLLECTION_ITEMS = sql.get("delete.collection.items");
9497f58484a0 Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 541
diff changeset
169 SQL_DELETE_COLLECTION = sql.get("delete.collection");
9497f58484a0 Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 541
diff changeset
170 SQL_DELETE_ARTIFACT = sql.get("artifacts.delete");
9497f58484a0 Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 541
diff changeset
171 SQL_COLLECTION_ITEMS_ARTIFACT_IDS = sql.get("collection.items.artifact.id");
30
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
172 }
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
173
90
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
174 /**
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
175 * Sets the filter that prevents deletion of living artifacts.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
176 * Living artifacts are artifacts which are currently active
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
177 * inside the artifact database. Deleting them in this state
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
178 * would create severe internal problems.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
179 */
230
fbd57d2eeaef Changed semantics of locked artifact ids.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 207
diff changeset
180 public void setLockedIdsProvider(LockedIdsProvider lockedIdsProvider) {
fbd57d2eeaef Changed semantics of locked artifact ids.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 207
diff changeset
181 this.lockedIdsProvider = lockedIdsProvider;
32
c2d53bd30ab8 Re-factored artifact API for better integration of background processing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 30
diff changeset
182 }
c2d53bd30ab8 Re-factored artifact API for better integration of background processing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 30
diff changeset
183
90
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
184 /**
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
185 * External hook to tell the cleaner to wake up before its
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
186 * regular nap time is over. This is the case when the artifact
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
187 * database finds an artifact which is already outdated.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
188 */
30
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
189 public void wakeup() {
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
190 synchronized (sleepLock) {
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
191 sleepLock.notify();
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
192 }
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
193 }
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
194
90
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
195 /**
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
196 * Fetches the sleep time from the global configuration.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
197 * @return the time to sleep between database cleanups in ms.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
198 */
30
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
199 protected static long getSleepTime() {
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
200 String sleepTimeString = Config.getStringXPath(SLEEP_XPATH);
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
201
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
202 if (sleepTimeString == null) {
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
203 return SLEEP_DEFAULT;
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
204 }
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
205 try {
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
206 // sleep at least one second
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
207 return Math.max(Long.parseLong(sleepTimeString), 1000L);
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
208 }
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
209 catch (NumberFormatException nfe) {
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
210 logger.warn("Cleaner sleep time defaults to " + SLEEP_DEFAULT);
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
211 }
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
212 return SLEEP_DEFAULT;
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
213 }
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
214
314
31ee2b3b5a57 forward list of deleted collections and artifacts from data cleaner to backend to backend listeners.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 305
diff changeset
215 private static class IdIdentifier {
230
fbd57d2eeaef Changed semantics of locked artifact ids.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 207
diff changeset
216
fbd57d2eeaef Changed semantics of locked artifact ids.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 207
diff changeset
217 int id;
314
31ee2b3b5a57 forward list of deleted collections and artifacts from data cleaner to backend to backend listeners.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 305
diff changeset
218 String identifier;
31ee2b3b5a57 forward list of deleted collections and artifacts from data cleaner to backend to backend listeners.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 305
diff changeset
219
31ee2b3b5a57 forward list of deleted collections and artifacts from data cleaner to backend to backend listeners.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 305
diff changeset
220 private IdIdentifier(int id, String identifier) {
31ee2b3b5a57 forward list of deleted collections and artifacts from data cleaner to backend to backend listeners.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 305
diff changeset
221 this.id = id;
31ee2b3b5a57 forward list of deleted collections and artifacts from data cleaner to backend to backend listeners.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 305
diff changeset
222 this.identifier = identifier;
31ee2b3b5a57 forward list of deleted collections and artifacts from data cleaner to backend to backend listeners.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 305
diff changeset
223 }
31ee2b3b5a57 forward list of deleted collections and artifacts from data cleaner to backend to backend listeners.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 305
diff changeset
224 } // class IdIdentifier
31ee2b3b5a57 forward list of deleted collections and artifacts from data cleaner to backend to backend listeners.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 305
diff changeset
225
394
c40729bfe06d Removed trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 393
diff changeset
226 private static final class IdData
314
31ee2b3b5a57 forward list of deleted collections and artifacts from data cleaner to backend to backend listeners.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 305
diff changeset
227 extends IdIdentifier
31ee2b3b5a57 forward list of deleted collections and artifacts from data cleaner to backend to backend listeners.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 305
diff changeset
228 {
30
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
229 byte [] data;
41
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 32
diff changeset
230 String factoryName;
30
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
231
314
31ee2b3b5a57 forward list of deleted collections and artifacts from data cleaner to backend to backend listeners.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 305
diff changeset
232 public IdData(
31ee2b3b5a57 forward list of deleted collections and artifacts from data cleaner to backend to backend listeners.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 305
diff changeset
233 int id,
394
c40729bfe06d Removed trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 393
diff changeset
234 String factoryName,
314
31ee2b3b5a57 forward list of deleted collections and artifacts from data cleaner to backend to backend listeners.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 305
diff changeset
235 byte [] data,
31ee2b3b5a57 forward list of deleted collections and artifacts from data cleaner to backend to backend listeners.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 305
diff changeset
236 String identifier
31ee2b3b5a57 forward list of deleted collections and artifacts from data cleaner to backend to backend listeners.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 305
diff changeset
237 ) {
31ee2b3b5a57 forward list of deleted collections and artifacts from data cleaner to backend to backend listeners.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 305
diff changeset
238 super(id, identifier);
41
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 32
diff changeset
239 this.factoryName = factoryName;
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 32
diff changeset
240 this.data = data;
30
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
241 }
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
242 } // class IdData
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
243
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
244 /**
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
245 * Cleaning is done in two phases. First we fetch a list of ids
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
246 * of artifacts. If there are artifacts the cleaning is done.
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
247 * Second we load the artifacts one by one one and call there
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
248 * endOfLife() method. In this loop we remove them from database, too.
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
249 * Each deletion is commited to ensure that a sudden failure
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
250 * of the artifact database server does delete artifacts twice
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
251 * or does not delete them at all. After this the first step
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
252 * is repeated.
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
253 */
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
254 protected void cleanup() {
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
255 logger.info("database cleanup");
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
256
541
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
257 final Set<Integer> lockedIds = lockedIdsProvider != null
231
1ea35226a6de Database cleaner: Ignoring locked artifacts is now done on database level.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 230
diff changeset
258 ? lockedIdsProvider.getLockedIds()
1ea35226a6de Database cleaner: Ignoring locked artifacts is now done on database level.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 230
diff changeset
259 : EMPTY_IDS;
1ea35226a6de Database cleaner: Ignoring locked artifacts is now done on database level.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 230
diff changeset
260
541
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
261 final String questionMarks = lockedIds.isEmpty()
241
4253995c970e Fix for flys/issue8 (part 3)
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 238
diff changeset
262 ? "-666" // XXX: A bit hackish.
238
61b7041204a7 Fix for flys/issue8 (part 2)
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 232
diff changeset
263 : StringUtils.repeat('?', lockedIds.size(), ',');
231
1ea35226a6de Database cleaner: Ignoring locked artifacts is now done on database level.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 230
diff changeset
264
541
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
265 final List<String> deletedCollections = new ArrayList<String>();
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
266 final List<String> deletedArtifacts = new ArrayList<String>();
232
202b6ae2fcad Database cleaner: Removes outdated collections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 231
diff changeset
267
541
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
268 SQLExecutor.Instance exec = sqlExecutor.new Instance() {
30
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
269
541
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
270 @Override
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
271 public boolean doIt() throws SQLException {
30
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
272
542
9497f58484a0 Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 541
diff changeset
273 PreparedStatement collectionItems = null;
9497f58484a0 Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 541
diff changeset
274 PreparedStatement fetchIds = null;
9497f58484a0 Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 541
diff changeset
275 PreparedStatement stmnt = null;
9497f58484a0 Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 541
diff changeset
276 ResultSet result = null;
9497f58484a0 Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 541
diff changeset
277
9497f58484a0 Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 541
diff changeset
278 HashSet<Integer> collectionItemsIds =
9497f58484a0 Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 541
diff changeset
279 new HashSet<Integer>();
30
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
280
541
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
281 try {
542
9497f58484a0 Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 541
diff changeset
282 collectionItems = conn.prepareStatement(
9497f58484a0 Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 541
diff changeset
283 SQL_COLLECTION_ITEMS_ARTIFACT_IDS);
9497f58484a0 Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 541
diff changeset
284
9497f58484a0 Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 541
diff changeset
285 result = collectionItems.executeQuery();
9497f58484a0 Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 541
diff changeset
286
9497f58484a0 Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 541
diff changeset
287 while (result.next()) {
9497f58484a0 Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 541
diff changeset
288 collectionItemsIds.add(result.getInt(1));
9497f58484a0 Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 541
diff changeset
289 }
9497f58484a0 Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 541
diff changeset
290 result.close(); result = null;
9497f58484a0 Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 541
diff changeset
291
541
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
292 fetchIds = conn.prepareStatement(
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
293 SQL_OUTDATED.replace("$LOCKED_IDS$", questionMarks));
393
b7831cefbb62 Added some more debug output during the process of removing Artifacts and Collections by the DatabaseCleaner.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 315
diff changeset
294
541
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
295 // Fetch ids of outdated collections
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
296 stmnt = conn.prepareStatement(
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
297 SQL_OUTDATED_COLLECTIONS.replace(
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
298 "$LOCKED_IDS$", questionMarks));
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
299
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
300 // fill in the locked ids
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
301 int idx = 1;
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
302 for (Integer id: lockedIds) {
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
303 fetchIds.setInt(idx, id);
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
304 stmnt .setInt(idx, id);
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
305 ++idx;
30
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
306 }
314
31ee2b3b5a57 forward list of deleted collections and artifacts from data cleaner to backend to backend listeners.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 305
diff changeset
307
541
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
308 ArrayList<IdIdentifier> cs = new ArrayList<IdIdentifier>();
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
309 result = stmnt.executeQuery();
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
310 while (result.next()) {
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
311 cs.add(new IdIdentifier(
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
312 result.getInt(1),
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
313 result.getString(2)));
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
314 }
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
315
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
316 result.close(); result = null;
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
317 stmnt.close(); stmnt = null;
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
318
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
319 // delete collection items
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
320 stmnt = conn.prepareStatement(SQL_DELETE_COLLECTION_ITEMS);
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
321
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
322 for (IdIdentifier id: cs) {
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
323 logger.debug("Mark collection for deletion: " + id.id);
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
324 stmnt.setInt(1, id.id);
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
325 stmnt.execute();
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
326 }
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
327
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
328 stmnt.close(); stmnt = null;
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
329
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
330 // delete collections
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
331 stmnt = conn.prepareStatement(SQL_DELETE_COLLECTION);
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
332
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
333 for (IdIdentifier id: cs) {
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
334 stmnt.setInt(1, id.id);
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
335 stmnt.execute();
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
336 deletedCollections.add(id.identifier);
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
337 }
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
338
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
339 stmnt.close(); stmnt = null;
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
340 conn.commit();
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
341
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
342 cs = null;
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
343
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
344 // remove artifacts
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
345 stmnt = conn.prepareStatement(SQL_DELETE_ARTIFACT);
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
346
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
347 for (;;) {
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
348 List<IdData> ids = new ArrayList<IdData>();
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
349
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
350 result = fetchIds.executeQuery();
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
351
542
9497f58484a0 Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 541
diff changeset
352 int total = 0;
9497f58484a0 Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 541
diff changeset
353
541
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
354 while (result.next()) {
542
9497f58484a0 Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 541
diff changeset
355 total++;
9497f58484a0 Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 541
diff changeset
356 int id = result.getInt(1);
9497f58484a0 Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 541
diff changeset
357 if (!collectionItemsIds.contains(id)) {
9497f58484a0 Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 541
diff changeset
358 ids.add(new IdData(
9497f58484a0 Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 541
diff changeset
359 id,
9497f58484a0 Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 541
diff changeset
360 result.getString(2),
9497f58484a0 Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 541
diff changeset
361 result.getBytes(3),
9497f58484a0 Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 541
diff changeset
362 result.getString(4)));
9497f58484a0 Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 541
diff changeset
363 }
541
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
364 }
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
365
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
366 result.close(); result = null;
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
367
542
9497f58484a0 Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 541
diff changeset
368 if (total == 0) {
9497f58484a0 Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 541
diff changeset
369 break;
9497f58484a0 Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 541
diff changeset
370 }
9497f58484a0 Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 541
diff changeset
371
541
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
372 if (ids.isEmpty()) {
543
e9abf747f6ce issue1847 Remove limit and break on empty ids
Andre Heinecke <andre.heinecke@intevation.de>
parents: 542
diff changeset
373 break;
541
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
374 }
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
375
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
376 for (int i = ids.size()-1; i >= 0; --i) {
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
377 IdData idData = ids.get(i);
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
378 Artifact artifact = reviver.reviveArtifact(
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
379 idData.factoryName, idData.data);
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
380 idData.data = null;
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
381
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
382 logger.debug("Prepare Artifact (id="
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
383 + idData.id + ") for deletion.");
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
384
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
385 stmnt.setInt(1, idData.id);
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
386 stmnt.execute();
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
387 conn.commit();
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
388
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
389 try {
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
390 if (artifact != null) {
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
391 logger.debug("Call endOfLife for Artifact: "
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
392 + artifact.identifier());
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
393
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
394 artifact.endOfLife(context);
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
395 }
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
396 }
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
397 catch (Exception e) {
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
398 logger.error(e.getMessage(), e);
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
399 }
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
400
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
401 deletedArtifacts.add(idData.identifier);
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
402 } // for all fetched data
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
403 }
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
404 }
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
405 finally {
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
406 if (result != null) {
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
407 try { result.close(); }
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
408 catch (SQLException sqle) {}
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
409 }
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
410 if (stmnt != null) {
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
411 try { stmnt.close(); }
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
412 catch (SQLException sqle) {}
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
413 }
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
414 if (fetchIds != null) {
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
415 try { fetchIds.close(); }
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
416 catch (SQLException sqle) {}
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
417 }
542
9497f58484a0 Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 541
diff changeset
418 if (collectionItems != null) {
9497f58484a0 Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 541
diff changeset
419 try { collectionItems.close(); }
9497f58484a0 Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 541
diff changeset
420 catch (SQLException sqle) {}
9497f58484a0 Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 541
diff changeset
421 }
541
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
422 }
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
423 return true;
30
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
424 }
541
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
425 };
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
426
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
427 if (!exec.runWriteNoRollback()) {
3b1e48d22ce0 Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
428 logger.error("Deleting artifacts failed.");
30
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
429 }
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
430
315
03e508e57b85 Generate kill events if and only if there were killed collections or artifacts.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 314
diff changeset
431 if (!deletedCollections.isEmpty()) {
03e508e57b85 Generate kill events if and only if there were killed collections or artifacts.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 314
diff changeset
432 reviver.killedCollections(deletedCollections);
03e508e57b85 Generate kill events if and only if there were killed collections or artifacts.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 314
diff changeset
433 }
03e508e57b85 Generate kill events if and only if there were killed collections or artifacts.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 314
diff changeset
434
03e508e57b85 Generate kill events if and only if there were killed collections or artifacts.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 314
diff changeset
435 if (!deletedArtifacts.isEmpty()) {
03e508e57b85 Generate kill events if and only if there were killed collections or artifacts.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 314
diff changeset
436 reviver.killedArtifacts(deletedArtifacts);
03e508e57b85 Generate kill events if and only if there were killed collections or artifacts.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 314
diff changeset
437 }
314
31ee2b3b5a57 forward list of deleted collections and artifacts from data cleaner to backend to backend listeners.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 305
diff changeset
438
31ee2b3b5a57 forward list of deleted collections and artifacts from data cleaner to backend to backend listeners.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 305
diff changeset
439 if (logger.isDebugEnabled()) {
31ee2b3b5a57 forward list of deleted collections and artifacts from data cleaner to backend to backend listeners.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 305
diff changeset
440 logger.debug(
31ee2b3b5a57 forward list of deleted collections and artifacts from data cleaner to backend to backend listeners.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 305
diff changeset
441 "collections removed: " + deletedCollections.size());
31ee2b3b5a57 forward list of deleted collections and artifacts from data cleaner to backend to backend listeners.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 305
diff changeset
442 logger.debug(
31ee2b3b5a57 forward list of deleted collections and artifacts from data cleaner to backend to backend listeners.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 305
diff changeset
443 "artifacts removed: " + deletedArtifacts.size());
31ee2b3b5a57 forward list of deleted collections and artifacts from data cleaner to backend to backend listeners.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 305
diff changeset
444 }
30
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
445 }
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
446
90
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
447 /**
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
448 * The main code of the cleaner. It sleeps for the configured
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
449 * nap time, cleans up the database, sleeps again and so on.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
450 */
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
451 @Override
30
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
452 public void run() {
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
453 logger.info("sleep time: " + sleepTime + "ms");
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
454 for (;;) {
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
455 cleanup();
48
41c225c8bd41 Add i18n support via "Accept-Language" HTTP headers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 47
diff changeset
456 long startTime = System.currentTimeMillis();
41c225c8bd41 Add i18n support via "Accept-Language" HTTP headers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 47
diff changeset
457
30
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
458 try {
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
459 synchronized (sleepLock) {
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
460 sleepLock.wait(sleepTime);
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
461 }
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
462 }
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
463 catch (InterruptedException ie) {
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
464 }
48
41c225c8bd41 Add i18n support via "Accept-Language" HTTP headers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 47
diff changeset
465
41c225c8bd41 Add i18n support via "Accept-Language" HTTP headers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 47
diff changeset
466 long stopTime = System.currentTimeMillis();
41c225c8bd41 Add i18n support via "Accept-Language" HTTP headers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 47
diff changeset
467
41c225c8bd41 Add i18n support via "Accept-Language" HTTP headers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 47
diff changeset
468 if (logger.isDebugEnabled()) {
41c225c8bd41 Add i18n support via "Accept-Language" HTTP headers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 47
diff changeset
469 logger.debug("Cleaner slept " + (stopTime - startTime) + "ms");
41c225c8bd41 Add i18n support via "Accept-Language" HTTP headers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 47
diff changeset
470 }
30
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
471 } // for (;;)
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
472 }
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
473 }
90
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 80
diff changeset
474 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org