Mercurial > dive4elements > framework
annotate artifact-database/src/main/java/org/dive4elements/artifactdatabase/DatabaseCleaner.java @ 585:0960b825516a 3.2.x tip
Ensure the build does not fail due to non-ASCII characters
author | Tom Gottfried <tom@intevation.de> |
---|---|
date | Wed, 15 Nov 2023 10:34:52 +0100 |
parents | 584591f8203c |
children |
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 |
570 | 29 import org.apache.logging.log4j.Logger; |
30 import org.apache.logging.log4j.LogManager; | |
30
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
31 |
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
32 /** |
90
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
33 * 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
|
34 * 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
|
35 * 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
|
36 * 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
|
37 * 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
|
38 * 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
|
39 * is called.<br> |
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
40 * 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
|
41 * resources form the system. |
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
42 * |
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
|
43 * @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
|
44 */ |
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
45 public class DatabaseCleaner |
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
46 extends Thread |
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
47 { |
90
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
48 /** |
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
49 * Implementors of this interface are able to create a |
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
50 * living artifact from a given byte array. |
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
51 */ |
41
5e4bc24ea438
Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
32
diff
changeset
|
52 public interface ArtifactReviver { |
5e4bc24ea438
Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
32
diff
changeset
|
53 |
90
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
54 /** |
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
55 * Called to revive an artifact from a given byte array. |
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
56 * @param factoryName The name of the factory which |
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
57 * created this artifact. |
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
58 * @param bytes The bytes of the serialized artifact. |
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
59 * @return The revived artfiact. |
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
60 */ |
41
5e4bc24ea438
Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
32
diff
changeset
|
61 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
|
62 |
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
|
63 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
|
64 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
|
65 |
41
5e4bc24ea438
Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
32
diff
changeset
|
66 } // interface ArtifactReviver |
5e4bc24ea438
Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
32
diff
changeset
|
67 |
230
fbd57d2eeaef
Changed semantics of locked artifact ids.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
207
diff
changeset
|
68 public interface LockedIdsProvider { |
fbd57d2eeaef
Changed semantics of locked artifact ids.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
207
diff
changeset
|
69 Set<Integer> getLockedIds(); |
fbd57d2eeaef
Changed semantics of locked artifact ids.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
207
diff
changeset
|
70 } // interface LockedIdsProvider |
fbd57d2eeaef
Changed semantics of locked artifact ids.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
207
diff
changeset
|
71 |
570 | 72 private static Logger logger = LogManager.getLogger(DatabaseCleaner.class); |
30
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
73 |
90
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
74 /** |
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
75 * Number of artifacts to be loaded at once. Used to |
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
76 * mitigate the problem of a massive denial of service |
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
77 * if too many artifacts have died since last cleanup. |
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
78 */ |
30
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
79 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
|
80 |
230
fbd57d2eeaef
Changed semantics of locked artifact ids.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
207
diff
changeset
|
81 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
|
82 |
90
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
83 /** |
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
84 * The SQL statement to select the outdated artifacts. |
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
85 */ |
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
|
86 public String SQL_OUTDATED; |
30
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
87 |
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
|
88 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
|
89 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
|
90 public String SQL_DELETE_COLLECTION; |
542
9497f58484a0
Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
541
diff
changeset
|
91 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
|
92 |
90
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
93 /** |
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
94 * The SQL statement to delete some artifacts from the database. |
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
95 */ |
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
|
96 public String SQL_DELETE_ARTIFACT; |
30
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
97 |
90
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
98 /** |
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
99 * 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
|
100 * cleanups. This is stored in the global configuration. |
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
101 */ |
30
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
102 public static final String SLEEP_XPATH = |
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
103 "/artifact-database/cleaner/sleep-time/text()"; |
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
104 |
90
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
105 /** |
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
106 * Default nap time between cleanups: 5 minutes. |
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
107 */ |
30
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
108 public static final long SLEEP_DEFAULT = |
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
109 5 * 60 * 1000L; // 5 minutes |
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
110 |
90
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
111 /** |
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
112 * The configured nap time. |
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
113 */ |
30
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
114 protected long sleepTime; |
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
115 |
90
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
116 /** |
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
117 * Internal locking mechanism to prevent some race conditions. |
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
118 */ |
30
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
119 protected Object sleepLock = new Object(); |
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
120 |
90
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
121 /** |
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
122 * A reference to the global context. |
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
123 */ |
30
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
124 protected Object context; |
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
125 |
90
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
126 /** |
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
127 * A specialized Id filter which only delete some artifacts. |
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
128 * This is used to prevent deletion of living artifacts. |
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
129 */ |
230
fbd57d2eeaef
Changed semantics of locked artifact ids.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
207
diff
changeset
|
130 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
|
131 |
90
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
132 /** |
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
133 * The reviver used to bring the dead artifact on last |
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
134 * time back to live to call endOfLife() on them. |
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
135 */ |
41
5e4bc24ea438
Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
32
diff
changeset
|
136 protected ArtifactReviver reviver; |
5e4bc24ea438
Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
32
diff
changeset
|
137 |
541
3b1e48d22ce0
Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
475
diff
changeset
|
138 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
|
139 |
90
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
140 /** |
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
141 * Default constructor. |
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
142 */ |
30
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
143 public DatabaseCleaner() { |
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
144 } |
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
145 |
90
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
146 /** |
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
147 * 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
|
148 * and a given reviver. |
90
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
149 * @param context The global context of the artifact database |
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
150 * @param reviver The reviver to awake artifact one last time. |
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
151 */ |
541
3b1e48d22ce0
Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
475
diff
changeset
|
152 public DatabaseCleaner( |
3b1e48d22ce0
Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
475
diff
changeset
|
153 Object context, |
3b1e48d22ce0
Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
475
diff
changeset
|
154 ArtifactReviver reviver, |
3b1e48d22ce0
Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
475
diff
changeset
|
155 SQLExecutor sqlExecutor, |
3b1e48d22ce0
Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
475
diff
changeset
|
156 DBConfig config |
3b1e48d22ce0
Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
475
diff
changeset
|
157 ) { |
30
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
158 setDaemon(true); |
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
159 sleepTime = getSleepTime(); |
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
160 this.context = context; |
41
5e4bc24ea438
Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
32
diff
changeset
|
161 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
|
162 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
|
163 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
|
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 |
f33401ea2a6c
Artifact database: Refactorized the usage of dialect independent SQL to be reusable.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
301
diff
changeset
|
166 protected void setupSQL(SQL sql) { |
542
9497f58484a0
Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
541
diff
changeset
|
167 SQL_OUTDATED = sql.get("artifacts.outdated"); |
9497f58484a0
Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
541
diff
changeset
|
168 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
|
169 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
|
170 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
|
171 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
|
172 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
|
173 } |
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
174 |
90
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
175 /** |
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
176 * Sets the filter that prevents deletion of living artifacts. |
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
177 * Living artifacts are artifacts which are currently active |
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
178 * inside the artifact database. Deleting them in this state |
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
179 * would create severe internal problems. |
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
180 */ |
230
fbd57d2eeaef
Changed semantics of locked artifact ids.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
207
diff
changeset
|
181 public void setLockedIdsProvider(LockedIdsProvider lockedIdsProvider) { |
fbd57d2eeaef
Changed semantics of locked artifact ids.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
207
diff
changeset
|
182 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
|
183 } |
c2d53bd30ab8
Re-factored artifact API for better integration of background processing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
30
diff
changeset
|
184 |
90
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
185 /** |
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
186 * 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
|
187 * 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
|
188 * database finds an artifact which is already outdated. |
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
189 */ |
30
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
190 public void wakeup() { |
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
191 synchronized (sleepLock) { |
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
192 sleepLock.notify(); |
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 } |
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
195 |
90
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
196 /** |
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
197 * Fetches the sleep time from the global configuration. |
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
198 * @return the time to sleep between database cleanups in ms. |
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
199 */ |
30
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
200 protected static long getSleepTime() { |
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
201 String sleepTimeString = Config.getStringXPath(SLEEP_XPATH); |
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
202 |
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
203 if (sleepTimeString == null) { |
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
204 return SLEEP_DEFAULT; |
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
205 } |
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
206 try { |
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
207 // sleep at least one second |
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
208 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
|
209 } |
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
210 catch (NumberFormatException nfe) { |
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
211 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
|
212 } |
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
213 return SLEEP_DEFAULT; |
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
214 } |
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
215 |
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
|
216 private static class IdIdentifier { |
230
fbd57d2eeaef
Changed semantics of locked artifact ids.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
207
diff
changeset
|
217 |
fbd57d2eeaef
Changed semantics of locked artifact ids.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
207
diff
changeset
|
218 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
|
219 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
|
220 |
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 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
|
222 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
|
223 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
|
224 } |
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 } // 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
|
226 |
394
c40729bfe06d
Removed trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
393
diff
changeset
|
227 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
|
228 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
|
229 { |
30
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
230 byte [] data; |
41
5e4bc24ea438
Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
32
diff
changeset
|
231 String factoryName; |
30
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
232 |
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
|
233 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
|
234 int id, |
394
c40729bfe06d
Removed trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
393
diff
changeset
|
235 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
|
236 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
|
237 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
|
238 ) { |
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
|
239 super(id, identifier); |
41
5e4bc24ea438
Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
32
diff
changeset
|
240 this.factoryName = factoryName; |
5e4bc24ea438
Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
32
diff
changeset
|
241 this.data = data; |
30
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
242 } |
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
243 } // class IdData |
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 /** |
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
246 * 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
|
247 * 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
|
248 * 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
|
249 * 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
|
250 * 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
|
251 * 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
|
252 * 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
|
253 * is repeated. |
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
254 */ |
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
255 protected void cleanup() { |
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
256 logger.info("database cleanup"); |
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
257 |
541
3b1e48d22ce0
Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
475
diff
changeset
|
258 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
|
259 ? 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
|
260 : 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
|
261 |
541
3b1e48d22ce0
Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
475
diff
changeset
|
262 final String questionMarks = lockedIds.isEmpty() |
241
4253995c970e
Fix for flys/issue8 (part 3)
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
238
diff
changeset
|
263 ? "-666" // XXX: A bit hackish. |
238
61b7041204a7
Fix for flys/issue8 (part 2)
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
232
diff
changeset
|
264 : 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
|
265 |
541
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> 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
|
267 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
|
268 |
541
3b1e48d22ce0
Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
475
diff
changeset
|
269 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
|
270 |
541
3b1e48d22ce0
Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
475
diff
changeset
|
271 @Override |
3b1e48d22ce0
Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
475
diff
changeset
|
272 public boolean doIt() throws SQLException { |
30
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
273 |
542
9497f58484a0
Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
541
diff
changeset
|
274 PreparedStatement collectionItems = null; |
9497f58484a0
Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
541
diff
changeset
|
275 PreparedStatement fetchIds = null; |
9497f58484a0
Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
541
diff
changeset
|
276 PreparedStatement stmnt = null; |
9497f58484a0
Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
541
diff
changeset
|
277 ResultSet result = null; |
9497f58484a0
Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
541
diff
changeset
|
278 |
9497f58484a0
Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
541
diff
changeset
|
279 HashSet<Integer> collectionItemsIds = |
9497f58484a0
Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
541
diff
changeset
|
280 new HashSet<Integer>(); |
30
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
281 |
541
3b1e48d22ce0
Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
475
diff
changeset
|
282 try { |
542
9497f58484a0
Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
541
diff
changeset
|
283 collectionItems = conn.prepareStatement( |
9497f58484a0
Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
541
diff
changeset
|
284 SQL_COLLECTION_ITEMS_ARTIFACT_IDS); |
9497f58484a0
Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
541
diff
changeset
|
285 |
9497f58484a0
Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
541
diff
changeset
|
286 result = collectionItems.executeQuery(); |
9497f58484a0
Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
541
diff
changeset
|
287 |
9497f58484a0
Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
541
diff
changeset
|
288 while (result.next()) { |
9497f58484a0
Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
541
diff
changeset
|
289 collectionItemsIds.add(result.getInt(1)); |
9497f58484a0
Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
541
diff
changeset
|
290 } |
9497f58484a0
Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
541
diff
changeset
|
291 result.close(); result = null; |
9497f58484a0
Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
541
diff
changeset
|
292 |
541
3b1e48d22ce0
Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
475
diff
changeset
|
293 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
|
294 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
|
295 |
541
3b1e48d22ce0
Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
475
diff
changeset
|
296 // 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
|
297 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
|
298 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
|
299 "$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
|
300 |
3b1e48d22ce0
Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
475
diff
changeset
|
301 // 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
|
302 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
|
303 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
|
304 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
|
305 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
|
306 ++idx; |
30
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
307 } |
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
|
308 |
541
3b1e48d22ce0
Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
475
diff
changeset
|
309 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
|
310 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
|
311 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
|
312 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
|
313 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
|
314 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
|
315 } |
3b1e48d22ce0
Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
475
diff
changeset
|
316 |
3b1e48d22ce0
Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
475
diff
changeset
|
317 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
|
318 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
|
319 |
3b1e48d22ce0
Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
475
diff
changeset
|
320 // 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 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
|
322 |
3b1e48d22ce0
Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
475
diff
changeset
|
323 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
|
324 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
|
325 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
|
326 stmnt.execute(); |
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 |
3b1e48d22ce0
Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
475
diff
changeset
|
329 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
|
330 |
3b1e48d22ce0
Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
475
diff
changeset
|
331 // delete collections |
3b1e48d22ce0
Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
475
diff
changeset
|
332 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
|
333 |
3b1e48d22ce0
Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
475
diff
changeset
|
334 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
|
335 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
|
336 stmnt.execute(); |
3b1e48d22ce0
Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
475
diff
changeset
|
337 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
|
338 } |
3b1e48d22ce0
Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
475
diff
changeset
|
339 |
3b1e48d22ce0
Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
475
diff
changeset
|
340 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
|
341 conn.commit(); |
3b1e48d22ce0
Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
475
diff
changeset
|
342 |
3b1e48d22ce0
Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
475
diff
changeset
|
343 cs = null; |
3b1e48d22ce0
Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
475
diff
changeset
|
344 |
3b1e48d22ce0
Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
475
diff
changeset
|
345 // remove artifacts |
3b1e48d22ce0
Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
475
diff
changeset
|
346 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
|
347 |
3b1e48d22ce0
Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
475
diff
changeset
|
348 for (;;) { |
3b1e48d22ce0
Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
475
diff
changeset
|
349 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
|
350 |
3b1e48d22ce0
Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
475
diff
changeset
|
351 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
|
352 |
542
9497f58484a0
Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
541
diff
changeset
|
353 int total = 0; |
9497f58484a0
Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
541
diff
changeset
|
354 |
541
3b1e48d22ce0
Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
475
diff
changeset
|
355 while (result.next()) { |
542
9497f58484a0
Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
541
diff
changeset
|
356 total++; |
9497f58484a0
Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
541
diff
changeset
|
357 int id = result.getInt(1); |
9497f58484a0
Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
541
diff
changeset
|
358 if (!collectionItemsIds.contains(id)) { |
9497f58484a0
Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
541
diff
changeset
|
359 ids.add(new IdData( |
9497f58484a0
Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
541
diff
changeset
|
360 id, |
9497f58484a0
Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
541
diff
changeset
|
361 result.getString(2), |
9497f58484a0
Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
541
diff
changeset
|
362 result.getBytes(3), |
9497f58484a0
Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
541
diff
changeset
|
363 result.getString(4))); |
9497f58484a0
Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
541
diff
changeset
|
364 } |
541
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 |
3b1e48d22ce0
Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
475
diff
changeset
|
367 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
|
368 |
542
9497f58484a0
Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
541
diff
changeset
|
369 if (total == 0) { |
9497f58484a0
Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
541
diff
changeset
|
370 break; |
9497f58484a0
Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
541
diff
changeset
|
371 } |
9497f58484a0
Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
541
diff
changeset
|
372 |
541
3b1e48d22ce0
Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
475
diff
changeset
|
373 if (ids.isEmpty()) { |
543
e9abf747f6ce
issue1847 Remove limit and break on empty ids
Andre Heinecke <andre.heinecke@intevation.de>
parents:
542
diff
changeset
|
374 break; |
541
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 |
3b1e48d22ce0
Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
475
diff
changeset
|
377 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
|
378 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
|
379 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
|
380 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
|
381 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
|
382 |
3b1e48d22ce0
Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
475
diff
changeset
|
383 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
|
384 + 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
|
385 |
3b1e48d22ce0
Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
475
diff
changeset
|
386 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
|
387 stmnt.execute(); |
3b1e48d22ce0
Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
475
diff
changeset
|
388 conn.commit(); |
3b1e48d22ce0
Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
475
diff
changeset
|
389 |
3b1e48d22ce0
Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
475
diff
changeset
|
390 try { |
3b1e48d22ce0
Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
475
diff
changeset
|
391 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
|
392 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
|
393 + artifact.identifier()); |
3b1e48d22ce0
Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
475
diff
changeset
|
394 |
3b1e48d22ce0
Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
475
diff
changeset
|
395 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
|
396 } |
3b1e48d22ce0
Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
475
diff
changeset
|
397 } |
3b1e48d22ce0
Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
475
diff
changeset
|
398 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
|
399 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
|
400 } |
3b1e48d22ce0
Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
475
diff
changeset
|
401 |
3b1e48d22ce0
Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
475
diff
changeset
|
402 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
|
403 } // 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
|
404 } |
3b1e48d22ce0
Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
475
diff
changeset
|
405 } |
3b1e48d22ce0
Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
475
diff
changeset
|
406 finally { |
3b1e48d22ce0
Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
475
diff
changeset
|
407 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
|
408 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
|
409 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
|
410 } |
3b1e48d22ce0
Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
475
diff
changeset
|
411 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
|
412 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
|
413 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
|
414 } |
3b1e48d22ce0
Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
475
diff
changeset
|
415 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
|
416 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
|
417 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
|
418 } |
542
9497f58484a0
Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
541
diff
changeset
|
419 if (collectionItems != null) { |
9497f58484a0
Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
541
diff
changeset
|
420 try { collectionItems.close(); } |
9497f58484a0
Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
541
diff
changeset
|
421 catch (SQLException sqle) {} |
9497f58484a0
Ugly: Filter collection items in user land.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
541
diff
changeset
|
422 } |
541
3b1e48d22ce0
Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
475
diff
changeset
|
423 } |
3b1e48d22ce0
Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
475
diff
changeset
|
424 return true; |
30
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
425 } |
541
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 |
3b1e48d22ce0
Experimentally let database cleaner and backend share the same sql executor.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
475
diff
changeset
|
428 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
|
429 logger.error("Deleting artifacts failed."); |
30
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
430 } |
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
431 |
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
|
432 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
|
433 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
|
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 |
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 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
|
437 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
|
438 } |
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
|
439 |
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 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
|
441 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
|
442 "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
|
443 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
|
444 "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
|
445 } |
30
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
446 } |
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
447 |
90
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
448 /** |
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
449 * 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
|
450 * 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
|
451 */ |
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
452 @Override |
30
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
453 public void run() { |
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
454 logger.info("sleep time: " + sleepTime + "ms"); |
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
455 for (;;) { |
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
456 cleanup(); |
48
41c225c8bd41
Add i18n support via "Accept-Language" HTTP headers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
47
diff
changeset
|
457 long startTime = System.currentTimeMillis(); |
41c225c8bd41
Add i18n support via "Accept-Language" HTTP headers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
47
diff
changeset
|
458 |
30
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
459 try { |
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
460 synchronized (sleepLock) { |
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
461 sleepLock.wait(sleepTime); |
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 } |
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
464 catch (InterruptedException ie) { |
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
465 } |
48
41c225c8bd41
Add i18n support via "Accept-Language" HTTP headers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
47
diff
changeset
|
466 |
41c225c8bd41
Add i18n support via "Accept-Language" HTTP headers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
47
diff
changeset
|
467 long stopTime = System.currentTimeMillis(); |
41c225c8bd41
Add i18n support via "Accept-Language" HTTP headers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
47
diff
changeset
|
468 |
41c225c8bd41
Add i18n support via "Accept-Language" HTTP headers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
47
diff
changeset
|
469 if (logger.isDebugEnabled()) { |
41c225c8bd41
Add i18n support via "Accept-Language" HTTP headers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
47
diff
changeset
|
470 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
|
471 } |
30
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
472 } // for (;;) |
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
473 } |
88972c6daa4f
Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
474 } |
90
68285f7bc476
More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
80
diff
changeset
|
475 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |