WLST标识多数据源。

时间:2014-08-19 09:09:24

标签: passwords datasource wlst identify

我有一个需要更新的脚本。目前它需要所有数据源的密码,但现在我们有一些多数据源以及通用数据源。我的要求是,每当数据源是一个多数据源时,它应该跳过它并且不应该提示输入密码。我已经列出了下面的当前脚本。

def updateJDBCPasswords():

PARAMS_TEMPLATE = '/JDBCSystemResources/%s/JDBCResource/%s/JDBCDriverParams/%s'

domainConfig()

# Get JDBC DataSources
cd("JDBCSystemResources")
dataSources = cmo.getJDBCSystemResources()

edit()
# For each DataSource update the password
for dataSource in dataSources :
    dsName = dataSource.getName()
    password=raw_input("Enter database password for "+ dsName +" : ")
    cd(PARAMS_TEMPLATE % (dsName, dsName, dsName) )
    cmo.setPassword(password)

到目前为止,我已经看过我的帖子/博客,但这些都与我的问题无关。有帮助创建multidatasources但无法找到任何提示如何识别它以满足我的场景。

2 个答案:

答案 0 :(得分:0)

不完全直观,但serverConfig树的根目录有一个部署列表,其中包括jdbc数据源等内容,这是我能找到一个允许您识别多数据源的mbean的唯一地方。因此,开头的附加代码会在代码中构建一个要忽略的名称列表。

serverConfig()

deployments=cmo.getDeployments()

multiDataSources = []

for deployment in deployments:
    if (deployment.getType()=="JDBCMultiPool"):
      multiDataSources.append(deployment.getName())

domainConfig()

# Get JDBC DataSources
cd("JDBCSystemResources")
dataSources = cmo.getJDBCSystemResources()

# For each DataSource update the password
for dataSource in dataSources :
    dsName = dataSource.getName()
    if dsName in multiDataSources:
        print("Skipping multidatasource %s" % dsName)
        continue

    print("Processing data source %s" % dsName)

答案 1 :(得分:0)

以下内容可以提供帮助:

         cd(_dsDir + '/JDBCDriverParams/NO_NAME_0/Properties/NO_NAME_0/Property/user')
            _userprop = cmo.getValue()

            # Multi datasource wouldn't have user properties and hence skipping the updation of multi datasources
            if _userprop is None:
                continue
            else:
                # continue updating password 
                cmo.setValue(_userval)
                # Next set the password
                cd(_dsDir + '/JDBCDriverParams/NO_NAME_0')
                set('PasswordEncrypted', _dsPassword)