001 package biz.hammurapi.jdbc; 002 003 import java.sql.Connection; 004 import java.sql.SQLException; 005 import java.sql.Statement; 006 007 import org.apache.commons.dbcp.BasicDataSource; 008 009 import biz.hammurapi.config.Component; 010 import biz.hammurapi.config.ConfigurationException; 011 import biz.hammurapi.jms.adapter.JmsAdapter; 012 013 /** 014 * Invokes close() in stop() method. 015 * @author Pavel 016 * 017 */ 018 public class BasicDataSourceComponent extends BasicDataSource implements Component { 019 020 public void setOwner(Object owner) { 021 // Nothing to do 022 } 023 024 public void start() throws ConfigurationException { 025 // Nothing to do 026 } 027 028 public void stop() throws ConfigurationException { 029 try { 030 super.close(); 031 } catch (SQLException e) { 032 throw new ConfigurationException("Failed to close data source: "+e, e); 033 } 034 } 035 036 private String initConnectionStatement; 037 038 /** 039 * Statement which is invoked every time connection is obtained from the data source. 040 * @param initConnectionStatement 041 */ 042 public void setInitConnectionStatement(String initConnectionStatement) { 043 this.initConnectionStatement = initConnectionStatement; 044 } 045 046 public Connection getConnection() throws SQLException { 047 Connection ret = super.getConnection(); 048 if (!JmsAdapter.isBlank(initConnectionStatement)) { 049 Statement stmt = ret.createStatement(); 050 try { 051 stmt.execute(initConnectionStatement); 052 } finally { 053 stmt.close(); 054 } 055 } 056 return ret; 057 } 058 059 }