How to save Thread instance in a database using java

匆匆过客 提交于 2020-06-29 05:34:05

问题


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?


回答1:


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:

@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
    }
}

Then, in any other thread, just queue and notify that there is something to write.

public synchronized void AddItem(Object item) {
    queue.put(item);
    this.notifyAll();
}


来源:https://stackoverflow.com/questions/31048053/how-to-save-thread-instance-in-a-database-using-java

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!