I have a question, and I hope it is ok to ask it here.
It has been brought up by my struggle to move my work to 4.0, but if solved for me could benefit many people.
My specific problem is about managing to use rexx/sql with ooRexx 4.0 in a multithreaded environment, but it might b better if I ask the list a more general question.
That is, where one has to provide one’s applications with a service that continuously runs, what is the best way to set it up, use it and tear it down. This question has become more important in 4.0, because there used to be a loophole in ooDialog that allowed one to run methods on the ‘main’ thread of a dialog. Now that has gone, it needs to be done properly.
So for me, because rexx\sql needs to run on the thread that the library was loaded on, I have built a little server, I queue message objects on the server, and it performs them on the correct thread. That all works very well. My problem pertains to how to set it up when it is first needed, and tear it down when it is finished with.
I can set it up and start it running, by doing so in the CLASS INIT method. This means that the first script that includes the server class in a ::REQUIRES directive loads the rexx\sql libraries and kicks off the server.
Subsequent scripts may be loaded which ‘require’ the server class, and it is there and running.
However, when all the client scripts have finished and terminated, the server is still sitting there all alone running, and my interpreter instance won’t terminate.
Is there some mechanism by which the server can know that everything else has terminated and it is alone in the world?
Ancillary to that question was a question I asked on the RexxLA list, which was, if you have a process which ‘runs on’ in this fashion, is there some way to detect which method is still ‘active’ (I use the word active advisedly, as it is probably in a guarded state).