ps: 图片怎么添加到blog 中呀???
1:数据库配置
在SystemGlobals.property中会看到这么一块信息:
# Database type to use
database.driver.name = mysql
# Can be net.jforum.SimpleConnection, net.jforum.PooledConnection
# or net.jforum.DataSourceConnection
database.connection.implementation = net.jforum.PooledConnection
# Enable / Disable transactions
database.use.transactions = true
# DataSource name, in case of using net.jforum.core.db.DataSourceConnection
database.datasource.name = java:/MySqlDS
# Time in seconds to healthcheck all database connections
database.ping.delay = 3600
# Extra parameters to pass to C3P0 (only when using PooledConnection)
# Form is key=value;key2=value2;keyN=valueN
c3p0.extra.params = checkoutTimeout=120000;debugUnreturnedConnectionStackTraces=false;unreturnedConnectionTimeout=180
这里配置了驱动类型,Connection的实现类,数据源等信息。
在论坛启动的时候会加载这些数据:
database.driver.config = ${config.dir}/database/${database.driver.name}/${database.driver.name}.properties
sql.queries.driver = ${config.dir}/database/${database.driver.name}/${database.driver.name}.sql
sql.queries.generic = ${config.dir}/database/generic/generic_queries.sql
2:封装数据库连接及连接池
2.1 DBConnection接口
接口方法:
[img][/img]
public static boolean createInstance()
载入并初始化在SystemGlobals.properties中配置的
database.connection.implementation 的值。该值是一个DBConnection实现类。
2.2 DBConnection类层次:
针对数据库中
默认的实现的使用了C3P0连接池的连接。
SimpleConnection不使用连接池,每次使用都需要获取一次数据库连接。
C3P0PooledConnection使用ComboPooledDataSource 数据源来获取连接,数据源的配置信息是通过SystemGlobals.properties和位于/WEB-INF/config/database/{DB_Name}/{DB_Name}.properties来配置。
3: DAO设计
DataAccessDriver会根据配置文件来注入具体的DataAccessDriver实现类。默认是MysqlDataAccessDriver. 那么对应就使用MysqlForumDAO等DAO的实现类。
这是典型的工厂模式,好处很多。
4:DAO中方法的实现
在前面说过,JForum是将所有的查询SQL放到配置文件中。对数据库操作的时候,就将对应的sql语句读取出来。
看GenericForumDAO中的一个方法:
protected int countForumPosts(int forumId)
{ PreparedStatement p = null;
ResultSet rs = null;
try {
p = JForumExecutionContext.getConnection().prepareStatement(
SystemGlobals.getSql("ForumModel.countForumPosts"));
p.setInt(1, forumId);
rs = p.executeQuery();
if (rs.next()) {
return rs.getInt(1);
}
return 0;
}
catch (SQLException e) {
throw new DatabaseException(e);
}
finally {
DbUtils.close(rs, p);
}
}
5:Connection获取及关闭的处理
在上面DAO的方法中,我们看到Connection是通过
JForumExecutionContext来获取的。其实JForumExecutionContext就是通过DBConnection接口获取的。如果已经存在了一个Conneciton,就使用已存在的,没有则新建。
在DAO方法中,我们看到只获取了Connection对象,数据库操作完毕后并没有执行conn.close()操作。
JForum是针对一个线程一个Connection,使用ThreadLocal对象将
JForumExecutionContext对象放入当前执行的线程中。
JForumExecutionContext中有finish()方法是用来处理操作结束时资源的清理,主要就是connection。
查看finish()被调用的地方,我们会发现,在执行完一段代码后会在finally块中执行JForumExecutionContext.finish()来释放数据库连接;
分享到:
相关推荐
开源BBS--JForum 源码 开源BBS--JForum 源码
JForum 是一个功能强大 ,易于管理的论坛。它的设计完全遵从MVC设计模式,能够在任何Servlet容器与EJB服务器上运行。而且可以轻松的定制与扩展JForum论坛。
jforum-2.1.8-src.zip,源码
JForum 开源代码,是很好的freeMaker学习素材。
Personally think is the best forum for the Java source code, open source, you can watch the official website of the latest developments http://www.jforum.net/
JForum 是采用Java开发的功能强大且稳定的论坛系统。它提供了抽象的接口、高效的论坛引擎以及易于使用的管理界面,同时具有完全的权限控制、多语言支持(包括中文)、高性能、可自定义的用户接口、安全、支持多...
jforum 2.1.9源码 内附安装开发文档
jforum-2.1.8-编译代码.zip
JForum 是采用Java开发的功能强大且稳定的论坛系统。它提供了抽象的接口、高效的论坛引擎以及易于使用的管理界面,同时具有完全的权限控制、多语言支持(包括中文)、高性能、可自定义的用户接口、安全、支持多...
jforum3.0从SVN上导出来的时候缺少jar包,经过不断的测试与添加终于能在myeclipse下面运行啦。可是现在的jforum3.0仍然是beat版本的。有许多BUG。如果不介意的话可以下载回去研究一下哦。我上传的东西没有jar包哦,...
jforum的开发文档,以及源码解析 数据库 重要配置文件和包,缓存 权限控制 单点登录
个人认为是最好的Java论坛源码,开源的,可以到官方网站看最新动态http://www.jforum.net/
JForum 是采用Java开发的功能强大且稳定的论坛系统。它提供了抽象的接口、高效的论坛引擎以及易于使用的管理界面,同时具有完全的权限控制、多语言支持(包括中文)、高性能、可自定义的用户接口、安全、支持多...
Jforum-2.1.9-myeclipse导入myeclipse直接使用
对于我们已有的WEB应用中的用户,若该用户已经登陆,并通过 联结迁移到JForum页面时,JForum要能够识别该用户已经登陆(不需要二次登陆)才不会让用户感到别扭(对用户来说,就好像使用的是同一个系统似的)。...
开源论坛jforum-2.1.9源码,带数据库
jforum3源代码数据库
jforum 完整源代码,从svn上 导出 没有任何修改
配合JMeter实战,搭建性能测试环境,可以搭配jmeter书籍作为测试环境使用,jforum2源码可二次开发