`
lt1988
  • 浏览: 17668 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jive数据库连接模式

阅读更多

public class DefaultConnectionProvider implements ConnectionProvider实现了interface ConnectionProvider

这个类被设计为数据库连接提供者,在DefaultConnectionProvider类中有一个内部类,关键的功能都放这个内部类实现:private class ConnectionPool implements Runnable 连接池,实现了runnable,被设计成为一个后台线程。

 

 

 

这个类的属性包括:

        private Thread runner; 在构造函数中调用了runner=new Thread(this);runner.start();保存自身线程的引用,这个用法感觉很不适应。

        private Connection[] connPool; 连接数组
        private int[] connStatus; 状态数组

        private long[] connLockTime, connCreateDate; //
        private String[] connID; 连接编号
        private String dbDriver, dbServer, dbLogin, dbPassword, logFileString;  数据库的信息
        private int currConnections, connLast, minConns, maxConns, maxConnMSec;

        //available: set to false on destroy, checked by getConnection()
        private boolean available=true;

        private PrintWriter log;
        private SQLWarning currSQLWarning;
        private String pid; 线程编号??构造函数中赋值pid=fomatter("yyyy.MM.dd G 'at' hh:mm:ss");

 

 

 

构造函数:

public ConnectionPool (String dbDriver, String dbServer, String dbLogin,
                String dbPassword, int minConns, int maxConns,
                    String logFileString, double maxConnTime) throws IOException

设置了数据库的信息,循环5次try{createConn(id);}catch{},写入log;

 

 

 

创建单个连接:

private void createConn(int i) throws SQLException

根据i 创建connPoll[i]的链接,DriverManager.getConnection(dbServer,dbLogin,dbPassword);

connID[i] = String.valueOf(getConnectionHash(connPool[i])); 后面继续看这个方法的实现。

 

 

 

获得连接编号:

private int getConnectionHash(Connection con);

           return System.identityHashCode(con);

直接返回了jdk里面的方法:

public static int identityHashCode(Object x)
Returns the same hash code for the given object as would be returned by the default method hashCode(), whether or not the given object's class overrides hashCode(). The hash code for the null reference is zero.
关闭连接池:

public void destroy(int millis) throws SQLException

结束线程的执行:runner.interrupt();等待线程结束:runner.join(millis);等待无人使用连接或者超时:

while((useCount=getUseCount())>0 && System.currentTimeMillis() -startTime <=  millis) ;

正常情况下关闭所有连接connPool[i].close(),超时情况下将信息写入log;

 

 

获得连接编号:

idOfConnection(Connection conn)

遍历连接数组,比较编号。

 

 

获得当前活动的链接数

public int getUseCount()

从0到currConnections循环查询connStats进行统计,使用同步机制synchronized(connStatus)

 

 这些是基本的数据库连接池的实现方法,jive的实现方法并不复杂,下面介绍数据库设置保存。

 

jive使用内省和反射保存属性,是否这样有利于扩展增加其他的设置?

BeanInfo beanInfo = Introspector.getBeanInfo(conProvider.getClass());
PropertyDescriptor[] propDescriptors = beanInfo.getPropertyDescriptors();
String[] propertyNames = DefaultConnectionProviderBeanInfo.PROPERTY_NAMES;

 

descriptor = getPropertyDescriptor(propDescriptors,"maxConnections");
        writeMethod = descriptor.getWriteMethod();
        args = new Integer[1];
        args[0] = new Integer(maxConnections);
        writeMethod.invoke(conProvider, args);

 

 

分享到:
评论

相关推荐

    Jive_Design_Patterns.rar_jive_jive 设计模式_设计模式系统

    1. **单例模式**:Jive系统中可能有多个地方需要全局唯一的实例,如数据库连接池、配置管理等。单例模式确保了此类对象只有一个实例,避免了资源的浪费和状态的不一致。 2. **工厂模式**:在Jive的组件创建过程中,...

    JIVE论坛与设计模式

    1. **单例模式**:在多线程环境下,如数据库连接池管理,确保全局只有一个实例存在,减少资源浪费,提高性能。在JIVE中,可能用于管理全局配置或缓存服务。 2. **工厂模式**:用于创建对象,隐藏了对象创建的复杂性...

    jive论坛源码 设计模式

    例如,数据库连接池、全局配置管理等关键组件通常采用单例模式,保证在整个应用程序中只有一个共享实例,减少资源消耗并提高效率。 二、工厂模式(Factory) 工厂模式在创建对象时起到了抽象的作用,使得代码与...

    Jive与设计模式(Design Patterns in Action)

    这种模式在需要频繁创建和销毁对象时非常有用,例如数据库连接池管理。 6. **复合模式**:将对象组合成树形结构以表示“部分-整体”的层次结构。这种模式使得用户对单个对象和组合对象的使用具有一致性。在UI设计中...

    Jive的源码,适合学习设计模式

    在Jive中,可能会用到单例来管理某些系统级的服务或者资源,例如数据库连接池或配置管理。 2. **工厂模式(Factory)**:它提供了一种创建对象的方式,而无需指定具体的实现。在Jive的组件创建中,可能有各种类型的...

    jive 2.1.1

    在Jive的实现中,单例模式可能被用来管理全局唯一的实例,例如数据库连接池或配置对象。这种模式确保一个类只有一个实例,并提供一个全局访问点,从而避免了资源浪费和管理复杂性。 其次,“工厂模式”也是软件设计...

    jive 2.5 源代码

    2. **配置文件**:这些文件用于设定Jive的行为,如数据库连接、服务器设置等。通过修改这些配置,可以适应不同的部署环境。 3. **资源文件**:包括HTML、CSS、JavaScript等前端资源,用于构建用户界面。 4. **库文件...

    学习JavaEE的两个著名工程PetStore和Jive论坛二合一

    JavaEE,全称为Java Platform, Enterprise Edition,是Java平台针对企业级应用开发的版本,它提供了丰富的API和服务,包括Web服务、数据库连接、事务处理、安全性和多层架构支持等。在JavaEE的学习过程中,有两个...

    jive.chm

    7 使用XML封装数据库操作语句的实现 8 Database Package下面的暗黑世界 9 Jive树形结构视图(Treewalker) 10 有时候threadID并不是连续的 11 jsp连接数据库大全 12 OOD需要数据库设计...

    Jive源程序

    Jive可能会在数据库连接池或配置管理中使用单例。 3. **观察者模式**:Jive作为一款社交软件,用户之间的交互需要实时通知,这正是观察者模式的用武之地。它能确保当一个对象的状态改变时,所有依赖它的对象都会...

    学习Jive源程序,可以更好的理解和应用设计模式

    在Jive这样的系统中,单例通常用于管理共享资源,如数据库连接池、配置管理器等。学习如何在Jive中实现和使用单例模式,可以帮助我们理解如何在多线程环境中保证资源的安全性和高效利用。 观察者模式,也称为发布-...

    jive论坛分析资料收集

    例如,Jive论坛可能会使用不同的数据库系统,通过工厂模式,可以根据配置动态地创建对应的数据库连接对象。 单例模式则确保一个类只有一个实例,并提供全局访问点。在Jive论坛中,可能有全局管理用户会话、缓存或...

    最早最经典的jive论坛源代码

    这涉及到SQL查询优化、事务处理以及数据库连接池的使用,如使用Hibernate或JDBC进行数据操作。 4. **安全性**:Jive论坛的源码中包含了身份验证、授权、防止SQL注入和XSS攻击的实现,这些都是Web开发中必不可少的...

    开源程序Jive

    3. 数据库连接:Jive通常与关系型数据库如MySQL或PostgreSQL配合使用,需要了解SQL语言和JDBC接口。 4. 模块化和组件化开发:Jive采用模块化设计,理解如何组织和管理项目结构至关重要。 5. MVC(模型-视图-控制器)...

    Jive研究资料

    在Jive中,这种模式可能用于管理全局配置或者数据库连接,确保在整个应用生命周期中只有一个实例存在,从而避免资源浪费和状态不一致。 其次,工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式,通过...

    jive论坛

    2. **配置文件**:可能包含数据库连接配置、服务器设置、安全策略等,用于设置和管理论坛的运行环境。 3. **静态资源**:如HTML、CSS、JavaScript文件,它们负责论坛的前端展示,包括页面布局、样式和交互效果。 4...

    Jive资料集

    系统设计 1 jive设计思路 2 jive的工作内幕 3 Jive源代码研究 4 Jive中的设计模式 5 jive学习笔记 &lt;br&gt; &lt;br&gt; 数据库设计 1 Jive Forums数据库说明(英文) 2 Jive KB...

    jive论坛系统设计分析---板桥里人

    这对于管理整个应用程序共享资源(如数据库连接池)非常有用。 #### 结论 通过对Jive论坛系统的设计进行深入分析,我们可以看到许多经典设计模式的实际应用案例。这些模式不仅帮助开发团队解决了软件工程中常见的...

    jive2.1.1

    5. **database**:可能包含了数据库脚本或连接配置,用于设置和管理与应用相关的数据库。 6. **source**:源代码的存放位置,开发者可以在这里查看和学习JSP页面、Java类以及其他编程资源的原始代码。 7. **...

Global site tag (gtag.js) - Google Analytics