使用 IBM FileNet P8 实现序列号分发器
2009-12-09 00:00:00 来源:WEB开发网当到达面包店的食品台时,我们希望拿到自己点的美观可口的小蛋糕!
在描述我们喜欢的实现之前,我们首先看几项还不能很好地发挥作用的技术。尽管您永远没有必要实现这个特殊的用例,但是本文描述的要点适用于许多 P8 编程领域。
Java 或 .NET 同步
如果您是企业开发或分布式开发的新手,您首先想到的可能是使用一个大对象,它能够在某种程度上同步访问更新计数器的部分。在 Java 中,这可能是一个 synchronized 方法或代码块。在 C# 中,这可能是一个标记为 synchronized 的方法或受 lock() 保护的代码块。能够进行同步访问的代码块有时称为关键部分。清单 1 显示了实现该代码块的方式之一。
清单 1. 同步代码块/**
* *** DON'T DO IT THIS WAY ***
*/
public class Dispenser
{
/** static access only, so private constructor */
private Dispenser() {}
private static int counter = 0;
public static final synchronized int getNextValue()
{
return ++counter;
}
}
使用同步代码能够很好地解决某些问题,但它的缺点在某些情况下也特别明显。因为计数器的值仅存在运行程序的内存中,如果程序重启,那么这些值将重新开始。您可以更改 Dispenser 类以将更新的计数器值保存到一个文件中,但这可能导致新的问题,因为没有在各个进程之间协调同步。对于独立运行的不同应用程序(或相同应用程序的副本),即使使用了 Dispenser 类,也可能将读或写交叉存取到文件中。更糟糕的是,它们可能访问不同机器上名称相同的应用程序。这两种情况都会导致违背我们的用例需求。
更多精彩
赞助商链接