This is SAP PI requirement,
- Source System: XY_Client
- Middleware: PI System
- Target system : SAP
The XML files are received to the PI system, for each XML file an internal file is generated to keep track of store_number, and count of xml files.
How it works: suppose if XML_FILE_1 reaches PI, internal file called sequence_gen is created. the file contains the store number present in XML file and count will be initialized to 1.
- so first time,
sequence_gen file contains Store: 1001 Count:1
- (after some time interval)
- If XML_FILE_2 reaches PI, second time,
sequence_gen file contains Store: 1001 Count:2
- and so on..
My question is : If 'n' number of files come at the same time to PI system, the 1st file will lock the sequence_gen file. so how will the 2nd file update the value to the sequence_gen file? So how to tackle this problem?
I thought of creating a thread instance for every call and storing it in a database. and retrieving each instance, performing function, returning result to the xml call and deleting that instance.. Is it possible? How to go forward on this?
Rather than keep track of all of the threads that are locking and unlocking the file, you could have a single thread that is in charge of changing it. Have each thread place a request to change the file into a Concurrent Queue, which then notifies the Sequence_Gen thread to write to its own file. In essence:
Sequence_Gen thread:
Then, in any other thread, just queue and notify that there is something to write.