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检查此程序状态是否为正在运行,如果是则不作。如果不是则置状态为运行->运行->重置状态。

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

那么,问题出在哪儿呢?

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

[深度探索C++对象模型](简体版)中的蛇足

 >(简体版)中的蛇足(没有此书的人请勿看)上次见到这本书是一年前(是候先生的繁体版),花了一个星期的时间读完,囫囵吞枣,不求甚解,饶是如此,也解决了我在C++方面的诸多疑惑,这次终于看到了简体版,同...
  • Viper
  • Viper
  • 2001-10-10 13:24:00
  • 3529

USB OTG Session Request Protocol(SRP)请求过程

0.介绍 SRP总体过程如下: 1.通过管理VBUS与DATA LINES 来确定上一个SESSION的结束 2.B-DEVICE通过DATA LINES 上的脉出来发送SRP 3.A-DEV...
  • litao_wang
  • litao_wang
  • 2013-11-07 18:31:17
  • 996

Secure Remote Password (SRP)

安全远程口令(SRP) SRP是一个基于口令的身份认证和密钥交换协议。SRP的优点在于,认证过程中不会有密钥明文传递的现象,用户只需要持有口令即可,此外,服务端存储的非用户的口令,而是与口令相关的...
  • haoranstone
  • haoranstone
  • 2015-06-08 08:47:14
  • 1449

用SRP6协议实现游戏登录流程

用SRP6协议实现游戏登录流程          大家都知道,在网络游戏开发中,客户端登录是服务器端程序设计最重要的一环,在这个环节,要考虑的最主要的是玩家账号的安全问题.在当下网络环境中,黑客,...
  • zhongguoren666
  • zhongguoren666
  • 2012-09-25 20:02:08
  • 1801

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

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

SRP

(一)概念: 1.单一职责原则:就一个类而言,应该仅有一个引起它变化的原因。 2.职责:变化的原因。如果你能够想到多余一个的动机去修改一个类(修改一个类的代码去满足需求),那么这个类就具有多于一个...
  • u012656834
  • u012656834
  • 2016-07-05 14:50:06
  • 114

SRP:单一职责原则

SRP:单一职责原则 1.定义:一个类应该只有一个发生变化的原因。   2.分析:如果一个累承担了多于一个的职责,那么引起它变化的原因就会有多个,就等于把这些职责耦合在了一起。一个职责的变化可能...
  • gsfw2010
  • gsfw2010
  • 2012-04-16 22:09:45
  • 4031

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

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

<em>srp</em>_all 和配置文件

contains arp_table_info/device_item_info/route_table_info/<em>srp</em>_all.c... contains arp_table_info/device_item_info/route_table_info/<em>srp</em>_all.c ...
  • 2018年04月18日 00:00

SRP的一个实例(1)

这两天报过来个bug,和大家讨论了解决方案后,觉得这正是SRP一个广义上的实例,值得记录一下。先讲一下业务情况:数据库中有一些存储过程,目的是生成报表数据。应用服务器上有一个Java写的Timer,定...
  • iamlotus
  • iamlotus
  • 2007-10-10 23:31:00
  • 409
收藏助手
不良信息举报
您举报文章:SRP的一个实例(1)
举报原因:
原因补充:

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