Introspection and 'Data integrity constraints'
The Problem
When attempting to introspect a domain you receive the following error:
The Cause
For some reason there are duplicate properties defined within the JCA Adapter configuration. Often this is due to the parameters having slightly different case. e.g. privateKeyFile versus PrivateKeyFile. When MyST Studio goes to store these into the database it violates the db constraints
The Solution
Manually manipulate the Plan.xml for the JCA Adapter and remove the duplicate configuration. This document will step you through some of the tools to make this as easy as possible.
Generate the Introspection JSON
By using the command line introspection utility we are able to generate the json representation of the domain that is pushed to MyST Studio. If you are not familiar with the command line utility, more information on it can be found here.
Getting the Utility
The WebLogic Introspection agent can be obtained by running the following from the MyST Studio host.
docker cp myststudio_web:/usr/local/tomcat/conf/fusioncloud/agent/<File Name> .
where<File Name>
is one of the following depending on the operating system where you want to run MyST Studio on.
weblogic-introspection-linux-x86_64
Linux 64 bit
weblogic-introspection-solaris-x86_64
Solaris 64 bit
weblogic-introspection-solaris-sparc
Solaris SPARC
Once you have obtained the file from within the container, you can copy it to any host that you want to introspect from. To make it readily available asweblogic-introspection
, you should copy it to a location on the PATH, rename it and ensure it has execute permissions. For example:
Running the Utility
This will generate a file called blueprint
Reviewing the JSON
The size and scope of the json document make it very difficult to compare all of the parameters for each individual JCA Adapter configuration looking for duplicates using the Online JSON Editor. There is a tool called jq that proves great json manipulation, in a similar fashion to the unix command sed.
If you do not want to install jq, there is an online version (jqplay) of the editor, as shown in article.
Copy the contents of the blueprint file created by the introspection utility into the JSON field of jqplay
Past the following into the filter field. This will filter out all of the FtpAdapter entries, and generate a list of all of the parameters per adapter configuration. This can also be used for the JMS, and Database simply by changing
rxr.wls.JcaAdapter-FtpAdapter
torxr.wls.JcaAdapter-JmaAdapter
andrxr.wls.JcaAdapter-DbAdapter
respectively. You can also traverse the document in the right hand panel without the filter to find any other adapters you wish to evaluate.
Either review the filtered list in jq play or use your favourite text editor to look for duplicate entries. In the example below eis/sftp/JDEXeAppSvr has both
PrivateKeyFile
andprivateKeyFile
Edit the Plan.xml
Using your favourite text edit, open the Plan.xml for the respective JCA Adapter
The aim of this step is to find both versions of the duplicate parameter, and work out which one should be removed. In some cases one parameter will have a value and the other wont, in which case it is obvious which one should be removed. In the event that both parameters have values and they differ, then a judgement call will need to be made as to which one should be removed.
There are two types entries that will need to be removed from the Plan.xml
Variable definition
Variable assignment
Searching for the Parameter
The easiest way to find what we are looking for is to perform a case sensitive search of the Plan.xml file for the variable assignment using the following:
[jndi-name="<jndi name>"]/connection-properties/properties/property/[name="<parameter>"]
e.g.
[jndi-name="eis/sftp/JDEXeAppSvr"]/connection-properties/properties/property/[name="PrivateKeyFile"]
This should return two results, one for the assignment of the parameter name, and one for the assignment of the parameter value. Take note of the two <name> elements of the variable assignments, as this is what we are going to search for to locate their respective variable definition and values.
Next we search for the variable definition using one of the <name> attributes. In our example variable name is ConfigProperty_PrivateKeyFile_Name_14733557988300
We can see in the screenshot above the variable definition and value for the parameter (they may not always be sequential in the file). In this case the variable has valid value.
Repeat thecase sensitivesearch and locate the variable assignment for the other parameter, then locate the variable definition and determine which parameter should be deleted..
e.g. search for:
[jndi-name="eis/sftp/JDEXeAppSvr"]/connection-properties/properties/property/[name="privateKeyFile"]
Deleting the Parameter
To delete the parameter we must delete the variable assignment as well as the variable definition. In this example we are going to delete the PrivateKeyFile parameter that we initially searched for.
Re-Run Introspection
Having fixed the Plan.xml re-run the introspection. If it still fails, keep searching for more duplicates, they could be in other JCA adapter configurations.
Last updated