Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用WLST更改数据源密码(多个域)_Python_Weblogic11g_Wlst - Fatal编程技术网

Python 使用WLST更改数据源密码(多个域)

Python 使用WLST更改数据源密码(多个域),python,weblogic11g,wlst,Python,Weblogic11g,Wlst,我对WLST脚本非常陌生&目前处于初级阶段。我有一个脚本,它提示为它读取的每个数据源输入密码。虽然这部分工作正常,但我面临的挑战是,在我们希望运行此脚本的生产环境中,将有多个托管服务器具有相同的数据源,具有不同的名称,但与连接到同一数据库的两个数据源具有相同的JNDI 在这种情况下,脚本当前的工作方式是,它将为找到的每个数据源提示输入密码,但我想修改脚本,以便它检查数据源的JNDIName&如果已经为具有相同JNDI的任何数据源提示输入密码,那么它应该使用相同的密码,而不是再次提示输入密码 还有

我对WLST脚本非常陌生&目前处于初级阶段。我有一个脚本,它提示为它读取的每个数据源输入密码。虽然这部分工作正常,但我面临的挑战是,在我们希望运行此脚本的生产环境中,将有多个托管服务器具有相同的数据源,具有不同的名称,但与连接到同一数据库的两个数据源具有相同的JNDI

在这种情况下,脚本当前的工作方式是,它将为找到的每个数据源提示输入密码,但我想修改脚本,以便它检查数据源的JNDIName&如果已经为具有相同JNDI的任何数据源提示输入密码,那么它应该使用相同的密码,而不是再次提示输入密码

还有多个数据源,如何处理这些数据源?可能吗?此外,我不知道如何为每个数据源获取JNDIName。我试图获得JNDIName,如下所示,但不起作用- jndiName=dataSource.getJNDIName

这是我在命令行上遇到的错误-

Problem invoking WLST - Traceback (innermost last):
  File "C:\Script\PostDeploy-DataSourcePasswords.py", line 59, in ?
  File "C:\Script\PostDeploy-DataSourcePasswords.py", line 43, in updateJDBCPasswords
AttributeError: getJNDIName
这是我正在使用的脚本-

import sys

#import wlstutility
#wlstutility.initialise(globals())
#from wlstutility import *
#from wlstutility.constructors import *

if len(sys.argv)<1:
    print 'Usage: wlst.sh wibble.py <host:port>' 
    print '   for example: wlst.sh wibble.py prfadmin:14801' 
exit()

hostPort = sys.argv[1]    
print ('host:port = %s' % hostPort )

connectionUrl = ('t3://%s' % hostPort)

WL_USER='weblogic'
commitChanges=True

WL_PWD=raw_input("Enter Weblogic console password: ")

connect(WL_USER, WL_PWD, connectionUrl)

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()
        print ('DataSource Name : = %s' % dsName)
        password=raw_input("Enter database password for " + dsName +" : ")
        cd(PARAMS_TEMPLATE % (dsName, dsName, dsName) )
        cmo.setPassword(password)

## ===========================================================
# Let's get going

edit()
startEdit()

updateJDBCPasswords()

# dump the changes made so far
print "=== START: The changes that will be applied ==="
showChanges()

if commitChanges :
    # =========================================================
    # commit the changes
    save()
    activate(block="true")
else:
    # =========================================================
    # rollback the changes
    print "=== ROLLBACK - cancelling the changes so that they don't get applied ==="
    cancelEdit('y')

# =========================================================
# all done - bye!
disconnect()
exit()
任何帮助都将不胜感激

谢谢和问候


Amrut Raut.

您可以使用简单的WLST脚本在测试/预调试环境中尝试获取JNDI名称。您可以从下面的ds获取JNDI名称:

cd('/JDBCSystemResource/' + dsName + '/JdbcResource/' + dsName + '/JDBCDataSourceParams/NO_NAME_0')
jarray_jndi_names=get('JNDINames')
jndi_names=[]
for jname in jarray_jndi_names:
  jndi_names.append(jname)
使用您的输入或任何您觉得对您的环境更好的内容更改dsName值。 一旦获得JNDI名称,您需要使用plainif条件来检查它是否已经存在,然后您可以使用您的逻辑

请注意,所有多数据源仅配置了通用数据源。
尝试以上提示后,请分享您的经验。

Amrut,您是否尝试过以互动方式进行锻炼?