如何在Jython/Websphere中转义破折号?
我有一个Jython脚本,用来在Websphere 7.0服务器上设置JDBC数据源。我需要为这个数据源设置几个属性。我用的代码是可以正常工作的,前提是value
不是'-'
。
def setCustomProperty(datasource, name, value):
parms = ['-propertyName', name, '-propertyValue', value]
AdminTask.setResourceProperty(datasource, parms)
我想把数据源的dateSeparator
属性设置为一个短横线(-)。但是当我运行这个脚本,使用setCustomProperty(ds, 'dateSeparator', '-')
时,出现了一个异常,提示“无效的属性:”。我发现它认为短横线表示还需要另一个参数。
有没有办法让AdminTask接受短横线呢?
注意:我不能通过AdminConfig来设置,因为我找不到正确属性的ID(我有多个数据源)。
4 个回答
0
@Schemetrical 的解决方案对我有用。我只是想给出一个使用 jvm 参数的例子。因为我的声望不够,所以不对实际答案做评论。
server_name = 'server1'
AdminTask.setGenericJVMArguments('[ -serverName %s -genericJvmArguments "-agentlib:getClasses" ]' % (server_name))
0
请查看管理 控制台的偏好设置。你现在想做的事情是可以实现的,你应该能看到管理控制台为自己生成的Jython代码。然后只需复制它即可。
1
这里有一个解决方案,它使用了 AdminConfig
,这样你就可以把属性值设置为短横线 -
。这个解决方案考虑了多个数据源,通过指定合适的范围来找到正确的数据源(比如服务器,但如果你的数据源在其他范围内,这个范围是可以修改的),然后通过名称找到数据源。这个解决方案还考虑了如果已经存在“dateSeparator”这个属性,就修改它;如果不存在,就创建一个。
代码看起来可能不是特别优雅,但我觉得它应该能解决你的问题:
def setDataSourceProperty(cell, node, server, ds, propName, propVal) :
scopes = AdminConfig.getid("/Cell:%s/Node:%s/Server:%s/" % (cell, node, server)).splitlines()
datasources = AdminConfig.list("DataSource", scopes[0]).splitlines()
for datasource in datasources :
if AdminConfig.showAttribute(datasource, "name") == ds :
propertySet = AdminConfig.list("J2EEResourcePropertySet", datasource).splitlines()
customProp = [["name", propName], ["value", propVal]]
for property in AdminConfig.list("J2EEResourceProperty", propertySet[0]).splitlines() :
if AdminConfig.showAttribute(property, "name") == propName :
AdminConfig.modify(property, customProp)
return
AdminConfig.create("J2EEResourceProperty", propertySet[0], customProp)
if (__name__ == "__main__"):
setDataSourceProperty("myCell01", "myNode01", "myServer", "myDataSource", "dateSeparator", "-")
AdminConfig.save()