/** TwitStreet - Twitter Stock Market Game Copyright (C) 2012 Engin Guller (bisanthe@gmail.com), Cagdas Ozek (cagdasozek@gmail.com) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. **/ package com.twitstreet.db.base; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import org.apache.log4j.Logger; import org.apache.tomcat.jdbc.pool.DataSource; import org.apache.tomcat.jdbc.pool.PoolProperties; import com.google.inject.Singleton; @Singleton public class DBMgrImpl implements DBMgr { String dbHost; int dbPort; String userName; String password; String dbName; String connectURI; private DataSource dataSource; private static Logger logger = Logger.getLogger(DBMgrImpl.class); /* (non-Javadoc) * @see com.twitstreet.db.base.DBMgr#init() */ @Override public void init() { setupDataSource(); logger.debug("Database Manager initialized."); } private void setupDataSource() { PoolProperties p = new PoolProperties(); p.setUrl(getConnectionURL()); p.setDriverClassName(DBConstants.DRIVER); p.setUsername(getUserName()); p.setPassword(getPassword()); p.setJmxEnabled(true); p.setTestWhileIdle(false); p.setTestOnBorrow(true); p.setValidationQuery(DBConstants.VALIDATION_QUERY); p.setTestOnReturn(false); p.setValidationInterval(DBConstants.VALIDATION_INTERVAL); p.setTimeBetweenEvictionRunsMillis(DBConstants.EVICTION_RUN_MILLIS); p.setMaxActive(DBConstants.MAX_ACTIVE); p.setInitialSize(DBConstants.INITIAL_SIZE); p.setMaxWait(DBConstants.MAX_WAIT); p.setRemoveAbandonedTimeout(DBConstants.ABANDONED_TIMEOUT); p.setMinEvictableIdleTimeMillis(DBConstants.MIN_EVICTABLE_IDLE_TIME); p.setMinIdle(DBConstants.MIN_IDLE); p.setLogAbandoned(false); p.setRemoveAbandoned(true); p.setJdbcInterceptors("org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;"+ "org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer"); dataSource = new DataSource(); dataSource.setPoolProperties(p); } private String getConnectionURL(){ return "jdbc:mysql://"+getDbHost()+":"+getDbPort()+ "/"+getDbName() + "?characterEncoding=utf-8&useUnicode=true"; } /* (non-Javadoc) * @see com.twitstreet.db.base.DBMgr#getConnection() */ @Override public synchronized Connection getConnection() throws SQLException{ return dataSource.getConnection(); } public String getDbHost() { return dbHost; } /* (non-Javadoc) * @see com.twitstreet.db.base.DBMgr#setDbHost(java.lang.String) */ @Override public void setDbHost(String dbHost) { this.dbHost = dbHost; } public int getDbPort() { return dbPort; } /* (non-Javadoc) * @see com.twitstreet.db.base.DBMgr#setDbPort(java.lang.String) */ @Override public void setDbPort(int dbPort) { this.dbPort = dbPort; } public String getUserName() { return userName; } /* (non-Javadoc) * @see com.twitstreet.db.base.DBMgr#setUserName(java.lang.String) */ @Override public void setUserName(String userName) { this.userName = userName; } public String getPassword() { return password; } /* (non-Javadoc) * @see com.twitstreet.db.base.DBMgr#setPassword(java.lang.String) */ @Override public void setPassword(String password) { this.password = password; } public String getDbName() { return dbName; } /* (non-Javadoc) * @see com.twitstreet.db.base.DBMgr#setDbName(java.lang.String) */ @Override public void setDbName(String dbName) { this.dbName = dbName; } @Override public boolean closeResources(Connection c, Statement stmt, ResultSet rs) { try { if (rs != null && !rs.isClosed()) { rs.close(); } if (stmt != null && !stmt.isClosed()) { stmt.close(); } if (c != null && !c.isClosed()) { c.close(); } } catch (SQLException e) { logger.error(DBConstants.RESOURCES_NOT_CLOSED, e); return false; } return true; } public static String getIdListAsCommaSeparatedString(ArrayList<Long> idList){ String idListStr = ""; for(int i= 0;i <idList.size(); i++){ if(i!=0){ idListStr = idListStr +","; } idListStr = idListStr + "("+String.valueOf(idList.get(i)+(")")); } return idListStr; } public static String getIdListAsCommaSeparatedString4In(ArrayList<Long> idList){ String idListStr = ""; for(int i= 0;i <idList.size(); i++){ if(i!=0){ idListStr = idListStr +","; } idListStr = idListStr + String.valueOf(idList.get(i) ); } return idListStr; } }