<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-314  評論-209  文章-0  trackbacks-0

    這幾天花了點時間弄了個 db4o 連接池,比較簡單,連接池原型是論壇上面的一篇文章。很簡單,歡迎拍磚。

    從 servlet 開始,在這里初始化連接池:

    package  com;

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

    import  javax.servlet.ServletConfig;
    import  javax.servlet.ServletException;
    import  javax.servlet.http.HttpServlet;


    public   class  ConnectionPollServlet  extends  HttpServlet {
        
        
    private   static   final  String XML_FILE_PROPERTY  =   " xmlFile " ;
        
        
    /**
         * servlet init
         
    */
        
    public   void  init(ServletConfig servletConfig)  throws  ServletException{
            
    super .init(servletConfig);
            String appDir 
    =  servletConfig.getServletContext().getRealPath( " / " );
            Enumeration names 
    =  servletConfig.getInitParameterNames();
            
    while (names.hasMoreElements()){
                String name 
    =  (String) names.nextElement();
                String value 
    =  servletConfig.getInitParameter(name);
                
    if  (name.equals(XML_FILE_PROPERTY)) {
                    File file 
    =   new  File(value);
                    
    if  (file.isAbsolute()) {
                        XMLReader.configure(value);
                    } 
    else  {
                        XMLReader.configure(appDir 
    +  File.separator  +  value);
                    }
                }
            }
        }

        
    /**
         * servlet destroy
         
    */
        
    public   void  destroy() {
            
    super .destroy();
            ConnectionPoll.destroy();
        }
    }

    然后是 XML 解析類:
    package com;

    import java.io.File;

    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.Element;
    import org.dom4j.io.SAXReader;

    public class XMLReader {

        
    /**
         * parse XML file
         * 
    @param xmlFileName
         
    */
        
    public static void configure(String xmlFileName) {
            
    try {
                File file 
    = new File(xmlFileName);
                SAXReader reader 
    = new SAXReader();
                Document doc 
    = reader.read(file);
                Element root 
    = doc.getRootElement();

                String fileName 
    = file.getParent()+"\\"
                    
    +root.elementText("fileName");
                String sport 
    = root.elementText("port");
                String sminConn 
    = root.elementText("minConn");
                String sidelTime 
    = root.elementText("idelTime");

                
    int port = Integer.parseInt(sport);
                
    int minConn = Integer.parseInt(sminConn);
                
    int idelTime = Integer.parseInt(sidelTime);

                ConnectionPoll.init(fileName,port,minConn,idelTime);
            } 
    catch (DocumentException e) {
                e.printStackTrace();
            }
        }
    }


    連接池類:
    package com;

    import java.util.concurrent.ConcurrentLinkedQueue;

    import com.db4o.Db4o;
    import com.db4o.ObjectContainer;
    import com.db4o.ObjectServer;

    public class ConnectionPoll {

        
    private static int idelTime;
        
        
    private static ConcurrentLinkedQueue<ObjectContainer> connectionQueue;
        
        
    private ConnectionPoll(){
        }
        
        
    /**
         * init pool
         
    */
        
    protected static void init(String fileName,int port,int minConn,int it) {
            idelTime
    =it;
            ObjectServer objectServer 
    = Db4o.openServer(fileName,port);
            connectionQueue 
    = new ConcurrentLinkedQueue<ObjectContainer>();
            
    for (int i = 0; i<minConn; i++) {
                connectionQueue.offer(objectServer.openClient());
            }
        }

        
    /**
         * get connection
         * 
    @return ObjectContainer
         * 
    @throws ConnectionTimeoutException 
         * 
    @throws InterruptedException
         
    */
        
    public static synchronized ObjectContainer getConnection() throws ConnectionTimeoutException{
            
    long expiration = System.currentTimeMillis() + idelTime;
            
    while (connectionQueue.isEmpty())
            {
                
    if (expiration < System.currentTimeMillis())
                {
                    
    throw new ConnectionTimeoutException("connection timeout!");
                }
            }
            ObjectContainer objectContainer 
    = connectionQueue.poll();
            
    return objectContainer;
            }

        
    /**
         * release connection
         * 
    @return ObjectContainer
         * 
    @throws InterruptedException
         
    */
        
    public static synchronized void releaseConnection(ObjectContainer objectContainer) {
            connectionQueue.offer(objectContainer);
        }
        
        
    /**
         * destroy connection
         *
         
    */
        
    protected static void destroy() {
            
    while (connectionQueue.iterator().hasNext()){
                ObjectContainer objectContainer 
    = connectionQueue.poll();
                objectContainer.close();
            }
        }
    }

    超時異常類:
    package com;

    public class ConnectionTimeoutException extends Exception{

        
    public ConnectionTimeoutException()
        {
        }

        
    public ConnectionTimeoutException(String s)
        {
            
    super(s);
        }
    }

    XML 配置文件,從上到下依次是,數據庫文件名、端口、初始連接數、等待時間:
    <?xml version="1.0" encoding="utf-8"?>
      
    <config>
        
    <fileName>auto.yap</fileName>
        
    <port>1010</port>
        
    <minConn>10</minConn>
        
    <idelTime>1000</idelTime>
      
    </config>

    web.xml 用于初始化的時候加載:
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
    <web-app>
      
    <servlet>
        
    <servlet-name>ConnectionPoll</servlet-name>
        
    <servlet-class>com.ConnectionPollServlet</servlet-class>
          
    <init-param>
            
    <param-name>xmlFile</param-name>
            
    <param-value>WEB-INF/poolConfig.xml</param-value>
          
    </init-param>
        
    <load-on-startup>1</load-on-startup>
      
    </servlet>
    </web-app>


    數據庫文件和參數配置文件都放在 WEB-INF 文件夾下。這個連接池還未實現 maxConn(最大連接數)和對多數據庫文件的支持以及日志等。

    posted on 2006-09-28 17:19 xzc 閱讀(265) 評論(0)  編輯  收藏 所屬分類: Java
    主站蜘蛛池模板: 全黄a免费一级毛片人人爱| 免费激情视频网站| 亚洲av无码乱码国产精品fc2| 污网站在线免费观看| 国产hs免费高清在线观看| 激情婷婷成人亚洲综合| 免费中文字幕一级毛片| 免费无遮挡无码视频在线观看| 国产又粗又长又硬免费视频| 美女隐私免费视频看| 亚洲无码日韩精品第一页| 国产精品无码永久免费888 | 午夜无码A级毛片免费视频| 久久亚洲国产视频| 57pao一国产成永久免费| 亚洲乱码在线观看| 国产女高清在线看免费观看| 一级做a爰片久久免费| 亚洲AV永久无码区成人网站| 最近免费中文字幕高清大全| 亚洲国产av一区二区三区丶| 国产高清在线免费视频| aa毛片免费全部播放完整| 亚洲一区二区中文| 妞干网在线免费视频| 一出一进一爽一粗一大视频免费的| 国产亚洲精品无码成人| 免费看男女下面日出水来| 亚洲av无码兔费综合| 中文字幕久久亚洲一区| 最近免费字幕中文大全视频| 亚洲人成色777777精品| 国产日产亚洲系列| 日韩不卡免费视频| 日本亚洲中午字幕乱码| 国产亚洲av人片在线观看| 欧洲精品成人免费视频在线观看| www在线观看播放免费视频日本| 久久综合亚洲色一区二区三区| 国产男女猛烈无遮挡免费网站| 在线毛片片免费观看|