annotate geo-backend/src/main/java/de/intevation/gnv/geobackend/sde/connectionpool/ArcSDEConnectionPool.java @ 265:e5379e129799

Fixed issue 34 geo-backend/trunk@215 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Tim Englich <tim.englich@intevation.de>
date Tue, 13 Oct 2009 13:20:26 +0000
parents e4eacd613356
children ff1b7967e6b9
rev   line source
130
e4eacd613356 Implementierung Datenzugriff auf die ArcSDE über java.sql. Methodiken
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
1 package de.intevation.gnv.geobackend.sde.connectionpool;
e4eacd613356 Implementierung Datenzugriff auf die ArcSDE über java.sql. Methodiken
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
2
e4eacd613356 Implementierung Datenzugriff auf die ArcSDE über java.sql. Methodiken
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
3 import java.sql.Connection;
e4eacd613356 Implementierung Datenzugriff auf die ArcSDE über java.sql. Methodiken
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
4 import java.util.Properties;
e4eacd613356 Implementierung Datenzugriff auf die ArcSDE über java.sql. Methodiken
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
5
e4eacd613356 Implementierung Datenzugriff auf die ArcSDE über java.sql. Methodiken
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
6 import org.apache.commons.pool.PoolableObjectFactory;
e4eacd613356 Implementierung Datenzugriff auf die ArcSDE über java.sql. Methodiken
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
7 import org.apache.commons.pool.impl.GenericObjectPool;
e4eacd613356 Implementierung Datenzugriff auf die ArcSDE über java.sql. Methodiken
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
8 import org.apache.log4j.Logger;
e4eacd613356 Implementierung Datenzugriff auf die ArcSDE über java.sql. Methodiken
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
9
e4eacd613356 Implementierung Datenzugriff auf die ArcSDE über java.sql. Methodiken
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
10 import de.intevation.gnv.geobackend.base.connectionpool.ConnectionPool;
e4eacd613356 Implementierung Datenzugriff auf die ArcSDE über java.sql. Methodiken
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
11 import de.intevation.gnv.geobackend.base.connectionpool.exception.ConnectionException;
e4eacd613356 Implementierung Datenzugriff auf die ArcSDE über java.sql. Methodiken
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
12
e4eacd613356 Implementierung Datenzugriff auf die ArcSDE über java.sql. Methodiken
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
13 /**
e4eacd613356 Implementierung Datenzugriff auf die ArcSDE über java.sql. Methodiken
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
14 *This is the ArcSDE specific implementation of the Interface ConnectionPool
265
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
15 *
130
e4eacd613356 Implementierung Datenzugriff auf die ArcSDE über java.sql. Methodiken
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
16 * @author Tim Englich <tim.englich@intevation.de>
e4eacd613356 Implementierung Datenzugriff auf die ArcSDE über java.sql. Methodiken
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
17 */
e4eacd613356 Implementierung Datenzugriff auf die ArcSDE über java.sql. Methodiken
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
18 public class ArcSDEConnectionPool implements ConnectionPool {
e4eacd613356 Implementierung Datenzugriff auf die ArcSDE über java.sql. Methodiken
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
19
265
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
20 /**
130
e4eacd613356 Implementierung Datenzugriff auf die ArcSDE über java.sql. Methodiken
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
21 * the logger, used to log exceptions and additonaly information
e4eacd613356 Implementierung Datenzugriff auf die ArcSDE über java.sql. Methodiken
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
22 */
265
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
23 private static Logger log = Logger
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
24 .getLogger(ArcSDEPoolableObjectFactory.class);
130
e4eacd613356 Implementierung Datenzugriff auf die ArcSDE über java.sql. Methodiken
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
25
265
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
26 /**
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
27 * The Pool which stores the Connections to the ArcSDE Backend
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
28 */
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
29 private GenericObjectPool pool = null;
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
30
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
31 /**
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
32 * @see de.intevation.gnv.geobackend.base.connectionpool.ConnectionPool#closeConnection(java.lang.Object)
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
33 */
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
34 public void closeConnection(Connection connection)
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
35 throws ConnectionException {
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
36
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
37 try {
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
38 // TODO: Muss Connection geschlossen werden?
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
39 this.pool.returnObject(connection);
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
40 } catch (Exception e) {
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
41 log.error(e, e);
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
42 throw new ConnectionException(e);
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
43 }
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
44
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
45 }
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
46
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
47 /**
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
48 * @see de.intevation.gnv.geobackend.base.connectionpool.ConnectionPool#getConnection(java.lang.String)
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
49 */
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
50 public synchronized Connection getConnection(String connectionID)
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
51 throws ConnectionException {
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
52 try {
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
53 Object object = this.pool.borrowObject();
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
54
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
55 if (object instanceof Connection) {
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
56 return (Connection) object;
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
57 } else {
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
58 throw new ConnectionException(
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
59 "Created Object is not an java.sql.Connection");
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
60 }
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
61
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
62 } catch (Exception e) {
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
63 log.error(e, e);
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
64 throw new ConnectionException(e);
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
65 }
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
66 }
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
67
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
68 /**
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
69 * @see de.intevation.gnv.geobackend.base.connectionpool.ConnectionPool#initialize(java.util.Properties)
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
70 */
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
71 public void initialize(Properties properties) {
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
72 log.info("ArcSDEConnectionPool.initialize has been called");
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
73 log.info("ConnectionPool will be initialized");
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
74
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
75 PoolableObjectFactory poolableObjectFactory = new ArcSDEPoolableObjectFactory(
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
76 properties);
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
77
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
78 int maxActive = Integer.parseInt(properties.getProperty("maxActive",
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
79 "10"));
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
80 long maxWait = Long.parseLong(properties.getProperty("maxWait",
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
81 "" + GenericObjectPool.DEFAULT_MAX_WAIT));
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
82 int maxIdle = Integer.parseInt(properties.getProperty("maxIdle",
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
83 "" + GenericObjectPool.DEFAULT_MAX_IDLE));
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
84 int minIdle = Integer.parseInt(properties.getProperty("minIdle",
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
85 "" + GenericObjectPool.DEFAULT_MIN_IDLE));
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
86 boolean testOnBorrow = Boolean.parseBoolean(properties.getProperty(
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
87 "testOnBorrow", "" + GenericObjectPool.DEFAULT_TEST_ON_BORROW));
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
88 boolean testOnReturn = Boolean.parseBoolean(properties.getProperty(
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
89 "testOnReturn", "" + GenericObjectPool.DEFAULT_TEST_ON_RETURN));
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
90 long timeBetweenEvictionRunsMillis = Long
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
91 .parseLong(properties
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
92 .getProperty(
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
93 "timeBetweenEvictionRunsMillis",
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
94 ""
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
95 + GenericObjectPool.DEFAULT_TIME_BETWEEN_EVICTION_RUNS_MILLIS));
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
96 int numTestsPerEvictionRun = Integer.parseInt(properties.getProperty(
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
97 "numTestsPerEvictionRun",
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
98 "" + GenericObjectPool.DEFAULT_NUM_TESTS_PER_EVICTION_RUN));
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
99 long minEvictableIdleTimeMillis = Long
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
100 .parseLong(properties
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
101 .getProperty(
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
102 "minEvictableIdleTimeMillis",
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
103 ""
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
104 + GenericObjectPool.DEFAULT_SOFT_MIN_EVICTABLE_IDLE_TIME_MILLIS));
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
105 boolean testWhileIdle = Boolean.parseBoolean(properties
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
106 .getProperty("testWhileIdle",
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
107 "" + GenericObjectPool.DEFAULT_TEST_WHILE_IDLE));
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
108
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
109 log.info("Maximum Number of active Connections: " + maxActive);
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
110 log.info("Maximum Number of waiting: " + maxWait);
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
111 log.info("Maximum Number of idle: " + maxIdle);
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
112 log.info("Minimum Number of idle: " + minIdle);
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
113 log.info("TestOnBorrow: " + testOnBorrow);
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
114 log.info("TestOnReturn: " + testOnReturn);
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
115 log.info("TimeBetweenEvictionRunsMillis: " + timeBetweenEvictionRunsMillis);
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
116 log.info("NumTestsPerEvictionRun: " + numTestsPerEvictionRun);
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
117 log.info("MinEvictableIdleTimeMillis: " + minEvictableIdleTimeMillis);
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
118 log.info("TestWhileIdle: " + testWhileIdle);
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
119
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
120 this.pool = new GenericObjectPool(poolableObjectFactory, maxActive,
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
121 GenericObjectPool.DEFAULT_WHEN_EXHAUSTED_ACTION, maxWait,
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
122 maxIdle, minIdle, testOnBorrow, testOnReturn,
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
123 timeBetweenEvictionRunsMillis, numTestsPerEvictionRun,
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
124 minEvictableIdleTimeMillis, testWhileIdle);
130
e4eacd613356 Implementierung Datenzugriff auf die ArcSDE über java.sql. Methodiken
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
125 }
e4eacd613356 Implementierung Datenzugriff auf die ArcSDE über java.sql. Methodiken
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
126 }

http://dive4elements.wald.intevation.org