你如何在Jython / Websphere中逃脱破折号?

时间:2011-01-24 18:56:30

标签: python websphere jython websphere-7 wsadmin

我有一个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的方法(我有多个数据源)。

3 个答案:

答案 0 :(得分: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()

答案 1 :(得分:0)

请参阅管理层Console preferences settings。您可以执行您现在正在尝试的操作,并且您应该看到管理控制台正在为自己的用途创建的Jython等效项。然后复制它。

答案 2 :(得分:-1)

尝试使用String而不是数组来使用双引号传递参数以包围以短划线开头的值

示例:

AdminTask.setVariable('-variableName JDK_PARAMS -variableValue "-Xlp -Xscm250M" -variableDescription "-Yes -I -can -now -use -dashes -everywhere :-)" -scope Cell=MyCell')