JForum源码学习研究3-持久层

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()来释放数据库连接;

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
附录A是JForum性能测试计划文档的下载链接。根据文档中的介绍,该性能测试计划旨在对JForum的性能进行评估和测试。这对于了解JForum在各种负载条件下的表现以及其各个功能的稳定性和可靠性非常重要。 性能测试计划文档包含了测试的目标和范围、测试环境的配置、测试用例的设计和实施以及测试结果的分析等内容。下载该文档可以帮助我们更好地了解JForum在实际使用中的性能表现,以及可能存在的瓶颈和问题,为进一步优化和改进JForum提供参考依据。 在进行性能测试前,我们需要先根据文档中提供的测试环境配置要求,搭建相应的测试环境,包括安装和配置JForum的服务器和数据库等。然后,根据测试用例的设计,模拟并生成各种使用情况下的负载和压力,对JForum进行全面的性能测试。 在进行测试时,我们需要记录测试过程中的各项指标,如响应时间、吞吐量、并发用户数等,以便后续的分析和比较。测试结果的分析将帮助我们评估JForum在不同负载下的性能表现,找出可能存在的性能瓶颈,并提供相应的改进措施。通过性能测试计划文档的下载和实施,可以为JForum的性能优化和改进提供重要的参考和依据。 总之,附录A中的性能测试计划文档将为我们评估和改进JForum的性能提供重要的指导和支持。通过下载该文档并按照其中的指导进行实施,我们可以更好地了解JForum在实际使用中的性能表现,并为其优化和改进提供有效的参考。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值