com.frameworkset.common.poolman.util.DatasourceUtil Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of bboss-persistent Show documentation
Show all versions of bboss-persistent Show documentation
bboss is a j2ee framework include aop/ioc,mvc,persistent,taglib,rpc,event ,bean-xml serializable and so on.http://www.bbossgroups.com
The newest version!
/*
* Copyright 2008 biaoping.yin
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.frameworkset.common.poolman.util;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.sql.DataSource;
import org.frameworkset.spi.BaseApplicationContext;
import org.frameworkset.spi.DefaultApplicationContext;
import org.frameworkset.spi.assemble.Pro;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.frameworkset.common.poolman.monitor.AbandonedTraceExt;
import com.frameworkset.common.poolman.sql.PoolManDataSource;
import com.frameworkset.orm.transaction.TXDataSource;
/**
*
*
* Title: DatasourceUtil.java
*
*
*
* Description:
*
*
*
* Copyright: Copyright (c) 2007
*
*
* @Date 2012-7-31 上午9:51:27
* @author biaoping.yin
* @version 1.0
*/
public class DatasourceUtil {
public static final String DATASOURCE_BEAN_NAME = "datasource";
private static Logger log = LoggerFactory.getLogger(DatasourceUtil.class);
public static DataSource getDataSource(String sourcefile) {
BaseApplicationContext context = DefaultApplicationContext
.getApplicationContext(sourcefile);
return context.getTBeanObject(DATASOURCE_BEAN_NAME, DataSource.class);
}
public static Map getDataSourceParameters(String sourcefile) {
BaseApplicationContext context = DefaultApplicationContext
.getApplicationContext(sourcefile);
Pro pro = context.getProBean(DATASOURCE_BEAN_NAME);
List list = pro.getReferences();
Map parameters = new HashMap();
for (int i = 0; list != null && i < list.size(); i++) {
Pro param = list.get(i);
parameters.put(param.getName(), param.getValue());
}
return parameters;
}
private static DataSource getSRCDataSource(TXDataSource ds) {
return ds.getSRCDataSource();
}
public static void increamentMaxTotalConnections(DataSource datasource,int nums)
{
DataSource datasource_ = null;
if (datasource instanceof TXDataSource) {
datasource_ = getSRCDataSource((TXDataSource) datasource);
} else {
datasource_ = datasource;
}
String name = null;
if (datasource_ instanceof PoolManDataSource) {
PoolManDataSource temp = (PoolManDataSource) datasource_;
name = temp.getPoolName();
datasource_ = temp.getInnerDataSource();
}
try {
if (datasource_ != null) {
Method getMaxTotal = datasource_.getClass().getMethod(
"getMaxTotal");
Method setMaxTotal = datasource_.getClass().getMethod(
"setMaxTotal",int.class);
if (getMaxTotal != null && setMaxTotal != null)
{
int maxTotal = ((Integer ) getMaxTotal.invoke(datasource_)).intValue();
int newmaxTotal = maxTotal + nums;
setMaxTotal.invoke(datasource_, newmaxTotal);
if(name != null)
{
log.info("Increament MaxTotal Connections from "+maxTotal +" to "+newmaxTotal + " for datasource[" + name+"]");
}
}
}
} catch (SecurityException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
} catch (NoSuchMethodException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
} catch (IllegalArgumentException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
} catch (IllegalAccessException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
} catch (InvocationTargetException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
}
}
public static List getGoodTraceObjects(DataSource datasource) {
DataSource datasource_ = null;
if (datasource instanceof TXDataSource) {
datasource_ = getSRCDataSource((TXDataSource) datasource);
} else {
datasource_ = datasource;
}
if (datasource_ instanceof PoolManDataSource) {
PoolManDataSource temp = (PoolManDataSource) datasource_;
datasource_ = temp.getInnerDataSource();
}
try {
if (datasource_ != null) {
Method getTraceObjects = datasource_.getClass().getMethod(
"getGoodTraceObjects");
if (getTraceObjects == null) {
}
else
{
List dd = (List ) getTraceObjects.invoke(datasource_);
return dd;
}
}
} catch (SecurityException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
} catch (NoSuchMethodException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
} catch (IllegalArgumentException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
} catch (IllegalAccessException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
} catch (InvocationTargetException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
}
return new ArrayList();
}
public static boolean closeDS(DataSource datasource) {
DataSource datasource_ = null;
if (datasource instanceof TXDataSource) {
datasource_ = getSRCDataSource((TXDataSource) datasource);
} else {
datasource_ = datasource;
}
if (datasource_ != null) {
try {
Method close = datasource_.getClass().getMethod("close");
if (close != null)
{
close.invoke(datasource_);
return true;
}
} catch (SecurityException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
} catch (NoSuchMethodException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
} catch (IllegalArgumentException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
} catch (IllegalAccessException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
} catch (InvocationTargetException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
}
}
return false;
}
/**
* 获取当前链接池中空闲的链接数 接口只对内部数据源有用,外部数据源返回-1
* 非连接池数据源为实现该功能
* @return
*/
public static int getNumIdle(DataSource datasource) {
DataSource datasource_ = null;
if(datasource instanceof TXDataSource)
{
datasource_ =getSRCDataSource((TXDataSource)datasource);
}
else
{
datasource_ = datasource;
}
if (datasource_ instanceof PoolManDataSource) {
PoolManDataSource temp = (PoolManDataSource) datasource_;
datasource_ = temp.getInnerDataSource();
}
try {
if (datasource_ != null) {
Method getNumIdle = datasource_.getClass().getMethod(
"_getNumIdle");
if (getNumIdle != null) {
return (Integer) getNumIdle.invoke(datasource_);
}
}
} catch (SecurityException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
} catch (NoSuchMethodException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
} catch (IllegalArgumentException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
} catch (IllegalAccessException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
} catch (InvocationTargetException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
}
return -1;
}
/**
* 获取当前链接池中正在使用的链接 接口只对内部数据源有用,外部数据源返回-1
*
* @return
*/
public static int getNumActive(DataSource datasource) {
DataSource datasource_ = null;
if(datasource instanceof TXDataSource)
{
datasource_ =getSRCDataSource((TXDataSource)datasource);
}
else
{
datasource_ = datasource;
}
if (datasource_ instanceof PoolManDataSource) {
PoolManDataSource temp = (PoolManDataSource) datasource_;
datasource_ = temp.getInnerDataSource();
}
try {
if (datasource_ != null) {
Method getNumActive = datasource_.getClass().getMethod(
"_getNumActive");
if (getNumActive != null) {
return (Integer) getNumActive.invoke(datasource_);
}
}
} catch (SecurityException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
} catch (NoSuchMethodException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
} catch (IllegalArgumentException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
} catch (IllegalAccessException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
} catch (InvocationTargetException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
}
return -1;
}
/**
* 获取并发最大使用链接数发生的时间点,记录链接池到目前为止并发使用链接的最大数目的时间,内置dbcp2才有意义, 外部数据源返回-1
*
* @return
*/
public static long getMaxActiveNumTime(DataSource datasource) {
DataSource datasource_ = null;
if(datasource instanceof TXDataSource)
{
datasource_ =getSRCDataSource((TXDataSource)datasource);
}
else
{
datasource_ = datasource;
}
if (datasource_ instanceof PoolManDataSource) {
PoolManDataSource temp = (PoolManDataSource) datasource_ ;
datasource_ = temp.getInnerDataSource();
}
try {
if (datasource_ != null) {
Method getMaxActiveNumTime = datasource_.getClass().getMethod(
"getMaxActiveNumTime");
if (getMaxActiveNumTime != null) {
return (Long) getMaxActiveNumTime.invoke(datasource_);
}
}
} catch (SecurityException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
} catch (NoSuchMethodException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
} catch (IllegalArgumentException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
} catch (IllegalAccessException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
} catch (InvocationTargetException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
}
return -1;
}
/**
* 获取并发最大使用链接数,记录链接池到目前为止并发使用链接的最大数目, 外部数据源返回-1
*
* @return
*/
public static int getMaxNumActive(DataSource datasource) {
DataSource datasource_ = null;
if(datasource instanceof TXDataSource)
{
datasource_ =getSRCDataSource((TXDataSource)datasource);
}
else
{
datasource_ = datasource;
}
if (datasource_ instanceof PoolManDataSource) {
PoolManDataSource temp = (PoolManDataSource) datasource_ ;
datasource_ = temp.getInnerDataSource();
}
try {
if (datasource_ != null) {
Method getMaxNumActive = datasource_.getClass().getMethod(
"getMaxNumActive");
if (getMaxNumActive != null) {
return (Integer) getMaxNumActive.invoke(datasource_);
}
}
} catch (SecurityException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
} catch (NoSuchMethodException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
} catch (IllegalArgumentException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
} catch (IllegalAccessException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
} catch (InvocationTargetException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
}
return -1;
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy