package com.nfwork.dbfound.db;
import java.sql.Connection;
import java.sql.SQLException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
import com.nfwork.dbfound.exception.DBFoundPackageException;
import com.nfwork.dbfound.util.DBUtil;
public class DataSourceConnectionProvide extends ConnectionProvide {
DataSource dataSource;
String jndiName;
public DataSourceConnectionProvide() {
}
public DataSourceConnectionProvide(DataSource dataSource, String dialectName) {
super(dialectName);
this.dataSource = dataSource;
}
public DataSourceConnectionProvide(String unitName, DataSource dataSource,
String dialectName) {
super(unitName, dialectName);
this.dataSource = dataSource;
}
public DataSourceConnectionProvide(String unitName, String dataSourceName,
String dialectName) {
super(unitName, dialectName);
init(dataSourceName);
}
public DataSourceConnectionProvide(String dataSourceName, String dialectName) {
super(dialectName);
init(dataSourceName);
}
@Override
public void closeConnection(Connection connection) {
DBUtil.closeConnection(connection);
}
@Override
public Connection getConnection() {
try {
return dataSource.getConnection();
} catch (SQLException e) {
throw new DBFoundPackageException("create connection excepiton:" + e.getMessage(), e);
}
}
/**
* 初始化外部连接池
*
* @param dataSource
*/
public synchronized void init(String dataSource) {
Context initContext = null;
Object object = null;
try {
initContext = new InitialContext();
Context envContext = (Context) initContext.lookup("java:/comp/env");
object = envContext.lookup(dataSource);
} catch (Exception e) {
try {
object = initContext.lookup(dataSource);
} catch (NamingException e1) {
throw new RuntimeException(e1);
}
}
this.dataSource = (DataSource) object;
}
@Override
public void regist() {
if (dataSource == null) {
init(jndiName);
}
super.regist();
}
public DataSource getDataSource() {
return dataSource;
}
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}
public String getJndiName() {
return jndiName;
}
public void setJndiName(String jndiName) {
this.jndiName = jndiName;
}
}