public class JDBCContext {
private static final Log log = LogFactory.getLog(JDBCContext.class);
//private Database database;
private DataSource datasource;
protected Connection connection;
private boolean isValid = true;
private static ThreadLocal<JDBCContext> jdbcContext;
/**
* 私有构造函数
* @param database
*/
private JDBCContext(DataSource datasource){
this.datasource = datasource;
createConnection();
}
public static JDBCContext getJdbcContext(DataSource datasource)
{
if(jdbcContext==null)jdbcContext=new JDBCContextThreadLocal(datasource);
JDBCContext context = (JDBCContext) jdbcContext.get();
if (context == null) {
context = new JDBCContext(datasource);
}
return context;
}
private void createConnection(){
try{
if(connection == null || connection.isClosed() == true){
log.debug("Create a connection");
//connection=datasource.getConnection();
//isValid = true;
if(datasource != null){
//Class.forName(datasource.getdBType().getDriverclass()).newInstance();
//connection = DriverManager.getConnection(datasource.getUrl(), datasource.getUser(),datasource.getPassword());
connection=datasource.getConnection();
isValid = true;
}
else{
log.error("DataSource is invalid");
isValid = false;
return;
}
}else{
log.debug("The current connection is valid.");
}
}catch(Exception e){
e.printStackTrace();
}
}
/**
* 释放当前连接;
*/
public void releaseConnection(){
try{
if(connection != null && connection.isClosed() == false){
connection.close();
// 添加代码 by chenying
jdbcContext.remove();
isValid = false;
log.debug("The connection is closed.");
}
}catch(SQLException e){
e.printStackTrace();
}
}
/**
* @return
*/
public Connection getConnection(){
log.debug("Get a Connection!");
try{
if(connection==null || connection.isClosed())createConnection();
}
catch(Exception e)
{
e.printStackTrace();
}
return connection;
}
/**
* @return
*/
public boolean isValid(){
return isValid;
}
/**
* 内部类
* @author Administrator
*
*/
private static class JDBCContextThreadLocal extends ThreadLocal<JDBCContext> {
public DataSource datasource;
public JDBCContextThreadLocal(DataSource datasource)
{
this.datasource=datasource;
}
protected synchronized JDBCContext initialValue() {
return new JDBCContext(datasource);
}
}
}
private static final Log log = LogFactory.getLog(JDBCContext.class);
//private Database database;
private DataSource datasource;
protected Connection connection;
private boolean isValid = true;
private static ThreadLocal<JDBCContext> jdbcContext;
/**
* 私有构造函数
* @param database
*/
private JDBCContext(DataSource datasource){
this.datasource = datasource;
createConnection();
}
public static JDBCContext getJdbcContext(DataSource datasource)
{
if(jdbcContext==null)jdbcContext=new JDBCContextThreadLocal(datasource);
JDBCContext context = (JDBCContext) jdbcContext.get();
if (context == null) {
context = new JDBCContext(datasource);
}
return context;
}
private void createConnection(){
try{
if(connection == null || connection.isClosed() == true){
log.debug("Create a connection");
//connection=datasource.getConnection();
//isValid = true;
if(datasource != null){
//Class.forName(datasource.getdBType().getDriverclass()).newInstance();
//connection = DriverManager.getConnection(datasource.getUrl(), datasource.getUser(),datasource.getPassword());
connection=datasource.getConnection();
isValid = true;
}
else{
log.error("DataSource is invalid");
isValid = false;
return;
}
}else{
log.debug("The current connection is valid.");
}
}catch(Exception e){
e.printStackTrace();
}
}
/**
* 释放当前连接;
*/
public void releaseConnection(){
try{
if(connection != null && connection.isClosed() == false){
connection.close();
// 添加代码 by chenying
jdbcContext.remove();
isValid = false;
log.debug("The connection is closed.");
}
}catch(SQLException e){
e.printStackTrace();
}
}
/**
* @return
*/
public Connection getConnection(){
log.debug("Get a Connection!");
try{
if(connection==null || connection.isClosed())createConnection();
}
catch(Exception e)
{
e.printStackTrace();
}
return connection;
}
/**
* @return
*/
public boolean isValid(){
return isValid;
}
/**
* 内部类
* @author Administrator
*
*/
private static class JDBCContextThreadLocal extends ThreadLocal<JDBCContext> {
public DataSource datasource;
public JDBCContextThreadLocal(DataSource datasource)
{
this.datasource=datasource;
}
protected synchronized JDBCContext initialValue() {
return new JDBCContext(datasource);
}
}
}