ProxoolListener

简介: package cn.com.css.common.listener; import java.io.File; import java.util.Enumeration; import java.util.Properties; import javax.servlet.ServletContext; import javax.servlet.ServletContextEve

package cn.com.css.common.listener;

import java.io.File;
import java.util.Enumeration;
import java.util.Properties;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.logicalcobwebs.proxool.ProxoolException;
import org.logicalcobwebs.proxool.configuration.JAXPConfigurator;
import org.logicalcobwebs.proxool.configuration.PropertyConfigurator;


public class ProxoolListener implements ServletContextListener  
{  
    private static final Log LOG = LogFactory.getLog(ProxoolListener.class);  
      
    private static final String XML_FILE_PROPERTY = "xmlFile";  
 
    private static final String PROPERTY_FILE_PROPERTY = "propertyFile";  
 
    private static final String AUTO_SHUTDOWN_PROPERTY = "autoShutdown";  
      
    @SuppressWarnings("unused")  
    private boolean autoShutdown = true;  
      
    public void contextDestroyed(ServletContextEvent arg0)  
    {  
        System.out.println("destroy database pool....");  
    }  
 
    @SuppressWarnings("unchecked")
 public void contextInitialized(ServletContextEvent contextEvent)  
    {  
        ServletContext context = contextEvent.getServletContext(); //对应servlet的init方法中ServletConfig.getServletContext()  
        String appDir = contextEvent.getServletContext().getRealPath("/");  
        Properties properties = new Properties();  
 
        Enumeration names = context.getInitParameterNames();  
        while (names.hasMoreElements()) {  
            String name = (String) names.nextElement();  
            String value = context.getInitParameter(name);  
 
            if (name.equals(XML_FILE_PROPERTY)) {  
                try {  
                    File file = new File(value);  
                    if (file.isAbsolute()) {  
                        JAXPConfigurator.configure(value, false);  
                    } else {  
                        JAXPConfigurator.configure(appDir + File.separator + value, false);  
                    }  
                } catch (ProxoolException e) {  
                    LOG.error("Problem configuring " + value, e);  
                }  
            } else if (name.equals(PROPERTY_FILE_PROPERTY)) {  
                try {  
                    File file = new File(value);  
                    if (file.isAbsolute()) {  
                        PropertyConfigurator.configure(value);  
                    } else {  
                        PropertyConfigurator.configure(appDir + File.separator + value);  
                    }  
                } catch (ProxoolException e) {  
                    LOG.error("Problem configuring " + value, e);  
                }  
            } else if (name.equals(AUTO_SHUTDOWN_PROPERTY)) {  
                autoShutdown = Boolean.valueOf(value).booleanValue();  
            } else if (name.startsWith("jdbc")) { //此处以前是PropertyConfigurator.PREFIX改为jdbc,因为此源码是0.9.1版本的,与0.9RC3版本有点不一样  
                properties.setProperty(name, value);  
            }  
        }  
 
        if (properties.size() > 0) {  
            try {  
                PropertyConfigurator.configure(properties);  
            } catch (ProxoolException e) {  
                LOG.error("Problem configuring using init properties", e);  
            }  
        }  
    }  
 

目录
相关文章
|
Web App开发 安全 大数据
大数据问题排查系列-开启 kerberos 后无法访问 HIVESERVER2 等服务的 WEBUI
大数据问题排查系列-开启 kerberos 后无法访问 HIVESERVER2 等服务的 WEBUI
|
7月前
|
算法 Java
刷题专栏(二十五):有效的完全平方数
刷题专栏(二十五):有效的完全平方数
192 2
echarts圆环图设置legend数据对齐百分比样式使用rich富文本标签和formatter函数
echarts圆环图设置legend数据对齐百分比样式使用rich富文本标签和formatter函数
760 0
textarea去掉边框和取消选中后的边框
textarea去掉边框和取消选中后的边框
189 0
|
存储 负载均衡 应用服务中间件
nginx集群搭建——四层
nginx集群搭建——四层
175 0
|
供应链 安全 机器人
Python - 接入钉钉机器人
Python - 接入钉钉机器人
2047 0
Python - 接入钉钉机器人
|
搜索推荐 索引
[ELK实战] Elasticsearch 聚合查询二: Bucketing/桶聚合
目前在[官方文档]有4种聚合(Aggregations )方式分别是: 1. Metric (指标聚合): 最常用的聚合方式例如 平均值,求和等等 3. Bucketing (桶聚合): 就是常说的分组聚合 5. Matrix (矩阵聚合) : 在多个字段上操作并根据从请求的文档字段提取的值生成矩阵结果的聚合族。与度量聚合和桶聚合不同,此聚合族尚不支持脚本。 7. Pipeline (管道聚合
279 0
[ELK实战] Elasticsearch 聚合查询二: Bucketing/桶聚合
|
SQL 关系型数据库 MySQL
MySQL的行锁、表锁、间隙锁详解(上)
MySQL的行锁、表锁、间隙锁详解(上)
267 0
MySQL的行锁、表锁、间隙锁详解(上)
Qt .pro文件之defineReplace函数的用法,实现lib文件名自动添加后缀“d“
Qt .pro文件之defineReplace函数的用法,实现lib文件名自动添加后缀“d“
613 0