`
xuyan2680
  • 浏览: 31739 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

jforum事务与ThreadLocal

阅读更多
jforum事务控制是粗粒度控制的,也就是说,对每个请求Service的线程,如果需要获得数据库连接,则
JForumExecutionContext ex = get();
		Connection c =  ex.conn;
		
		if (validate && c == null) {
			c = DBConnection.getImplementation().getConnection();
			
			try {
				c.setAutoCommit(!SystemGlobals.getBoolValue(ConfigKeys.DATABASE_USE_TRANSACTIONS));
			}
			catch (Exception e) {
                //catch error autocommit
            }
			
			ex.setConnection(c);
			set(ex);
		}

JForumExecutionContext 是一个执行上下文,持有 connection引用。JForumExecutionContext对每个请求的线程都保存当前 线程的 执行上下文(JForumExecutionContext),每次需要数据库连接时,都从当前线程的本地变量中获得连接,当前线程中的数据库连接为空,就新建一个连接。如果系统配置了需要事务,则:
c.setAutoCommit(!SystemGlobals.getBoolValue(ConfigKeys.DATABASE_USE_TRANSACTIONS));

在此处设置了连接是否 自动提交。
在每次使用完connection,不必关闭连接,而是程序统一在servlet 的Service方法中完成本次请求后释放资源,判断是否提交事务,并且关闭连接。

JForumExecutionContext.finish();

finish实现如下:

public static void finish()
	{
		Connection conn = JForumExecutionContext.getConnection(false);
		
		if (conn != null) {
			if (SystemGlobals.getBoolValue(ConfigKeys.DATABASE_USE_TRANSACTIONS)) {
				if (JForumExecutionContext.shouldRollback()) {
					try {
						conn.rollback();
					}
					catch (Exception e) {
						logger.error("Error while rolling back a transaction", e);
					}
				}
				else {
					try {
						conn.commit();
					}
					catch (Exception e) {
						logger.error("Error while commiting a transaction", e);
					}
				}
			}
			
			try {
				DBConnection.getImplementation().releaseConnection(conn);
			}
			catch (Exception e) {
				logger.error("Error while releasing the connection : " + e, e);
			}
		}
		
		userData.set(null);
	}


这样的实现,事务是控制住了,但是事务的跨度太大,粒度太粗,相反,spring的事务控制 就可以控制到比较细了。
spring声明式事务控制,通过aop,动态代理生成需要控制事务的类,并且注入事务拦截接口而实现的。在spring本地事务中,也是通过ThreadLocal 来持有对当前线程的获得的数据库连接的,使用ThreadLocal好处就是在任何地方都能访问当前线程保存在其中的数据,而不用担心多线程访问的问题,因为每个线程都只能访问当前线程对应的那部分数据。不过对分布式事务的实现而言,ThreadLocal 恐怕帮不上忙了,具体我也不是很清楚,下面请哪位看管讲讲。。。
分享到:
评论
2 楼 flourish.sun 2012-06-23  
赞一下。在学习jforum中,你的帖子很有帮助,显然,偶不是博主指的看官啦!
1 楼 xuyan2680 2010-01-25  
怎么没有看官讲讲呢。。

相关推荐

    chx 学习jForum笔记十八 jForum与ms sqlserver

    《jForum与MS SQLServer整合学习笔记》 jForum是一款基于Java的开源论坛系统,它以其高度可定制性、灵活性和强大的功能深受开发者喜爱。在本文中,我们将深入探讨如何将jForum与Microsoft SQL Server(简称MS SQL...

    jforum3.0所需要的jar包

    3. **数据库连接jar**:jForum需要与数据库进行交互,存储用户信息、帖子内容等数据。因此,需要数据库驱动的jar包,如mysql-connector.jar(如果使用MySQL)或者ojdbc.jar(如果使用Oracle)。这些jar包提供了与...

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

    【JForum SSO原理与配置】 JForum是一款开源的论坛软件,具备强大的功能。在与其他Web应用集成时,为了提供无缝的用户体验,通常需要实现单点登录(SSO,Single Sign On)。SSO允许用户在一个系统登录后,无需再次...

    jforum说明文档 源码解析 单点登录 jforum缓存

    Jforum使用Hibernate作为ORM工具,负责将数据对象与数据库表进行映射,简化了数据库操作。 2. **视图层(View)**:呈现用户界面。Jforum使用Freemarker模板引擎,允许开发者自定义论坛的显示样式。 3. **控制器...

    jforum3.0项目需要的jar包

    2. **Web服务器**:JForum通常与流行的Java Web服务器(如Tomcat、Jetty)一起部署。你需要设置并配置一个这样的服务器,以便JForum能够处理HTTP请求。 3. **Servlet容器**:由于JForum是一个Web应用程序,它依赖于...

    Jforum安装部署

    ### JForum 安装部署详解 #### 一、概述 JForum是一款开源的Java类论坛系统,以其小巧高效而著称。它不仅采用了多种JSP新技术,还支持多种数据库(如HSQLDB、Oracle、MySQL、PostgreSQL等),并且遵循MVC设计模式...

    Jforum2.19

    3. **配置数据库连接**:Jforum需要与数据库交互存储用户信息和论坛内容。在MyEclipse中,你需要配置Jforum的数据库连接参数,通常是在`config.properties`文件中设置。 4. **部署与运行**:在MyEclipse中配置...

    jforum3源代码

    JForum3可能提供了API接口,允许与其他系统进行集成,如社交媒体登录、第三方统计分析等。 通过研究JForum3的源代码,开发者不仅可以学习到Java Web开发的最佳实践,还能掌握如何构建一个健壮、易扩展的社区平台。...

    JForum3 jforum java 开源论坛 论坛

    在Java编程领域,JForum3的开发基于Java Servlet和JavaServer Pages(JSP)技术,这使得它能够跨平台运行,并且与各种Java应用服务器兼容。同时,它利用了Model-View-Controller(MVC)设计模式,这种模式有助于分离...

    JForum3 完整项目

    **JForum3 完整项目详解** JForum3 是一个基于Java开发的开源论坛系统,提供了丰富的社区交流功能。这个项目包含的是从版本控制系统Subversion(SVN)中导出的完整源代码,未经任何修改,因此用户可以深入研究其...

    Jforum相关文档和PPT

    Jforum通常使用Hibernate或iBatis等ORM框架,通过SQL语句与数据库交互。理解如何配置数据源、编写实体类、映射文件以及执行查询和更新操作,对于论坛的数据库管理至关重要。 文件监控通常涉及到论坛上传的附件和...

    Jforum二次开发成果

    2.3 代码编写与修改:在Eclipse中,对Jforum的源码进行修改或添加新代码,实现新功能。例如,为了实现子论坛功能,可能需要对用户权限管理、板块分类以及导航栏进行调整。 2.4 数据库操作:使用jforum_dump.sql文件...

    jforum漏洞利用源代码

    《JForum漏洞利用源代码解析》 JForum是一款流行的开源Java论坛系统,它以其功能丰富、社区友好而受到许多用户的青睐。然而,如同任何复杂的软件系统一样,JForum也存在安全漏洞,这些漏洞可能被恶意用户利用,对...

    jforum 源码

    本篇文章将深入探讨JForum源码中的核心知识点,以及它如何与FreeMarker结合提供动态网页生成。 1. **FreeMarker模板引擎** FreeMarker是一个用Java语言编写的模板引擎,用于生成动态内容。在JForum中,FreeMarker...

    JForum论坛数据库表结构.rar

    1、附件关系表JFORUM_ATTACH 2 2、附件详细信息表JFORUM_ATTACH_DESC 2 3、附件配置限定关系表JFORUM_ATTACH_QUOTA 2 4、封锁表JFORUM_BANLIST 2 5、标识表JFORUM_BANNER 3 6、书签表JFORUM_BOOKMARKS 3 7、...

    jforum+ckeditor整合案例

    JForum是一款流行的Java论坛软件,它提供了一个用户友好的界面,支持多语言,且具有高度可扩展性。CKEditor则是一个先进的在线文本编辑器,广泛用于网站内容管理系统,提供丰富的富文本编辑功能。在JForum中整合...

    利用JForum创建论坛

    【JForum论坛创建详解】 JForum是一款知名的开源论坛软件,具备多语言支持,包括简体中文,虽然管理界面并未完全汉化。它以其强大的功能、优雅的界面以及清晰的代码结构,成为二次开发的理想选择。JForum基于BSD...

    jforum3源代码 数据库

    本篇将深入探讨JForum3的源代码和其与数据库的交互,以及如何进行配置。 **一、JForum3源代码结构** JForum3的源代码主要由以下几个部分组成: 1. **Web前端**:基于Servlet和JSP,负责处理HTTP请求,呈现HTML...

Global site tag (gtag.js) - Google Analytics