这是SAP PI的要求,
向PI系统接收XML文件,为每个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调用并删除该实例..是否可能?如何继续前进?
答案 0 :(得分:0)
您可以拥有一个负责更改文件的线程,而不是跟踪锁定和解锁文件的所有线程。让每个线程发出一个请求,将文件更改为并发队列,然后通知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();
}