annotate geo-backend/src/main/java/de/intevation/gnv/geobackend/sde/connectionpool/ArcSDEPoolableObjectFactory.java @ 551:1f6e2b256247

Improved the Objectvalidation of the ArcSDE-Databaseconnections geo-backend/trunk@544 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Tim Englich <tim.englich@intevation.de>
date Fri, 15 Jan 2010 10:09:41 +0000
parents ff1b7967e6b9
children 5b536542ef56
rev   line source
130
e4eacd613356 Implementierung Datenzugriff auf die ArcSDE über java.sql. Methodiken
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
1 /**
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 */
e4eacd613356 Implementierung Datenzugriff auf die ArcSDE über java.sql. Methodiken
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
4 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
5
e4eacd613356 Implementierung Datenzugriff auf die ArcSDE über java.sql. Methodiken
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
6 import java.sql.Connection;
265
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
7 import java.sql.SQLException;
130
e4eacd613356 Implementierung Datenzugriff auf die ArcSDE über java.sql. Methodiken
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
8 import java.util.Properties;
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 org.apache.commons.pool.PoolableObjectFactory;
e4eacd613356 Implementierung Datenzugriff auf die ArcSDE über java.sql. Methodiken
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
11 import org.apache.log4j.Logger;
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 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
14 import de.intevation.gnv.geobackend.sde.datasources.ArcSDEConnection;
e4eacd613356 Implementierung Datenzugriff auf die ArcSDE über java.sql. Methodiken
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
15
e4eacd613356 Implementierung Datenzugriff auf die ArcSDE über java.sql. Methodiken
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
16 /**
e4eacd613356 Implementierung Datenzugriff auf die ArcSDE über java.sql. Methodiken
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
17 * @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
18 *
e4eacd613356 Implementierung Datenzugriff auf die ArcSDE über java.sql. Methodiken
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
19 */
e4eacd613356 Implementierung Datenzugriff auf die ArcSDE über java.sql. Methodiken
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
20 public class ArcSDEPoolableObjectFactory implements PoolableObjectFactory {
e4eacd613356 Implementierung Datenzugriff auf die ArcSDE über java.sql. Methodiken
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
21
274
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
22 /**
130
e4eacd613356 Implementierung Datenzugriff auf die ArcSDE über java.sql. Methodiken
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
23 * 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
24 */
e4eacd613356 Implementierung Datenzugriff auf die ArcSDE über java.sql. Methodiken
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
25 private static Logger log = Logger.getLogger(ArcSDEPoolableObjectFactory.class);
551
1f6e2b256247 Improved the Objectvalidation of the ArcSDE-Databaseconnections
Tim Englich <tim.englich@intevation.de>
parents: 274
diff changeset
26
1f6e2b256247 Improved the Objectvalidation of the ArcSDE-Databaseconnections
Tim Englich <tim.englich@intevation.de>
parents: 274
diff changeset
27 private int serverRoundtripInterval = 1000 * 30;// 30 Sekunden
274
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
28 /**
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
29 * The URL to the ArcSDE Server
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
30 */
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
31 private String server = null;
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
32 /**
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
33 * The Port the ArcSDE Server is connected to.
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
34 */
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
35 private String port = null;
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
36 /**
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
37 * The Name of the Database
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
38 */
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
39 private String database = null;
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
40 /**
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
41 * The Username for the Authentication
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
42 */
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
43 private String username = null;
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
44 /**
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
45 * The Credentials which belongs to the User
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
46 */
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
47 private String credentials = null;
130
e4eacd613356 Implementierung Datenzugriff auf die ArcSDE über java.sql. Methodiken
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
48
274
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
49 /**
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
50 * Constructor of this Class
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
51 * @param properties the Properties which includes the ConnectionParams to the Database
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
52 */
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
53 public ArcSDEPoolableObjectFactory(Properties properties) {
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
54 log.debug("ArcSDEPoolableObjectFactory.Constructor");
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
55 this.server = properties.getProperty("server");
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
56 this.port = properties.getProperty("port");
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
57 this.database = properties.getProperty("database");
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
58 this.username = properties.getProperty("username");
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
59 this.credentials = properties.getProperty("credentials");
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
60
551
1f6e2b256247 Improved the Objectvalidation of the ArcSDE-Databaseconnections
Tim Englich <tim.englich@intevation.de>
parents: 274
diff changeset
61 try {
1f6e2b256247 Improved the Objectvalidation of the ArcSDE-Databaseconnections
Tim Englich <tim.englich@intevation.de>
parents: 274
diff changeset
62 String serverRoundtripIntervalValue = properties.getProperty("serverRoundtripInterval");
1f6e2b256247 Improved the Objectvalidation of the ArcSDE-Databaseconnections
Tim Englich <tim.englich@intevation.de>
parents: 274
diff changeset
63 if (serverRoundtripIntervalValue != null){
1f6e2b256247 Improved the Objectvalidation of the ArcSDE-Databaseconnections
Tim Englich <tim.englich@intevation.de>
parents: 274
diff changeset
64 this.serverRoundtripInterval = Integer.parseInt(serverRoundtripIntervalValue);
1f6e2b256247 Improved the Objectvalidation of the ArcSDE-Databaseconnections
Tim Englich <tim.englich@intevation.de>
parents: 274
diff changeset
65 }
1f6e2b256247 Improved the Objectvalidation of the ArcSDE-Databaseconnections
Tim Englich <tim.englich@intevation.de>
parents: 274
diff changeset
66 } catch (NumberFormatException e) {
1f6e2b256247 Improved the Objectvalidation of the ArcSDE-Databaseconnections
Tim Englich <tim.englich@intevation.de>
parents: 274
diff changeset
67 log.error(e,e);
1f6e2b256247 Improved the Objectvalidation of the ArcSDE-Databaseconnections
Tim Englich <tim.englich@intevation.de>
parents: 274
diff changeset
68 }
1f6e2b256247 Improved the Objectvalidation of the ArcSDE-Databaseconnections
Tim Englich <tim.englich@intevation.de>
parents: 274
diff changeset
69
274
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
70 log.info("ArcSDEPoolableObjectFactory initialized");
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
71 log.info("Server: "+this.server);
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
72 log.info("Port: "+this.port);
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
73 log.info("Database: "+this.database);
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
74 log.info("User: "+this.username);
551
1f6e2b256247 Improved the Objectvalidation of the ArcSDE-Databaseconnections
Tim Englich <tim.englich@intevation.de>
parents: 274
diff changeset
75 log.info("Testtimeout: "+this.serverRoundtripInterval);
1f6e2b256247 Improved the Objectvalidation of the ArcSDE-Databaseconnections
Tim Englich <tim.englich@intevation.de>
parents: 274
diff changeset
76
274
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
77 }
130
e4eacd613356 Implementierung Datenzugriff auf die ArcSDE über java.sql. Methodiken
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
78
274
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
79 /**
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
80 * @see org.apache.commons.pool.PoolableObjectFactory#activateObject(java.lang.Object)
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
81 */
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
82 public void activateObject(Object arg0) throws Exception {
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
83 log.debug("ArcSDEPoolableObjectFactory.activateObject");
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
84 }
130
e4eacd613356 Implementierung Datenzugriff auf die ArcSDE über java.sql. Methodiken
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
85
274
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
86 /**
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
87 * @see org.apache.commons.pool.PoolableObjectFactory#destroyObject(java.lang.Object)
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
88 */
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
89 public void destroyObject(Object arg0) throws Exception {
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
90 log.debug("ArcSDEPoolableObjectFactory.destroyObjectb");
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
91 if (arg0 instanceof ArcSDEConnection) {
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
92 ((ArcSDEConnection)arg0).close();
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
93 }else{
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
94 log.warn("Object cannot be handled");
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
95 }
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
96 }
130
e4eacd613356 Implementierung Datenzugriff auf die ArcSDE über java.sql. Methodiken
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
97
274
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
98 /**
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
99 * @see org.apache.commons.pool.PoolableObjectFactory#makeObject()
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
100 */
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
101 public Object makeObject() throws Exception {
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
102 log.debug("ArcSDEPoolableObjectFactory.makeObject");
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
103 Connection con;
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
104 try {
551
1f6e2b256247 Improved the Objectvalidation of the ArcSDE-Databaseconnections
Tim Englich <tim.englich@intevation.de>
parents: 274
diff changeset
105 con = new ArcSDEConnection(this.server, this.port, this.database, this.username, this.credentials, this.serverRoundtripInterval);
130
e4eacd613356 Implementierung Datenzugriff auf die ArcSDE über java.sql. Methodiken
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
106 }
e4eacd613356 Implementierung Datenzugriff auf die ArcSDE über java.sql. Methodiken
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
107 catch (ConnectionException e) {
e4eacd613356 Implementierung Datenzugriff auf die ArcSDE über java.sql. Methodiken
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
108 throw new ConnectionException("Establishing a connection to database failed: " + e.toString(), e);
e4eacd613356 Implementierung Datenzugriff auf die ArcSDE über java.sql. Methodiken
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
109 }
e4eacd613356 Implementierung Datenzugriff auf die ArcSDE über java.sql. Methodiken
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
110 return con;
274
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
111 }
130
e4eacd613356 Implementierung Datenzugriff auf die ArcSDE über java.sql. Methodiken
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
112
274
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
113 /**
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
114 * @see org.apache.commons.pool.PoolableObjectFactory#passivateObject(java.lang.Object)
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
115 */
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
116 public void passivateObject(Object arg0) throws Exception {
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
117 log.debug("ArcSDEPoolableObjectFactory.passivateObject");
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
118 }
130
e4eacd613356 Implementierung Datenzugriff auf die ArcSDE über java.sql. Methodiken
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
119
274
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
120 /**
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
121 * @see org.apache.commons.pool.PoolableObjectFactory#validateObject(java.lang.Object)
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
122 */
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
123 public boolean validateObject(Object arg0) {
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
124 log.debug("ArcSDEPoolableObjectFactory.validateObject");
551
1f6e2b256247 Improved the Objectvalidation of the ArcSDE-Databaseconnections
Tim Englich <tim.englich@intevation.de>
parents: 274
diff changeset
125
265
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
126 boolean returnValue = false;
274
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
127 try {
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
128 returnValue = arg0 instanceof ArcSDEConnection
551
1f6e2b256247 Improved the Objectvalidation of the ArcSDE-Databaseconnections
Tim Englich <tim.englich@intevation.de>
parents: 274
diff changeset
129 ? ((ArcSDEConnection)arg0).isValid(this.serverRoundtripInterval)
265
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
130 : false;
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
131 }
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
132 catch (SQLException sqle) {}
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
133 return returnValue;
274
ff1b7967e6b9 General CodecCleanup:
Tim Englich <tim.englich@intevation.de>
parents: 265
diff changeset
134 }
265
e5379e129799 Fixed issue 34
Tim Englich <tim.englich@intevation.de>
parents: 130
diff changeset
135 }

http://dive4elements.wald.intevation.org