paulwiersema
Our corporate environment has a fairly typical setup with different execution environments for development, integration testing, and production. There is a single server setup in each environment and all the various groups develop and maintain their individual adapters. The format for the package we submit to the LS team for installation is a zip file containing the adapters.xml and the libraries that we need to load. As such, we don't have access to JVM parameters or such in the execution environment.
The issue I'm facing is that we need to use the same package for both INTEGRATION and PROD deployments, but of course, they use different connection strings to their source data. It appears whatever calls DataProvider.init() has already read the xml parameters into a map before the init() method is called. I'm looking for a way to "choose" either the location or filename of adapters.xml at runtime and include that map in the DataProvider.init() call. We can use existence of certain filesystems to make that determination, but I can't seem to locate where the DataProvider.init() is called. Any help would be greatly appreciated.
Thanks in advance,
Paul
Dario Crivelli
Hello Paul,
The adapters.xml file is loaded before adapters are initialized because it contains information on how to load the Adapters.
Then the Adapters are initialized before the Server starts listening.
If you need to initialize two adapters differently even though their installation directories are identical, they should acquire specific information by asking to some external system or by looking for some file outside the installation directory; this can be done in the init() method.
Is this enough for your purpose?
Perhaps you cannot accept that the init() code that will be used also in production can look for specialized information that are needed only in the test environment?
paulwiersema
Dario,
Thanks for the reply. What I seem to be missing is that the parameters map is already read in by the time the init() is called, so I'd need to interject into the code path before then, but I don't see any way to do that.
The best that I can come up with at this point is to build both the SI and PROD packages at the same time, with only the configuration being different, and then deliver the appropriate package for the intended environment. It's not ideal, but I can't see any other way. Please let me know if I've missed something.
Thanks,
Paul
paulwiersema
I think the approach I'll take for now is to set both SI and PROD specific values in the original map and then, in init() set the general one to the appropriate value.
Thanks,
Paul
Dario Crivelli
I still can't understand how you would have liked to operate.
I can add the following notes:
Dario Crivelli
I still can't understand how you would have liked to operate.
There may be a few tricks left, but, since you say that you are not allowed to set different JVM variables in the two environments (which would be a very simple solution), it is not clear to me what other ways of distinguish the environments are allowed.