【问题标题】:How do you escape a dash in Jython/Websphere?您如何在 Jython/Websphere 中逃脱冲刺?
【发布时间】:2011-01-24 18:56:30
【问题描述】:

我有一个用于在 Websphere 7.0 服务器上设置 JDBC 数据源的 Jython 脚本。我需要在该数据源上设置几个属性。我正在使用这段代码,它有效,除非value'-'

def setCustomProperty(datasource, name, value):
    parms = ['-propertyName', name, '-propertyValue', value]
    AdminTask.setResourceProperty(datasource, parms)

我需要将我的数据源上的dateSeparator 属性设置为 - 破折号。当我用setCustomProperty(ds, 'dateSeparator', '-') 运行这个脚本时,我得到一个异常,上面写着“无效的属性:”。我发现它认为破折号意味着需要另一个参数/参数对。

有没有办法让 AdminTask 接受破折号?

注意:我无法通过 AdminConfig 设置它,因为我找不到获取正确属性 id 的方法(我有多个数据源)。

【问题讨论】:

    标签: python websphere jython websphere-7 wsadmin


    【解决方案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()
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 它使用 AdminConfig 命令来设置它。问题是我不能保证我能够跨多个平台获取该属性。我可以列出它们,但在 Linux 上执行 save() 之前,我看不到已创建的属性。您知道如何访问特定数据源的自定义属性吗?
      • 啊,真令人失望。老实说,我会修改 XML 文件。只需将值设置为某个虚拟值,然后搜索并替换配置文件。非常丑陋,但只需几个命令即可完成工作。
      【解决方案3】:

      @Schemetrical 解决方案对我有用。再举一个 jvm args 的例子。 没有评论实际答案,因为我没有足够的声誉。

      server_name = 'server1'
      AdminTask.setGenericJVMArguments('[ -serverName %s -genericJvmArguments "-agentlib:getClasses" ]' % (server_name))
      

      【讨论】:

        【解决方案4】:

        尝试使用字符串而不是数组来传递参数,使用双引号来包围以破折号开头的值

        例子:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-10-31
          • 2016-02-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-09-21
          相关资源
          最近更新 更多