C3P0PooledConnection.java
Upload User: gdxydsw
Upload Date: 2019-01-29
Package Size: 16721k
Code Size: 5k
Category:

Java Develop

Development Platform:

Java

  1. /*
  2.  * Copyright (c) JForum Team
  3.  * All rights reserved.
  4.  * 
  5.  * Redistribution and use in source and binary forms, 
  6.  * with or without modification, are permitted provided 
  7.  * that the following conditions are met:
  8.  * 
  9.  * 1) Redistributions of source code must retain the above 
  10.  * copyright notice, this list of conditions and the 
  11.  * following  disclaimer.
  12.  * 2)  Redistributions in binary form must reproduce the 
  13.  * above copyright notice, this list of conditions and 
  14.  * the following disclaimer in the documentation and/or 
  15.  * other materials provided with the distribution.
  16.  * 3) Neither the name of "Rafael Steil" nor 
  17.  * the names of its contributors may be used to endorse 
  18.  * or promote products derived from this software without 
  19.  * specific prior written permission.
  20.  * 
  21.  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT 
  22.  * HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 
  23.  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 
  24.  * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
  25.  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR 
  26.  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 
  27.  * THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE 
  28.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
  29.  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
  30.  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
  31.  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, 
  32.  * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
  33.  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER 
  34.  * IN CONTRACT, STRICT LIABILITY, OR TORT 
  35.  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 
  36.  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 
  37.  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE
  38.  * 
  39.  * Created on 30/11/2005 17:07:51
  40.  * The JForum Project
  41.  * http://www.jforum.net
  42.  */
  43. package net.jforum;
  44. import java.lang.reflect.Method;
  45. import java.sql.Connection;
  46. import net.jforum.exceptions.DatabaseException;
  47. import net.jforum.util.preferences.ConfigKeys;
  48. import net.jforum.util.preferences.SystemGlobals;
  49. import com.mchange.v2.c3p0.ComboPooledDataSource;
  50. import com.mchange.v2.c3p0.DataSources;
  51. /**
  52.  * @author Rafael Steil
  53.  * @version $Id: C3P0PooledConnection.java,v 1.7 2007/04/12 02:11:52 rafaelsteil Exp $
  54.  */
  55. public class C3P0PooledConnection extends DBConnection
  56. {
  57. private ComboPooledDataSource ds;
  58. /**
  59.  * 
  60.  * @see net.jforum.DBConnection#init()
  61.  */
  62. public void init() throws Exception
  63. {
  64. this.ds = new ComboPooledDataSource();
  65. this.ds.setDriverClass(SystemGlobals.getValue(ConfigKeys.DATABASE_CONNECTION_DRIVER));
  66. this.ds.setJdbcUrl(SystemGlobals.getValue(ConfigKeys.DATABASE_CONNECTION_STRING));
  67. this.ds.setMinPoolSize(SystemGlobals.getIntValue(ConfigKeys.DATABASE_POOL_MIN));
  68. this.ds.setMaxPoolSize(SystemGlobals.getIntValue(ConfigKeys.DATABASE_POOL_MAX));
  69. this.ds.setIdleConnectionTestPeriod(SystemGlobals.getIntValue(ConfigKeys.DATABASE_PING_DELAY));
  70. this.extraParams();
  71. }
  72. private void extraParams()
  73. {
  74. String extra = SystemGlobals.getValue(ConfigKeys.C3P0_EXTRA_PARAMS);
  75. if (extra != null && extra.trim().length() > 0) {
  76. String[] p = extra.split(";");
  77. for (int i = 0; i < p.length; i++) {
  78. String[] kv = p[i].trim().split("=");
  79. if (kv.length == 2) {
  80. this.invokeSetter(kv[0], kv[1]);
  81. }
  82. }
  83. }
  84. }
  85. /**
  86.  * Huge hack to invoke methods without the need of an external configuration file
  87.  * and whithout knowing the argument's type
  88.  */
  89. private void invokeSetter(String propertyName, String value)
  90. {
  91. try {
  92. String setter = "set" + propertyName.substring(0, 1).toUpperCase() + propertyName.substring(1);
  93. Method[] methods = this.ds.getClass().getMethods();
  94. for (int i = 0; i < methods.length; i++) {
  95. Method method = methods[i];
  96. if (method.getName().equals(setter)) {
  97. Class[] paramTypes = method.getParameterTypes();
  98. if (paramTypes[0] == String.class) {
  99. method.invoke(this.ds, new Object[] { value });
  100. }
  101. else if (paramTypes[0] == int.class) {
  102. method.invoke(this.ds, new Object[] { new Integer(value) });
  103. }
  104. else if (paramTypes[0] == boolean.class) {
  105. method.invoke(this.ds, new Object[] { Boolean.valueOf(value) });
  106. }
  107. }
  108. }
  109. }
  110. catch (Exception e) {
  111. e.printStackTrace();
  112. }
  113. }
  114. /**
  115.  * @see net.jforum.DBConnection#getConnection()
  116.  */
  117. public Connection getConnection()
  118. {
  119. try {
  120. return this.ds.getConnection();
  121. }
  122. catch (Exception e) {
  123. throw new DatabaseException(e);
  124. }
  125. }
  126. /**
  127.  * @see net.jforum.DBConnection#releaseConnection(java.sql.Connection)
  128.  */
  129. public void releaseConnection(Connection conn)
  130. {
  131.         if (conn==null) {
  132.             return;
  133.         }
  134.         try {
  135. conn.close();
  136. }
  137. catch (Exception e) {
  138. e.printStackTrace();
  139. }
  140. }
  141. /**
  142.  * @see net.jforum.DBConnection#realReleaseAllConnections()
  143.  */
  144. public void realReleaseAllConnections() throws Exception
  145. {
  146. DataSources.destroy(this.ds);
  147. }
  148. }