I am using wasdmin shell and jython lang for setting properties in WAS9. Actually I have created an automated process with several shell and jython scripts which helps my application setup. While using AdminConfig.create(), it throws below exception for few properties:
[1/17/19 17:06:20:032 CET] 00000001 AbstractShell E WASX7120E: Diagnostic information from exception with text "com.ibm.ws.scripting.ScriptingException: WASX7129E: Cannot create objects of type "Property" in parents of type "DescriptiveProperty" " follows:
com.ibm.ws.scripting.ScriptingException: WASX7129E: Cannot create objects of type "Property" in parents of type "DescriptiveProperty"
My code first checks if property is already existing or not, if it exists the I delete it and create it, this idea I received after looking into IBM's jython file for adding JVM properties. This is the current flow of my code. Earlier I used to check if property already exists or not, if it exists the I used to modify it else create it. I was getting other error from modify block that is why I am using delete then create logic now.
currentProps = getListArray(AdminConfig.list(property, parent))
for prop in currentProps:
if property == AdminConfig.showAttribute(prop, "name"):
logging.info('Removing existing property from Server')
AdminConfig.remove(prop)
# create new property
logging.info('Creating new property %s', key)
if type:
AdminConfig.create(
property,
parent,
[
[ 'type', type ],
[ 'name', key ],
[ 'value', value ],
]
)
else:
AdminConfig.create(
property,
parent,
[
[ 'name', key ],
[ 'value', value ],
]
)
I am willing to know if it is possible to judge which property is descriptive, so I can use an if else block to divert.
The error occurred is correct, it has to be handled by checking the type of parent's property. If it is other than property, then I am using AdminConfig.modify() and if it is of type property, then AdminConfig.remove() and AdminConfig.create().
if('#DescriptiveProperty_' in parent) or ('#StreamRedirect_' in parent):
AdminConfig.modify(parent,[[ key, value ]]
This solves the problem and no more errors like: com.ibm.ws.scripting.ScriptingException: WASX7129E: Cannot create objects of type "Property" in parents of type "DescriptiveProperty"