Sharing Configuration in ILEastic
I stumbled upon a little problem I first had some trouble to wrap my head around. My situation was the following:
- I had an ILEastic web service with multiple modules
- I wanted to share the configuration data with all modules
So for this kind of internal sharing of data I had decided to use a global variable I exported in one module and imported in the other module.
So for my first module the code looked something like this:
**FREE
ctl-opt thread(*concurrent);
/include 'ileastic/ileastic.rpgle'
/include 'noxdb/jsonparser.rpgle'
dcl-s userConfig pointer export;
main();
*inlr = *on;
dcl-proc main;
dcl-ds config likeds(il_config);
userConfig = loadConfig();
...
end-proc;
And the second module with the code for the web service endpoints looked something like this:
**FREE
ctl-opt nomain thread(*CONCURRENT);
/include 'ileastic/ileastic.rpgle'
dcl-s userConfig pointer import;
...
Everything looked nice. The procedure loadConfig
did load the configuration and
the configuration was assigned to the variable userConfig
. All seemed well but
when the procedure in the second module accessed the imported variable the
variable hold no value.
Hmmm ...
After much reading in the IBM Knowledge Center I haven't found anything which made it work.
And I noticed that I find most of my solutions on my way home from work or before going to bed. And that was also the case here.
I hadn't taken into account that this was a multi-threaded application and with
thread(*CONCURRENT)
I have a new userConfig
variable for every thread I started.
So the value I previously set is not available in the thread I started. But I wanted
the configuration to be available in all threads so a little change to the code made
it happen.
dcl-s userConfig pointer export static(*allthread);
and
dcl-s userConfig pointer import static(*allthread);
Now with the keywords static(*ALLTHREAD)
there is only one instance of this variable
for all threads.
Next post will be about provisioning the web service with a dynamic configuration.
Happy configuring!
Mihael