0

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

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)

到目前为止,我已经看到了我的线程/博客,但这些都与我的问题无关。有创建多数据源的帮助,但找不到任何提示如何识别它以满足我的场景。

4

2 回答 2

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)
于 2014-10-13T21:52:30.820 回答
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)
于 2015-04-15T14:10:54.483 回答