01: /*
02: * $Id: JDBCFactory.java,v 1.3 2002/09/16 08:05:03 jkl Exp $
03: *
04: * Copyright (c) 2002 Njet Communications Ltd. All Rights Reserved.
05: *
06: * Use is subject to license terms, as defined in
07: * Anvil Sofware License, Version 1.1. See LICENSE
08: * file, or http://njet.org/license-1.1.txt
09: */
10: package anvil.database.jdbc;
11:
12: import anvil.server.PoolPreferences;
13: import anvil.database.PooledConnection;
14: import anvil.database.ConnectionPool;
15: import anvil.database.ConnectionFactory;
16: import java.sql.Driver;
17: import java.sql.DriverManager;
18: import java.sql.Connection;
19: import java.sql.SQLException;
20:
21: /**
22: * Factory used by <code>ConnectionPool</code> to create the
23: * actual <code>PooledConnection</code> instances.
24: *
25: * @see PooledConnection
26: * @see ConnectionPool
27: * @version $Revision: 1.3 $
28: * @author Jani Lehtimäki
29: */
30: public class JDBCFactory implements ConnectionFactory {
31:
32: private ConnectionPool pool;
33:
34: /**
35: * Count of connections created.
36: */
37: private long count = 0;
38:
39: /**
40: * Initializes new factory.
41: *
42: * @param url URL (connection string)
43: * @param username Username
44: * @param password Password
45: */
46: public void initialize(ConnectionPool pool) {
47: this .pool = pool;
48: String driverClassname = pool.getDriver();
49: try {
50: Class driverClass = Class.forName(driverClassname);
51: if (driverClass != null) {
52: Driver driver = (Driver) driverClass.newInstance();
53: DriverManager.registerDriver(driver);
54: pool.getZone().log().info(
55: "JDBCFactory for pool '" + pool.getName()
56: + "' initialized, driver="
57: + driverClass);
58: }
59: } catch (Exception exception) {
60: pool.getZone().log().error(
61: "Couldn't initialize driver: " + driverClassname,
62: exception);
63: }
64: }
65:
66: /**
67: * Creates new connection.
68: *
69: * @param toPool Connection pool
70: * @return <code>PooledConnection</code>
71: * @throws SQLException If something goes wrong
72: */
73: public PooledConnection create() throws Exception {
74: long started = System.currentTimeMillis();
75: Connection connection;
76: connection = DriverManager.getConnection(pool.getURL(), pool
77: .getUsername(), pool.getPassword());
78: count++;
79: JDBCConnection connectionImpl = new JDBCConnection(pool, pool
80: .getName()
81: + '-' + count, connection);
82: pool.connectionCreated(connectionImpl, System
83: .currentTimeMillis()
84: - started);
85: return connectionImpl;
86: }
87: }
|