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

JForum源代码研究—ThreadLocal,用户特有的变量

阅读更多

JForumExecutionContext是一个很有意思的类!顾名思义,这是一个执行期或运行期上下文类。嗨,等于没说!先看其类变量:

private static ThreadLocal userData = new ThreadLocal();
private static Logger logger = Logger.getLogger(JForumExecutionContext.class);
private static Configuration templateConfig;
	
private Connection conn;
private ForumContext forumContext;
private SimpleHash context = new SimpleHash(ObjectWrapper.BEANS_WRAPPER);
private String redirectTo;
private String contentType;
private boolean isCustomContent;

private boolean enableRollback;
 

静态变量 logger 就不多说了。静态变量templateConfig, 这是freemarker 的经典用法,也不多说了。对于非静态变量,都是特定用户相关的 。即用户 A 的“ redirectTo ”与用户 B 的“ redirectTo ”值是不同的。 context 也是和用户相关,用户 A 可能会使用 context.put("userName", " 张三 ") ,而用户 B 可能会使用 context.put("userName", " 李四 ") ,在页面上可能会这样:你好, ${userName} 。每个用户的 HttpServletRequest HttpServletResponse 也是不同的,因此,forumContext也是和用户相关的。contentType、isCustomConent和enableRollback都是和特定用户相关的。

 

特别地,为什么 conn 也是和用户相关的呢?通常,数据库连接应该和用户没有关系啊!?关键是,当用户请求执行到最后,可能用户 A 要提交,而用户 B 要回滚,要做到这一点必须要记录用户 A 最初获得的是哪个 conn ,而不能随便从连接池中获得一个 conn ,因此, conn 也是和用户相关的。如果你查看JForum的诸多 DAO 方法,你会发现系统使用JForumExecutionContext.getConnection() 而不是从连接池中 来获得数据库连接。当然,当用户的请求被处理完毕后,要使用JForumExecutionContext. finish() 来释放数据库连接。

 

“每个用户都有自己独立的变量值”,联想一下“每个线程都有自己独立的变量值”,你一定会想起 ThreadLocal 的用法。这里 userData 是静态的,这是 ThreadLocal API 里推荐 使用的修饰符。

 

 

 

 

 

分享到:
评论

相关推荐

    jforum3源代码

    JForum是著名的开源论坛,支持多达数十种的多国语言,其中包括简体中文(。JForumJForum功能强大,界面美观,代码结构清晰

    jforum3源代码 数据库

    jforum3源代码数据库

    jforum配置安装介绍+源代码

    jforum配置安装介绍+源代码 jforum配置安装介绍+源代码

    jforum漏洞利用源代码

    jforum漏洞利用源代码

    jforum的源代码和物理结构

    jforum的源代码和类包,很方便集成和学习。同时里面有一个物理结构图,能方便的清晰的了解jforum的整体设计,对想研究和使用开源论坛的开发者非常好哦。

    jforum开源论坛 官方源代码(2.1.9)

    jforum开源论坛 官方源代码(2.1.9)

    jforum 2.1.9源码

    jforum 2.1.9源码 内附安装开发文档

    jforum-2.1.8版本完整源代码(1)

    jforum-2.1.8版本完整源代码(1),因为完整版本超过15mb,因此分成两部分下载。

    jforum2.1.9代码及SQL SERVER数据库备份

    内涵jforum2.1.9源码,并且使用sql server 2008数据库,已配置完成,可以直接部署使用和学习

    JForum源代码

    它提供了抽象的接口、高效的论坛引擎以及易于使用的管理界面,同时具有完全的权限控制、多语言支持(包括中文)、高性能、可自定义的用户接口、安全、支持多数据库等等特性。 JForum 采用 FreeMarker 作为

    jforum-2.1.8版本完整源代码(2)

    jforum-2.1.8版本完整源代码(2) 请找到(1)部分一起解压。

    JForum3 完整项目

    jforum 完整源代码,从svn上 导出 没有任何修改

    Jforum数据库

    JForum - Java论坛系统 数据库表结构,如:附件关系表JFORUM_ATTACH,附件详细信息表JFORUM_ATTACH_DESC,用户分组表JFORUM_GROUPS等表结构说明,如帖子表JFORUM_POSTS说明: 名称 字段名 字段类型 字段说明 帖子...

    jforum 源码

    JForum 开源代码,是很好的freeMaker学习素材。

    JForum_SSO_-_JForum单点登陆原理与配置

    对于我们已有的WEB应用中的用户,若该用户已经登陆,并通过 联结迁移到JForum页面时,JForum要能够识别该用户已经登陆(不需要二次登陆)才不会让用户感到别扭(对用户来说,就好像使用的是同一个系统似的)。...

    jforum-2.1.8-编译代码.zip

    jforum-2.1.8-编译代码.zip

    JForum论坛数据库表结构.rar

    12、版面对用户可见关系表JFORUM_FORUMS_WATCH 5 13、用户分组表JFORUM_GROUPS 5 14、关系表JFORUM_KARMA 5 15、帖子表JFORUM_POSTS 5 16、帖子内容表JFORUM_POSTS_TEXT 6 17、消息表JFORUM_PRIVMSGS 6 18、...

    JForum3 jforum java 开源论坛 论坛

    JForum3 jforum java 开源论坛 论坛

    jforum功能说明

    JForum功能强大,界面美观,加上代码结构清晰,而且采用的是BSD授权,不必担心不必要的版权纠纷。可以说JForum是论坛二次开发的绝佳选择。 JForum采用的是自己的MVC框架,因此在初次接触的时候可能会有些不习惯,但...

    JAVA上百实例源码以及开源项目源代码

    Message-Driven Bean EJB实例源代码 2个目标文件 摘要:Java源码,初学实例,EJB实例 Message-Driven Bean EJB实例源代码,演示一个接收购物订单的消息驱动Bean,处理这个订单同时通过e-mail的形式 //给客户发一个感谢...

Global site tag (gtag.js) - Google Analytics