我使用wasdmin shell和jython lang来设置WAS9中的属性。实际上我已经创建了一个自动化流程,其中包含多个shell和jython脚本,这有助于我的应用程序设置。在使用AdminConfig.create()时,它会抛出以下几个属性的异常:
[1/17/19 17:06:20:032 CET] 00000001 AbstractShell E WASX7120E:来自异常的诊断信息,带有文本“com.ibm.ws.scripting.ScriptingException:WASX7129E:无法在父项中创建”Property“类型的对象键入“DescriptiveProperty”“如下:
com.ibm.ws.scripting.ScriptingException:WASX7129E:无法在“DescriptiveProperty”类型的父项中创建“Property”类型的对象
我的代码首先检查属性是否已经存在,如果存在,我将其删除并创建它,这是我在查看IBM的jython文件以获取JVM属性后收到的。这是我的代码的当前流程。之前我曾经检查过属性是否已经存在,如果它存在,我以前修改它,否则创建它。我从修改块中得到了其他错误,这就是我使用delete然后立即创建逻辑的原因。
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 ],
]
)
我愿意知道是否有可能判断哪个属性是描述性的,所以我可以使用if else块来转移。
发生的错误是正确的,必须通过检查父级属性的类型来处理。如果它不是属性,那么我使用AdminConfig.modify(),如果它是type属性,那么AdminConfig.remove()和AdminConfig.create()。
if('#DescriptiveProperty_' in parent) or ('#StreamRedirect_' in parent):
AdminConfig.modify(parent,[[ key, value ]]
这解决了问题,并且没有更多错误,如:com.ibm.ws.scripting.ScriptingException:WASX7129E:无法在类型为“DescriptiveProperty”的父项中创建“Property”类型的对象