JR 精品文章 - JLDAP 连接池的创建及测试程序。
AD: jr (at) javaresearch.org


首页 | 动态 | 文章 | FAQ  | 新闻 | 下载 | 代码 | 工作 | 调查 | 术语 | 站点 | 图书 | 论坛 | 帮助 | 全部  

TOP | 交流 | 软件 | 专栏 | 开源 | 译/著 | 源码 | API  | 推荐 | FTP  | 积分 | 统计 | 搜索 | Blog | 我们  
首页 » 研究文集 » J2EE综合 搜索标题相关文章 搜索标题相关文章    评论此文章 发表评论     开始监控此文章 开始监控   加入收藏夹  加入收藏夹
JLDAP 连接池的创建及测试程序。
qingyuan914 原创   更新:2008-07-21 16:58:14  版本: 1.0   

由于是基于web开发,所以自己想写一个像tomcat管理数据库连接池一样的东东。

大体思路是这样的,由LDAPConectionDataFactory来创建LDAPConectionData类,在把创建好的实例放到管理类LDAPConectionDataPool(池)里边;用户可以定义最多的LDAPConection链接的数量。


1、LDAPConectionData类

Java代码 
import com.novell.ldap.LDAPConnection;   
import com.novell.ldap.LDAPException;   
  
public class LDAPConectionData {   
       
    private boolean conetIsFree=true;//判断该链接是否被占用(链接是可用的,还是已经在使用中的)   
       
    private boolean isClosed=false;//判断链接是否关闭,在这里几乎我没有用到该标志。   
       
    private LDAPConnection conn=null;//LDAP链接。   
       
    public LDAPConectionData(String ldapURl,int port,String user,String passwd) throws LDAPException{//初始化LDAP链接   
        conn=new LDAPConnection();    
        conn.connect(ldapURl, port);   
        conn.bind(LDAPConnection.LDAP_V3, user, passwd);   
        System.out.println("------LDAPConnection create successfully!-----");   
    }   
  
  
       
    public boolean getConetIsFree() {   
        return conetIsFree;   
    }   
  
  
  
    public void setConetIsFree(boolean conetIsFree) {   
        this.conetIsFree = conetIsFree;   
    }   
  
  
  
    public boolean getClosed() {   
        return isClosed;   
    }   
  
  
  
    public void setClosed(boolean isClosed) {   
        this.isClosed = isClosed;   
    }   
  
  
  
    public LDAPConnection getConn() {   
        return this.conn;   
    }   
  
  
  
    public void closeLDAPConnection(){   
        if(this.conn!=null){   
            try {   
                conn.disconnect();   
            } catch (LDAPException e) {   
                // TODO Auto-generated catch block   
                e.printStackTrace();   
            }   
        }   
    }   
  
}  

import com.novell.ldap.LDAPConnection;
import com.novell.ldap.LDAPException;

public class LDAPConectionData {
    
    private boolean conetIsFree=true;//判断该链接是否被占用(链接是可用的,还是已经在使用中的)
    
    private boolean isClosed=false;//判断链接是否关闭,在这里几乎我没有用到该标志。
    
    private LDAPConnection conn=null;//LDAP链接。
    
    public LDAPConectionData(String ldapURl,int port,String user,String passwd) throws LDAPException{//初始化LDAP链接
        conn=new LDAPConnection(); 
        conn.connect(ldapURl, port);
        conn.bind(LDAPConnection.LDAP_V3, user, passwd);
        System.out.println("------LDAPConnection create successfully!-----");
    }


    
    public boolean getConetIsFree() {
        return conetIsFree;
    }



    public void setConetIsFree(boolean conetIsFree) {
        this.conetIsFree = conetIsFree;
    }



    public boolean getClosed() {
        return isClosed;
    }



    public void setClosed(boolean isClosed) {
        this.isClosed = isClosed;
    }



    public LDAPConnection getConn() {
        return this.conn;
    }



    public void closeLDAPConnection(){
        if(this.conn!=null){
            try {
                conn.disconnect();
            } catch (LDAPException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

}
 

2、LDAPConectionDataPool类,该类用来获取连接,并释放链接(管理连接资源)。

Java代码 
import java.util.ArrayList;   
import java.util.List;   
import com.novell.ldap.LDAPException;   
  
final class LDAPConectionDataPool {   
  
    private List<LDAPConectionData> pool = new ArrayList<LDAPConectionData>();//生成的LDAPConectionData实例,统统的都放到该List中,进行管理。   
  
    private static LDAPConectionDataPool LDAPConnDataPool = null;//把该类设置成一个单点模式。   
  
    private LDAPConectionDataPool() {   
  
    }   
  
    public static synchronized LDAPConectionDataPool getInstance() {   
        if (LDAPConnDataPool == null) {   
            return new LDAPConectionDataPool();   
        } else {   
            return LDAPConnDataPool;   
        }   
    }   
  
    public void add(LDAPConectionData aa) {   
        aa.setConetIsFree(false);   
        this.pool.add(aa);   
    }   
  
    public synchronized void setConectionDataFree(LDAPConectionData da) {//用完后设置该连接为空闲状态,以便其他线程重用,并把阻塞的线程唤醒。   
  
        if (!da.getConetIsFree()) {   
            da.setConetIsFree(true);   
            this.notifyAll();   
        }   
    }   
  
    public synchronized LDAPConectionData getLDAPConectionData()   
            throws InterruptedException {//调用该方法返回一个LDAPConectionData   
        LDAPConectionData datatemp = null;   
        if (this.getSize() < LDAPConectionDataFactory.MAX_NUM_CONN) {//如果产生的LDAPConectionData还没有达到最大连接数,则可以从工厂里获取。   
  
            if (getSize() == 0 || datatemp == null) {   
                try {   
                    datatemp = LDAPConectionDataFactory.createLDAPConection();   
                    System.out.println(getSize());   
                    this.add(datatemp);   
                } catch (LDAPException e) {   
                    // TODO Auto-generated catch block   
                    e.printStackTrace();   
                }   
            }   
        } else {//如果已经达到最大连接数了。那么就的等待,知道有空闲的LDAPConectionData可以使用。   
            wait();   
            for (LDAPConectionData data : pool) {   
                if (data.getConetIsFree())   
                    datatemp = data;   
                break;   
  
            }   
  
        }   
        return datatemp;   
    }   
  
    public int getSize() {   
        return pool.size();   
    }   
  
    public void removeAll() {   
        closeAll();   
        pool.clear();   
    }   
  
    public void closeAll() {   
        for (LDAPConectionData data : pool) {   
            data.closeLDAPConnection();   
        }   
    }   
  
    public LDAPConectionData hasFree() {//这个方法几乎没有用。   
        if (getSize() < 1)   
            return null;   
        LDAPConectionData datatemp = null;   
        for (LDAPConectionData data : pool) {   
            if (data.getConetIsFree())   
                datatemp = data;   
            break;   
  
        }   
        return datatemp;   
    }   
}  

import java.util.ArrayList;
import java.util.List;
import com.novell.ldap.LDAPException;

final class LDAPConectionDataPool {

    private List<LDAPConectionData> pool = new ArrayList<LDAPConectionData>();//生成的LDAPConectionData实例,统统的都放到该List中,进行管理。

    private static LDAPConectionDataPool LDAPConnDataPool = null;//把该类设置成一个单点模式。

    private LDAPConectionDataPool() {

    }

    public static synchronized LDAPConectionDataPool getInstance() {
        if (LDAPConnDataPool == null) {
            return new LDAPConectionDataPool();
        } else {
            return LDAPConnDataPool;
        }
    }

    public void add(LDAPConectionData aa) {
        aa.setConetIsFree(false);
        this.pool.add(aa);
    }

    public synchronized void setConectionDataFree(LDAPConectionData da) {//用完后设置该连接为空闲状态,以便其他线程重用,并把阻塞的线程唤醒。

        if (!da.getConetIsFree()) {
            da.setConetIsFree(true);
            this.notifyAll();
        }
    }

    public synchronized LDAPConectionData getLDAPConectionData()
            throws InterruptedException {//调用该方法返回一个LDAPConectionData
        LDAPConectionData datatemp = null;
        if (this.getSize() < LDAPConectionDataFactory.MAX_NUM_CONN) {//如果产生的LDAPConectionData还没有达到最大连接数,则可以从工厂里获取。

            if (getSize() == 0 || datatemp == null) {
                try {
                    datatemp = LDAPConectionDataFactory.createLDAPConection();
                    System.out.println(getSize());
                    this.add(datatemp);
                } catch (LDAPException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        } else {//如果已经达到最大连接数了。那么就的等待,知道有空闲的LDAPConectionData可以使用。
            wait();
            for (LDAPConectionData data : pool) {
                if (data.getConetIsFree())
                    datatemp = data;
                break;

            }

        }
        return datatemp;
    }

    public int getSize() {
        return pool.size();
    }

    public void removeAll() {
        closeAll();
        pool.clear();
    }

    public void closeAll() {
        for (LDAPConectionData data : pool) {
            data.closeLDAPConnection();
        }
    }

    public LDAPConectionData hasFree() {//这个方法几乎没有用。
        if (getSize() < 1)
            return null;
        LDAPConectionData datatemp = null;
        for (LDAPConectionData data : pool) {
            if (data.getConetIsFree())
                datatemp = data;
            break;

        }
        return datatemp;
    }


3.LDAPConectionDataFactory工厂类。用来创建连接的类。

Java代码 
import com.novell.ldap.LDAPException;   
  
public class LDAPConectionDataFactory {   
  
    private static final String LDAP_URL = "192.168.1.21";//连接地址   
  
    private static final int LDAP_PORT = 20000;//端口。   
  
    private static final String MANAGER_USR = "cn=admin";//用户名   
  
    private static final String MANAGER_PASSWD = "12345678";//密码   
  
    public  static final int MAX_NUM_CONN = 2;//用户可以在这儿设置最多生成几个链接。   
  
    public static  LDAPConectionData createLDAPConection() throws LDAPException {   
                        return new LDAPConectionData(   
                                LDAPConectionDataFactory.LDAP_URL,   
                                LDAPConectionDataFactory.LDAP_PORT,   
                                LDAPConectionDataFactory.MANAGER_USR,   
                                LDAPConectionDataFactory.MANAGER_PASSWD);   
  
    }   
  
}  

import com.novell.ldap.LDAPException;

public class LDAPConectionDataFactory {

    private static final String LDAP_URL = "192.168.1.21";//连接地址

    private static final int LDAP_PORT = 20000;//端口。

    private static final String MANAGER_USR = "cn=admin";//用户名

    private static final String MANAGER_PASSWD = "12345678";//密码

    public  static final int MAX_NUM_CONN = 2;//用户可以在这儿设置最多生成几个链接。

    public static  LDAPConectionData createLDAPConection() throws LDAPException {
                        return new LDAPConectionData(
                                LDAPConectionDataFactory.LDAP_URL,
                                LDAPConectionDataFactory.LDAP_PORT,
                                LDAPConectionDataFactory.MANAGER_USR,
                                LDAPConectionDataFactory.MANAGER_PASSWD);

    }



以上就是介绍的全部。

还有,再贴上测试类和运行结果。


Java代码 
<STRONG>import com.novell.ldap.LDAPAttribute;   
import com.novell.ldap.LDAPAttributeSet;   
import com.novell.ldap.LDAPConnection;   
import com.novell.ldap.LDAPEntry;   
import com.novell.ldap.LDAPException;   
  
public class ThreadTest extends Thread {   
  
    private int uid;   
       
    public LDAPConectionDataPool pool=null;   
  
    public ThreadTest(int uid,LDAPConectionDataPool pl) {   
        this.uid = uid;   
        this.pool=pl;   
    }   
  
    public void run() {   
        System.out.println("Thread:"+uid+" is run!");   
        LDAPAttributeSet attributeSet= new LDAPAttributeSet();   
        attributeSet.add(new LDAPAttribute("objectclass", new String(   
                "inetOrgPerson")));   
        attributeSet.add(new LDAPAttribute("cn", new String[] { "李",   
                "Jim Smith", "Jimmy Smith" }));   
        attributeSet.add(new LDAPAttribute("givenname", new String[] { "测试",   
                "Jim", "Jimmy" }));   
        attributeSet.add(new LDAPAttribute("sn", new String("Smith")));   
        attributeSet.add(new LDAPAttribute("telephonenumber", new String(   
                "1 801 555 1212")));   
        attributeSet.add(new LDAPAttribute("mail",   
                new String("JSmith@Acme.com")));   
        attributeSet.add(new LDAPAttribute("userpassword", new String(   
                "newpassword")));   
        LDAPEntry entry = new LDAPEntry("uid="+uid+",ou=Code,cn=Lizl,dc=4a,dc=4adomain",   
                attributeSet);   
        LDAPConectionData data=null;   
        try {   
            data = pool.getLDAPConectionData();   
        } catch (InterruptedException e1) {   
            // TODO Auto-generated catch block   
            e1.printStackTrace();   
        }   
        try {   
            LDAPConnection lc=data.getConn();   
            lc.add(entry);   
        } catch (LDAPException e) {   
            // TODO Auto-generated catch block   
            e.printStackTrace();   
        }finally{   
            if(data!=null)   
                pool.setConectionDataFree(data);   
                   
        }   
    }   
  
    public static void main(String args[]) {   
        LDAPConectionDataPool pool=LDAPConectionDataPool.getInstance();   
        ThreadTest  a=new ThreadTest(400,pool);   
        ThreadTest  b=new ThreadTest(401,pool);   
        ThreadTest  c=new ThreadTest(402,pool);   
        ThreadTest  d=new ThreadTest(403,pool);   
        ThreadTest  e=new ThreadTest(404,pool);   
        ThreadTest  f=new ThreadTest(405,pool);   
        ThreadTest  g=new ThreadTest(406,pool);   
        ThreadTest  h=new ThreadTest(407,pool);   
        ThreadTest  i=new ThreadTest(408,pool);   
        ThreadTest  j=new ThreadTest(409,pool);   
        ThreadTest  k=new ThreadTest(410,pool);   
        a.start();   
        b.start();   
        c.start();   
        d.start();   
        e.start();   
        f.start();   
        g.start();   
        h.start();   
        i.start();   
        j.start();   
        k.start();   
               
  
    }   
}   
</STRONG>  

import com.novell.ldap.LDAPAttribute;
import com.novell.ldap.LDAPAttributeSet;
import com.novell.ldap.LDAPConnection;
import com.novell.ldap.LDAPEntry;
import com.novell.ldap.LDAPException;

public class ThreadTest extends Thread {

    private int uid;
    
    public LDAPConectionDataPool pool=null;

    public ThreadTest(int uid,LDAPConectionDataPool pl) {
        this.uid = uid;
        this.pool=pl;
    }

    public void run() {
        System.out.println("Thread:"+uid+" is run!");
        LDAPAttributeSet attributeSet= new LDAPAttributeSet();
        attributeSet.add(new LDAPAttribute("objectclass", new String(
                "inetOrgPerson")));
        attributeSet.add(new LDAPAttribute("cn", new String[] { "李",
                "Jim Smith", "Jimmy Smith" }));
        attributeSet.add(new LDAPAttribute("givenname", new String[] { "测试",
                "Jim", "Jimmy" }));
        attributeSet.add(new LDAPAttribute("sn", new String("Smith")));
        attributeSet.add(new LDAPAttribute("telephonenumber", new String(
                "1 801 555 1212")));
        attributeSet.add(new LDAPAttribute("mail",
                new String("JSmith@Acme.com")));
        attributeSet.add(new LDAPAttribute("userpassword", new String(
                "newpassword")));
        LDAPEntry entry = new LDAPEntry("uid="+uid+",ou=Code,cn=Lizl,dc=4a,dc=4adomain",
                attributeSet);
        LDAPConectionData data=null;
        try {
            data = pool.getLDAPConectionData();
        } catch (InterruptedException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        try {
            LDAPConnection lc=data.getConn();
            lc.add(entry);
        } catch (LDAPException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            if(data!=null)
                pool.setConectionDataFree(data);
                
        }
    }

    public static void main(String args[]) {
        LDAPConectionDataPool pool=LDAPConectionDataPool.getInstance();
        ThreadTest    a=new ThreadTest(400,pool);
        ThreadTest    b=new ThreadTest(401,pool);
        ThreadTest    c=new ThreadTest(402,pool);
        ThreadTest    d=new ThreadTest(403,pool);
        ThreadTest    e=new ThreadTest(404,pool);
        ThreadTest    f=new ThreadTest(405,pool);
        ThreadTest    g=new ThreadTest(406,pool);
        ThreadTest    h=new ThreadTest(407,pool);
        ThreadTest    i=new ThreadTest(408,pool);
        ThreadTest    j=new ThreadTest(409,pool);
        ThreadTest    k=new ThreadTest(410,pool);
        a.start();
        b.start();
        c.start();
        d.start();
        e.start();
        f.start();
        g.start();
        h.start();
        i.start();
        j.start();
        k.start();
            

    }
}
 运行结果如下:

 

Thread:400 is run!
Thread:401 is run!
Thread:403 is run!
Thread:405 is run!
Thread:402 is run!
Thread:404 is run!
Thread:406 is run!
Thread:408 is run!
Thread:407 is run!
Thread:409 is run!
Thread:410 is run!
------LDAPConnection create successfully!-----
0
------LDAPConnection create successfully!-----
1

原稿地址:http://qingyuan914.javaeye.com/blog/216955

版权声明   给作者写信
本篇文章对您是否有帮助?  投票:         投票结果:     8       0
作者其它文章: 作者全部文章
评论人:qingyuan914 发表时间: Mon Jul 21 16:59:56 CST 2008
建议大家到原稿处阅读,那儿的页面编辑的不错,能 有效的阅读。
评论人:blue44sky 发表时间: Fri Aug 01 17:33:10 CST 2008
收下了,[:E]

这个文章共有 2 条评论
主题: MyEclipse+struts+Hibernate配置和开发手册 上一篇文章
返回文章列表 返回〔J2EE综合〕
下一篇文章 主题: Java Persistence API (JPA) 的陷阱


文字广告链接
        自主、快速定制基于JAVA的B/S业务系统          重量级企业在线自定义WEB报表平台
        Excel制表、零代码发布、打印、图表结合——快逸报表,免费、稳定、功能强大的java工具
        技术圈: 关于Java、dotNet、PHP、Ruby、奇客、Web2.0等更多资讯博客精选文章

关于 JR  |  版权声明  |  联系我们 

©2002-2006 JR 版权所有 沪ICP备05019622号