WEB开发网
开发学院软件开发Java 使用 IBM FileNet P8 实现序列号分发器 阅读

使用 IBM FileNet P8 实现序列号分发器

 2009-12-09 00:00:00 来源:WEB开发网   
核心提示: 当到达面包店的食品台时,我们希望拿到自己点的美观可口的小蛋糕! 在描述我们喜欢的实现之前,使用 IBM FileNet P8 实现序列号分发器(2),我们首先看几项还不能很好地发挥作用的技术,尽管您永远没有必要实现这个特殊的用例,更糟糕的是,它们可能访问不同机器上名称相同的应用程序,但是本文描述

当到达面包店的食品台时,我们希望拿到自己点的美观可口的小蛋糕!

在描述我们喜欢的实现之前,我们首先看几项还不能很好地发挥作用的技术。尽管您永远没有必要实现这个特殊的用例,但是本文描述的要点适用于许多 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 类,也可能将读或写交叉存取到文件中。更糟糕的是,它们可能访问不同机器上名称相同的应用程序。这两种情况都会导致违背我们的用例需求。

上一页  1 2 3 4 5 6 7  下一页

Tags:使用 IBM FileNet

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接