Mercurial > dive4elements > gnv-client
annotate geo-backend/src/main/java/de/intevation/gnv/geobackend/sde/connectionpool/ArcSDEConnectionPool.java @ 879:9bcc423d8d76
Added Support for SpatialQueries using LineString as Geometry of Interest.
geo-backend/trunk@790 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Tim Englich <tim.englich@intevation.de> |
---|---|
date | Tue, 16 Mar 2010 14:07:18 +0000 |
parents | ff1b7967e6b9 |
children | 1c3efbd2fc5a |
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 | 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 | 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 | 23 private static Logger log = Logger |
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 | 26 /** |
27 * The Pool which stores the Connections to the ArcSDE Backend | |
28 */ | |
29 private GenericObjectPool pool = null; | |
30 | |
31 /** | |
32 * @see de.intevation.gnv.geobackend.base.connectionpool.ConnectionPool#closeConnection(java.lang.Object) | |
33 */ | |
34 public void closeConnection(Connection connection) | |
35 throws ConnectionException { | |
36 try { | |
37 this.pool.returnObject(connection); | |
38 } catch (Exception e) { | |
39 log.error(e, e); | |
40 throw new ConnectionException(e); | |
41 } | |
42 | |
43 } | |
44 | |
45 /** | |
46 * @see de.intevation.gnv.geobackend.base.connectionpool.ConnectionPool#getConnection(java.lang.String) | |
47 */ | |
48 public synchronized Connection getConnection(String connectionID) | |
49 throws ConnectionException { | |
50 try { | |
51 Object object = this.pool.borrowObject(); | |
52 | |
53 if (object instanceof Connection) { | |
54 return (Connection) object; | |
55 } else { | |
56 throw new ConnectionException( | |
57 "Created Object is not an java.sql.Connection"); | |
58 } | |
59 | |
60 } catch (Exception e) { | |
61 log.error(e, e); | |
62 throw new ConnectionException(e); | |
63 } | |
64 } | |
65 | |
66 /** | |
67 * @see de.intevation.gnv.geobackend.base.connectionpool.ConnectionPool#initialize(java.util.Properties) | |
68 */ | |
69 public void initialize(Properties properties) { | |
70 log.info("ArcSDEConnectionPool.initialize has been called"); | |
71 log.info("ConnectionPool will be initialized"); | |
72 | |
73 PoolableObjectFactory poolableObjectFactory = new ArcSDEPoolableObjectFactory( | |
74 properties); | |
75 | |
76 int maxActive = Integer.parseInt(properties.getProperty("maxActive", | |
77 "10")); | |
78 long maxWait = Long.parseLong(properties.getProperty("maxWait", | |
79 "" + GenericObjectPool.DEFAULT_MAX_WAIT)); | |
80 int maxIdle = Integer.parseInt(properties.getProperty("maxIdle", | |
81 "" + GenericObjectPool.DEFAULT_MAX_IDLE)); | |
82 int minIdle = Integer.parseInt(properties.getProperty("minIdle", | |
83 "" + GenericObjectPool.DEFAULT_MIN_IDLE)); | |
84 boolean testOnBorrow = Boolean.parseBoolean(properties.getProperty( | |
85 "testOnBorrow", "" + GenericObjectPool.DEFAULT_TEST_ON_BORROW)); | |
86 boolean testOnReturn = Boolean.parseBoolean(properties.getProperty( | |
87 "testOnReturn", "" + GenericObjectPool.DEFAULT_TEST_ON_RETURN)); | |
88 long timeBetweenEvictionRunsMillis = Long | |
89 .parseLong(properties | |
90 .getProperty( | |
91 "timeBetweenEvictionRunsMillis", | |
92 "" | |
93 + GenericObjectPool.DEFAULT_TIME_BETWEEN_EVICTION_RUNS_MILLIS)); | |
94 int numTestsPerEvictionRun = Integer.parseInt(properties.getProperty( | |
95 "numTestsPerEvictionRun", | |
96 "" + GenericObjectPool.DEFAULT_NUM_TESTS_PER_EVICTION_RUN)); | |
97 long minEvictableIdleTimeMillis = Long | |
98 .parseLong(properties | |
99 .getProperty( | |
100 "minEvictableIdleTimeMillis", | |
101 "" | |
102 + GenericObjectPool.DEFAULT_SOFT_MIN_EVICTABLE_IDLE_TIME_MILLIS)); | |
103 boolean testWhileIdle = Boolean.parseBoolean(properties | |
104 .getProperty("testWhileIdle", | |
105 "" + GenericObjectPool.DEFAULT_TEST_WHILE_IDLE)); | |
106 | |
107 log.info("Maximum Number of active Connections: " + maxActive); | |
108 log.info("Maximum Number of waiting: " + maxWait); | |
109 log.info("Maximum Number of idle: " + maxIdle); | |
110 log.info("Minimum Number of idle: " + minIdle); | |
111 log.info("TestOnBorrow: " + testOnBorrow); | |
112 log.info("TestOnReturn: " + testOnReturn); | |
113 log.info("TimeBetweenEvictionRunsMillis: " + timeBetweenEvictionRunsMillis); | |
114 log.info("NumTestsPerEvictionRun: " + numTestsPerEvictionRun); | |
115 log.info("MinEvictableIdleTimeMillis: " + minEvictableIdleTimeMillis); | |
116 log.info("TestWhileIdle: " + testWhileIdle); | |
117 | |
118 this.pool = new GenericObjectPool(poolableObjectFactory, maxActive, | |
119 GenericObjectPool.DEFAULT_WHEN_EXHAUSTED_ACTION, maxWait, | |
120 maxIdle, minIdle, testOnBorrow, testOnReturn, | |
121 timeBetweenEvictionRunsMillis, numTestsPerEvictionRun, | |
122 minEvictableIdleTimeMillis, testWhileIdle); | |
130
e4eacd613356
Implementierung Datenzugriff auf die ArcSDE über java.sql. Methodiken
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
123 } |
e4eacd613356
Implementierung Datenzugriff auf die ArcSDE über java.sql. Methodiken
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
124 } |