如何在Jython/Websphere中转义破折号?

0 投票
4 回答
1729 浏览
提问于 2025-04-16 10:32

我有一个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()

撰写回答