0

这是 SAP PI 要求,

  • 源系统:XY_Client
  • 中间件:PI System
  • 目标系统:SAP

XML 文件被接收到 PI System,为每个 XML 文件生成一个内部文件以跟踪 store_number 和 xml 文件的计数。

工作原理:假设如果 XML_FILE_1 到达 PI,则会创建名为 sequence_gen 的内部文件。该文件包含 XML 文件中存在的商店编号,并且计数将被初始化为 1。所以第一次,

sequence_gen file contains Store: 1001 Count:1
(经过一段时间间隔)如果 XML_FILE_2 达到 PI,第二次,

sequence_gen file contains Store: 1001 Count:2 等等..

我的问题是:如果 'n' 个文件同时进入 PI 系统,第一个文件将锁定 sequence_gen 文件。那么第二个文件将如何将值更新到 sequence_gen 文件中呢?那么如何解决这个问题呢?

我想为每个调用创建一个线程实例并将其存储在数据库中。并检索每个实例,执行功能,将结果返回给 xml 调用并删除该实例。这可能吗?如何在这方面前进?

4

1 回答 1

1

您可以拥有一个负责更改文件的线程,而不是跟踪所有锁定和解锁文件的线程。让每个线程发出将文件更改为并发队列的请求,然后通知 Sequence_Gen 线程写入自己的文件。在本质上:

Sequence_Gen 线程:

@Override
public synchronized void Run(){
    while(true){ //Some condition
        while(queue.isEmpty()) { 
            this.wait();

        }
        Object obj = queue.pop();
        //Open file
        file.write(obj);
        //Close file
    }
}

然后,在任何其他线程中,只需排队并通知有东西要写。

public synchronized void AddItem(Object item) {
    queue.put(item);
    this.notifyAll();
}
于 2015-06-25T14:42:06.310 回答