返回顶部

收藏

使用 Digester 解析 XML 文件的一个实例

更多

这是我2004年一个standalone项目中的连接池配置的代码,使用Digester 解析并自动映射到Bean的方法中。

datasources.xml

<?xml version="1.0" encoding="GBK"?>
<service>   
    <!-- 数据源配置 -->
    <data-sources>
        <data-source name="mcp">  
            <driverClassName>com.microsoft.jdbc.sqlserver.SQLServerDriver</driverClassName>
            <url>jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mcpdb2</url>
            <username>noanyone</username>
            <password>noanyonecancomin</password>
            <maxActive>100</maxActive>
            <maxWait>5000</maxWait>
            <defaultAutoCommit>true</defaultAutoCommit>
            <defaultReadOnly>false</defaultReadOnly>
            <validationQuery>SELECT 1</validationQuery>
            <removeAbandoned>true</removeAbandoned>
            <removeAbandonedTimeout>120</removeAbandonedTimeout>
        </data-source>

        <data-source name="WAPDB">
            <driverClassName>com.microsoft.jdbc.sqlserver.SQLServerDriver</driverClassName>
            <url>jdbc:microsoft:sqlserver://59.42.253.131:8921;DatabaseName=wapdb</url>
            <username>sa</username>
            <password>moabc_db2!</password>
            <maxActive>20</maxActive>
            <maxWait>5000</maxWait>
            <defaultAutoCommit>true</defaultAutoCommit>
            <defaultReadOnly>false</defaultReadOnly>
            <validationQuery>SELECT 1</validationQuery>
            <removeAbandoned>true</removeAbandoned>
            <removeAbandonedTimeout>120</removeAbandonedTimeout>
        </data-source>

    </data-sources>

</service>

McpDataSourceFactory.java

/**
 * Created on 2004-4-10 By Winter Lau
 */
package demo;

import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;

import javax.sql.DataSource;

import org.apache.commons.digester.Digester;
import org.apache.commons.digester.ExtendedBaseRules;
import org.xml.sax.SAXException;

/**
 * 数据源
 * @author Winter Lau
 */
public class McpDataSourceFactory {

    private HashMap dataSources = new HashMap();

    /**
     * 初始化数据源
     * 
     * @param config
     * @param base
     * @return @throws
     *         IOException
     * @throws SAXException
     */
    protected synchronized static McpDataSourceFactory initDataSources(
            String config, String base) throws IOException, SAXException {
        String key = base + "/data-source";
        Digester dig = new Digester();
        dig.setValidating(false);
        dig.setRules(new ExtendedBaseRules());
        dig.addObjectCreate(base, McpDataSourceFactory.class);
        dig.addObjectCreate(key, McpDataSource.class);
        dig.addSetProperties(key);
        dig.addBeanPropertySetter(key + "/?");
        dig.addSetNext(key, "addDataSource");
        return (McpDataSourceFactory) dig.parse(config);
    }
    /**
     * 添加数据源,该方法只由Digester调用
     * @param ds
     */
    public synchronized final void addDataSource(McpDataSource ds) {
        if (ds != null) dataSources.put(ds.getName(), ds);
    }

    public int size() {
        return dataSources.size();
    }
    /**
     * 获取第一个数据源,该方法用于当数据源只有一个的时候获取其实例
     * @return
     */
    public synchronized DataSource getDataSource() {
        Iterator dss = dataSources.values().iterator();
        return dss.hasNext() ? (McpDataSource) dss.next() : null;
    }
    /**
     * 获取指定名称的数据源
     * @param key
     * @return
     */
    public synchronized DataSource getDataSource(Object key) {
        return (McpDataSource) dataSources.get(key);
    }
    /**
     * 获取第一个数据源的连接,该方法用于当数据源只有一个的时候获取其实例
     * @return
     */
    public synchronized Connection getConnection() throws SQLException {
        Iterator dss = dataSources.values().iterator();
        return dss.hasNext() ? ((McpDataSource) dss.next()).getConnection() : null;
    }
    /**
     * 获取指定名称的数据源的连接
     * @param key
     * @return
     */
    public synchronized Connection getConnection(Object key) throws SQLException {
        return ((McpDataSource) dataSources.get(key)).getConnection();
    }
    /**
     * 获取所有的数据源名称
     * @return
     */
    public Set names() {
        return dataSources.keySet();
    }
    /**
     * 获取所有的数据源实例
     * @return
     */
    public Iterator datasources() {
        return dataSources.values().iterator();
    }

    public static void main(String[] args) throws Exception {
        McpDataSourceFactory mdsf = McpDataSourceFactory.initDataSources(
                "datasources.xml", "service/data-sources");
        Iterator names = mdsf.names().iterator();
        while (names.hasNext())
            System.out.println(names.next());
    }

}

标签:jQuery,XML,DataSource,Digester

收藏

0人收藏

支持

0

反对

0

»更多 您可能感兴趣的代码
  1. 2016-01-10 09:16:20Digester 解析 XML 的简单一例 by amaker8
  2. 2015-03-29 11:34:48将数组转换为XML by 杨德伟
  3. 2015-08-06 10:27:46将 Scala XML 转成 Java DOM by huwei
  4. 2016-01-21 09:00:44Velocity 解析 XML 数据 by arden
  5. 2013-12-05 18:22:54jQuery定时读取分析xml文件 by 猩猩总统
  6. 2015-04-09 14:34:03PHP中的生成XML文件的4种方法 by starstroll
  7. 2016-01-28 09:29:50JAXB marshling by 冬夜微风
  8. 2016-02-02 09:41:44JDOM: Properties To XML by GauSir
  9. 2015-09-15 11:58:45表格的读取 by 永明
  10. 2016-02-05 11:54:05小GUI程序,使用SAX解析XML并显示 by tsl0922
  11. 2018-03-30 21:56:50java自动识别用户上传的文本文件编码 by Hugh

发表评论