SRP的一个实例(1)

原创 2007年10月10日 23:31:00

这两天报过来个bug,和大家讨论了解决方案后,觉得这正是SRP一个广义上的实例,值得记录一下。

先讲一下业务情况:

数据库中有一些存储过程,目的是生成报表数据。应用服务器上有一个Java写的Timer,定期(通常是一周,一月或一年末)调用这些存储过程,更新报表数据。这些存储过程中任何一个都能被顺序执行任意多次而不会出错,但如果同一个存储过程的两个实例并发执行会产生错误结果。

先前的处理方法基于以下两个考虑:

1)需要一个统一框架控制并发问题,不用在每个存储过程内部考虑并发问题。

2)出现意外情况时,系统能够自动恢复。这样不会在半夜两点钟被电话叫醒去修BUG。

基于以上的考虑,Java端Timer实现以下:

 

 

//Reset all flags when the scheduler restart
public void Scheduler...{
   ResetAllFlag(false
);
}

//Task to run
public void run(String storedProcedureName, Param[] params)......{
    
bool isRunning=getRunningFlagFromDB(storeProcedureName);
    
//last task has finished;
    if (isRunning)......{
        
return();
     }

     
//else{
        setRunningFlagToDB(storedProcedureName,true);
        updateRunningTimeToDB(storedProcedureName);
        runStoredProcudureInDB(storedProcedureName,
params);
        setRunningFlagToDB(storedProcedureName,
false);   
             }

     }
}

 

在DB中有一张Lock表,包括以下字段(Name,State),后台的Java Scheduler用这张表中相应行实现锁。每次Scheduler重启时会重置所有的程序运行状态为false,当一个存储过程被调用时,Java Scheduler检查此程序状态是否为正在运行,如果是则不作。如果不是则置状态为运行->运行->重置状态。

用户反映,某些报表中数据异常大,看起来似乎是翻倍了。也就是说,还是有某些存储过程被并发执行了。

那么,问题出在哪儿呢?

...太晚了,明天继续吧

USB OTG规范的SRP和HNP协议

OTG设备首先应该是符合USB2.0规范的设备,此外它还具有以下特征[1]: 1. 有限的主机性能 2. 像外围设备一样能进行全速操作(可选高速) 3. 像主机一样支...
  • chrovery
  • chrovery
  • 2015年09月25日 15:13
  • 1237

USB OTG规范的SRP和HNP协议

OTG设备首先应该是符合USB2.0规范的设备,此外它还具有以下特征[1]: 1. 有限的主机性能 2. 像外围设备一样能进行全速操作(可选高速) 3. 像主机一样支持全速(可选低速...
  • u011006622
  • u011006622
  • 2016年12月19日 15:07
  • 414

Java 设计模式(十) 单一职责原则(SRP)

单一职责原则(Single Responsibility Principle)SRP 基本概念单一职责原则 定义:应该有且仅有一个原因引起类的变更,也就是接口或类和职责的关系是一一对应的。 难点:职责...
  • qq_24451605
  • qq_24451605
  • 2016年05月08日 17:55
  • 2438

设计模式六大原则之--单一职责原则(SRP)

1.单一职责原则,(Single Responsibility Principle). 定义:There should never be more than one reason for a c...
  • benbenxiongyuan
  • benbenxiongyuan
  • 2014年04月17日 16:13
  • 1154

0..1:0 或1 个实例. 0..*: 对实例的数目没有限制. 1: 只能有一个实例. 1..*: 至少有一个实例.

UML的构造快包含3种:  (1) 事物(4种):结构事物,行为事物,分组事物,注释事物 (2) 关系(4种):泛化关系,实现关系,依赖关系,关联关系 (3) 图(10种):用例图,...
  • helinsen
  • helinsen
  • 2013年08月08日 19:37
  • 459

关于VMAX中存储资源池(SRP)

Storage Resource Pool中的相关元素      SRP由一个或多个数据池组成,这些数据池包含了预配置的数据(或TDAT)设备,可为创建和呈现给主机与应用程序的精简设...
  • qq_33932782
  • qq_33932782
  • 2016年06月26日 15:52
  • 583

一个基于1:1比例的匹配的实例及详解

从1月份暂停了halcon的学习,复习考研和年终收尾工作,直到这个月才开始halcon的学习,正好也庆祝自己考上浙江大学的工程硕士,新的学习和工作也开始了。 今天开始总结前面学习的几个例子和分享这周...
  • u010435562
  • u010435562
  • 2013年04月29日 00:05
  • 1333

实验5——类和对象

一、实验目标 1、掌握类的定义及类中的各个成员的使用 2、掌握构造函数的使用 3、掌握类成员的访问权限 4、掌握实例成员和静态成员的定义和访问,注意二者的区别 二、实验内容 1、实现一个矩形类,创建其...
  • iamzxf
  • iamzxf
  • 2015年04月21日 17:51
  • 1378

南邮 OJ 1276 子集和问题

子集和问题 时间限制(普通/Java) : 1000 MS/ 3000 MS          运行内存限制 : 65536 KByte 总提交 : 60            测试通过 : 5 ...
  • changshu1
  • changshu1
  • 2015年08月05日 14:19
  • 291

一个使用Dictionary的小实例

在C#中,使用Dictionary类来管理由键值对组成的集合,这类集合称为字典。 字典最大的特点就是能够根据键来快速查找集合中的值。 下面是一个使用字典的小实例,希望通过这个小实例,能让大家对字典...
  • tiana0
  • tiana0
  • 2014年09月14日 17:53
  • 1888
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SRP的一个实例(1)
举报原因:
原因补充:

(最多只允许输入30个字)