簡體   English   中英

使用WLST(多個域)更改數據源密碼

[英]Changing DataSource Password Using WLST (Multiple Domains)

我對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名稱,就需要使用普通的if條件來檢查它是否已經存在,那么就可以使用邏輯了。

請注意,所有多數據源僅配置有通用數據源。 嘗試以上提示后,分享您的經驗。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM