0

これは SAP PI 要件です。

  • ソース システム: XY_Client
  • ミドルウェア: PI システム
  • 対象システム:SAP

XML ファイルは PI システムに受信され、XML ファイルごとに内部ファイルが生成され、store_number と xml ファイルの数が追跡されます。

仕組み: XML_FILE_1 が PI に到達すると、sequence_gen という内部ファイルが作成されるとします。このファイルには XML ファイルに存在する店舗番号が含まれており、count は 1 に初期化されます。

sequence_gen file contains Store: 1001 Count:1
(一定の時間間隔の後) XML_FILE_2 が PI に達した場合、2 回目は、

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

私の質問は次のとおりです。「n」個のファイルが同時にPIシステムに来ると、最初のファイルがsequence_genファイルをロックします。では、2 番目のファイルは値を 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 に答える