Mostrando postagens com marcador WLST. Mostrar todas as postagens
Mostrando postagens com marcador WLST. Mostrar todas as postagens

27 de jan. de 2010

Weblogic WLST - Erro ao inicializar servidores via nodemanager.

Um erro recorrente e chato que acontece comumente quando utilizamos um script para controlar o ciclo de vida(para, pausar, reiniciar) dos servidores gerenciados no domínio do weblogic utilizando conexão via nodemanager é um erro de acesso com a mensagem similar a esta:

Connecting to Node Manager ... This Exception occurred at Wed Jan 27 11:31:34 BRST 2010. weblogic.nodemanager.NMException: Access to domain 'testescripts' for user 'weblogic' denied at weblogic.nodemanager.client.NMServerClient.checkResponse(NMServerClient.java:298) at weblogic.nodemanager.client.NMServerClient.checkResponse(NMServerClient.java:311) at weblogic.nodemanager.client.NMServerClient.connect(NMServerClient.java:253) at weblogic.nodemanager.client.NMServerClient.checkConnected(NMServerClient.java:196) at weblogic.nodemanager.client.NMServerClient.checkConnected(NMServerClient.java:202) ...... WLSTException: Error occured while performing nmConnect : Cannot connect to Node Manager.Access to domain 'testescripts' for user 'weblogic' denied Use dumpStack() to view the full stacktrace

Este problema ocorre porque a senha definida pelo nodemanager no domínio está diferente da senha de administração do domínio. A solução para o problema é alterar a senha do nodemanager no Console de Administração do Weblogic e colocá-la igual a senha utilizada para gerenciar o domínio.

Para fazer isso no console de administração do weblogic altere a senha do nodemanger navegando em:

Na árvore de navegação (Domain Structure) clique no nome do domínio > Security > Advanced

Procure por "NodeManager Username", "NodeManager Password" e "Confirm NodeManager Password" e altere a senha para ser igual à senha de administração do domínio. Salve e ative as configurações. Reinicie o nodemanager.

Pronto o script deve funcionar corretamente. Se o problema persistir, verifique no nodemanager.domains se o domínio onde está o servidor que deve ser controlado está registrado corretamente.

[]s

24 de jun. de 2009

Weblogic WLST - Inicializando servidores via Node Manager

O weblogic server possibilita a administração de um domínio mesmo quando o servidor de administração estiver fora do ar através do Node Manager que já deve ter sido devidamente configurado para gerenciar o domínio que será administrado.

O Node Manager é um serviço do weblogic server que possibilita a adminsitração de vários servidores configurados em vários hardwares diferentes através de um único console de administração ou de scripts WLST.

Neste post vou mostrar um script que pode ser utilizado para conectar no nodemanager de uma máquina e enviar comandos para inicializar servidores previamente configurados em um determinado domínio administrado por este nodemanager. O script assim como o arquivo de propriedades está comentado e seu código segue abaixo com comentários em seguida:

from java.util  import Properties
from java.io  import FileInputStream
from java.io  import File

#import thread
from string import split

#============DEFINICAO DE FUNCOES============
#funcao que carrega dados de arquivo de propriedades
def carregaArquivoPropriedades(nomeArquivo) :
    print 'carregando propriedades do arquivo: ' + nomeArquivo
    #arquivo de propriedades a ser carregado 
    myProps = Properties()
    #carrega arquivo de propriedades
    myProps.load(FileInputStream(File(nomeArquivo)))
    return myProps

#função que recupera servidores especificados no arquivo de propriedades.
def listaServidores(arquivoPropriedades):
    print 'selecionando servidores da lista de propriedades'
    servidores = []
    propriedades = arquivoPropriedades.propertyNames()
    while propriedades.hasMoreElements():
        #carrega os nomes de todas as chaves carregadas do arquivo de propriedades
        chave = propriedades.nextElement()
        #recupera tipo da chave para verificar se é um servidor se for adiciona no array de servidores.
        elemento = split(chave, '_')
        #checa se elemento carregado do arquivo de properties é um servidor e adiciona na lista de servidores
        if elemento[0] == 'SERVIDOR':
            servidores.append(chave)
    #while que imprime lista de servidores recuperada
    print '=======================AVISO================================================================'
    print'LISTA DOS SERVIDORES A SEREM INICIALIZADOS'
    for servidor in servidores:
        print 'Servidor ==>> ' + arquivoPropriedades.get(servidor)
    print '=======================AVISO================================================================'
    return servidores
            
    
def inicializaInstancias():
    usuario = arquivoPropriedades.get('USUARIO_ADM')
    senha = arquivoPropriedades.get('USUARIO_ADM_SENHA')
    ipNodeManager = arquivoPropriedades.get('NODEMANAGER_IP')
    portaNodeManager = arquivoPropriedades.get('NODEMANAGER_PORT')
    nomeDominio = arquivoPropriedades.get('DOMINIO_NOME')
    diretorioDominio = arquivoPropriedades.get('DOMINIO_DIRETORIO')
    print '\n================================================================================================'
    print 'tentando conexao com o nodemanager...'
    print 'usuario: ' + usuario
    print 'ip Node Manager: ' + ipNodeManager
    print 'porta Node Manager: ' + portaNodeManager
    print 'Nome do dominio: ' + nomeDominio
    print 'Diretorio do dominio no servidor: ' + diretorioDominio
    print '================================================================================================'
    nmConnect(usuario,senha, ipNodeManager, portaNodeManager, nomeDominio, diretorioDominio, 'plain', 'true')
    for servidor in servidores:
        print 'solicitando inicializacao do servidor ' + arquivoPropriedades.get(servidor)
        nmStart(arquivoPropriedades.get(servidor), diretorioDominio)
        
#==========execucao (Main)========

arquivoPropriedades = carregaArquivoPropriedades('servidores.properties')

servidores = listaServidores(arquivoPropriedades)

inicializaInstancias()


O script carrega a lista de servidores de um arquivo de propriedades e inicializa cada um dos servidores declarados no arquivo. Abaixo um arquivo de propriedades de exmplo que pode ser utilizado com este script.

#colocar o IP e porta do nodemanger onde os servidores estão configurados. Caso houver
#necessidade de inicializar ou parar serviores em mais de um hardware o script deverá ser
#executado 1 vez para cada configuração de nodemanager e após feitos os devidos ajustes de ip e
#porta onde o nodemanager se encontra em execução.
NODEMANAGER_IP=localhost
NODEMANAGER_PORT=5559

#colocar o nome do diretório do domínio que será gerenciado pelo script.
DOMINIO_NOME=testescripts
#colocar o caminho completo do domínio que será gerenciado pelo script.
DOMINIO_DIRETORIO=/home/mmaia/weblogic10/domains/testescripts

#usuário e senha de administração deste domínio. Devem ser iguais aos do nodemanager configurados 
#para gerenciamento deste domínio e armazenados no arquivo nm_password.properties do domínio.
USUARIO_ADM=weblogic
USUARIO_ADM_SENHA=weblogic


#lista de nomes das instancias a serem inicializadas ou paradas, deve seguir o padrao SERVIDOR_X=
#pode-se registrar quantas instânciasforem necessárias. As instâncias listadas devem estar
#configuradas no ambiente onde o nodemanager configurado está.
SERVIDOR_1=teste-1
SERVIDOR_2=teste-2
SERVIDOR_ADMIN=AdminServer


[]s

18 de mai. de 2009

Monitorando status e "Health" de uma Aplicação no Weblogic

Motivado por um post no javaranch fiz este script simples que checa status e saúde de uma aplicação em um servidor weblogic.

O script é bem simples e por isso estou omitindo maiores explicações. Segue o script.

#variable definitions================
username='weblogic'
password='weblogic'
urladmin='t3://localhost:7001'
appName='applicationName'
serverName='serverName'
#end variable definitions============



#connects to admin server
connect(username, password, urladmin)

cd('domainRuntime:/AppRuntimeStateRuntime/AppRuntimeStateRuntime')
#get intended state for application
intendedState = cmo.getIntendedState(appName)

print 'Intended state for app ' + intendedState

#get current real state for app in specific server
currentState = cmo.getCurrentState(appName, serverName)

print 'Current state in server '+ serverName + ' ==>> ' + currentState

cd('domainRuntime:/ServerRuntimes/'+ serverName +'/ApplicationRuntimes/'+appName)

#shows app attributes including current health.
print 'Current information for app ' + appName + ' in server ' + serverName + ' ==>> ' + ls('a')


[]s

29 de mar. de 2009

Monitoração de domínio e gravação de thread dump automático com WLST

Outro dia me deparei com um questionamento no fórum de discussão sobre como conseguir retirar os thread dumps do Servidor de aplicações, Oracle Weblogic, em momento oportuno, ou seja, quando o ambiente estiver passando por um momento de contingência. A discussão do problema pode ser vista detalhadamente no fórum do javaranch no link: http://www.coderanch.com/t/427054/BEA-Weblogic/Issue-with-WeblogicServer

Devido a este problema decidi escrever um artigo mostrando como podemos utilizar a linguagem de scripts do Weblogic Server, Weblogic Scripting Tool(WLST), para fazer monitoramento de servidores. Um ponto importante nestes script é que ele permite inclusive que este monitoramente seja feito de forma independente do Admin Server, pois neste caso, o script mostra conexão direta com servidores gerenciados de um domínio. Para escrevê-lo estou utilizando WLST que por sua vez utiliza linguagem Jython e é padrão para configuração do Oracle Weblogic.

O script:

O script demonstrado aqui é bem simples e o que ele faz basicamente é:

1) Carregar informações de um arquivo de propriedades.

2) Tenta conectar com cada um dos servidores da lista de servidores configurada no arquivo de propriedades.

3) Verifica status do servidor e caso o servidor estiver com um número maior que o definido de threads com delay na resposta gera um thread dump do servidor para posterior análise.

Abaixo segue o código do script comentado e logo em seguida um exemplo de arquivo de propriedades que pode ser utilizado como template.

from java.util  import Properties
from java.io  import FileInputStream
from java.io  import File

#============DEFINICAO DE FUNCOES============
#funcao que carrega dados de arquivo de propriedades
def carregaArquivoPropriedades(nomeArquivo) :
    print 'carregando propriedades do arquivo: ' + nomeArquivo
    #arquivo de propriedades a ser carregado
    localizacaoArquivoPropriedadesConfiguracao = nomeArquivo    
    myProps = Properties()
    #carrega arquivo de propriedades
    myProps.load(FileInputStream(File(localizacaoArquivoPropriedadesConfiguracao)))
    return myProps

#funcao que retorna lista de todos os servidores configurados para este domínio.
def getServidoresDominio():
    print 'executando funcao getServidoresDominio']
    domainConfig()
    servidores = cmo.getServers()
    return servidores

#funcao que pega lista de servidores como parametro e verifica o status de cada um deles.
def mostraStatusServidores(servidores): 
    print '=======================STATUS dos servidores do domínio==============='
    domainRuntime()
    for servidor in servidores:
        try:
            cd('/ServerRuntimes/' + servidor.getName())
            #ls()
            print servidor.getName() + ': ' + get('State')
        except WLSTException,e:
            servidoresNaoAcessiveis.append(servidor)
    servidoresAlerta = []
    #testa novamente servidores que não estava acessíveis para ter certeza
    for servidor in servidoresNaoAcessiveis : 
        try:
            cd('/ServerRuntimes/' + servidor.getName())
            #ls()
            print servidor.getName() + ': ' + get('State')
        except WLSTException,e:
            servidoresAlerta.append(servidor)
    if len(servidoresAlerta) > 0 :
        print 'ALERTA == ALERTA == ALERTA == ALERTA == ALERTA == ALERTA =='
        print 'Os seguintes servidores estão inacessíveis para monitoração, favor checar!'
        for servidor in servidoresAlerta :
            print servidor.getName()
            
#faz checagem de memória nos servidores do domínio especificado.
def listaConfiguracoesMemoriaServidoresDomino():
    servidoresComBaixoHeapMemoria = []
    for servidor in servidores:
        try:
            cd("domainRuntime:/ServerRuntimes/" + servidor.getName() + "/JVMRuntime/" +servidor.getName())
            heapSizeMax = cmo.getHeapSizeMax()/1048576
            heapMemoriaLivre = cmo.getHeapFreeCurrent()/1048576
            heapMemoriaLivrePercentagem = cmo.getHeapFreePercent()
            #adiciona na lista de servidores com pouca memoria se servidor tiver menos de 2% de memória livre
            if heapMemoriaLivrePercentagem < 2 :
                servidoresComBaixoHeapMemoria.append(servidor)
            #memoriaMB = memoria/1048576 #transforma os bytes em MB para mostrar
            print '\n================================================================='
            print "O servidor " + servidor.getName() + " esta com :"
            print 'Memoria total alocada(MB): ' + str(heapSizeMax)
            print 'Memoria total disponivel(MB): ' + str(heapMemoriaLivre)
            print 'Memoria livre(%): ' + str(heapMemoriaLivrePercentagem)
        except WLSTException,e:
            print 'AVISO: O servidor ' + servidor.getName() + ' nao esta acessivel atraves do admin server'
    #faz novo teste de heap de memória e caso continuem com pouca memória disponível, mostra ALERTA para observação do servidor.
    for servidor in servidoresComBaixoHeapMemoria :
        try:
            cd("domainRuntime:/ServerRuntimes/" + servidor.getName() + "/JVMRuntime/" +servidor.getName())
        except WLSTException,e:
            print 'AVISO: O servidor ' + servidor.getName() + ' nao esta acessivel atraves do admin server'
            heapMemoriaLivrePercentagem = cmo.getHeapFreePercent()
            #adiciona na lista de servidores com pouca memoria se servidor tiver menos de 2% de memória livre
            if heapMemoriaLivrePercentagem < 2 :
                print 'ALERTA == ALERTA == ALERTA == ALERTA == ALE RTA == ALERTA =='
                print 'O servidor ' + servidor.getName() + ' está com heap de memória < que 2% e deve ser observado!'
#faz checagem de threads dos servidores do domínio
def checaThreadsServidoresDominio() :
    servidoresComThreadsProblematicas = []
    for servidor in servidores :
        try:
            cd("domainRuntime:/ServerRuntimes/" + servidor.getName() + "/ServerChannelRuntimes/DefaultSecure[https]")
            numeroConexoes = cmo.getConnectionsCount()
            print '==============================================='
            print 'Dados do servidor ' + servidor.getName() + ': '
            print 'Conexoes https: ' + str(numeroConexoes)
            cd('domainRuntime:/ServerRuntimes/' + servidor.getName() + '/ExecuteQueueRuntimes/weblogic.socket.Muxer')
            fila = cmo.getPendingRequestCurrentCount()
            print 'Requisicoes de usuarios pendentes: ' + str(fila)
            cd('domainRuntime:/ServerRuntimes/' + servidor.getName() + '/ThreadPoolRuntime/ThreadPoolRuntime')
            hoggingThread = cmo.getHoggingThreadCount()
            print 'Quantidade de threads com status hogging: ' + str(hoggingThread)
            print '===============================================\n'
        except WLSTException,e:
           print 'Erro servidor não acessivel para ServerRuntimes ==>> ' + servidor.getName()

#faz health check nos pools de conexao do ambiente.
def checaPoolsConexoes() :
    domainConfig()
    #recupera lista de pools de conexões configuradas no domínio.
    connectionPools = cmo.getJDBCSystemResources()
    for pool in connectionPools : 
        print pool.getName()
        cd('domainConfig:/JDBCSystemResources/' +pool.getName()+ '/JDBCResource/' +pool.getName()+ '/JDBCConnectionPoolParams/' + pool.getName())
        print '==============================================='
        print 'Dados do pool: ' + pool.getName()
        capacidadeInicialPool = cmo.getInitialCapacity()
        capacidadeMaximaPool = cmo.getMaxCapacity()
        print 'Capacidade maxima do pool: ' + str(capacidadeMaximaPool)
        cd('domainConfig:/JDBCSystemResources/' + pool.getName())
        targetServers = cmo.getTargets()
        print 'targets do pool'
        for targetServer in targetServers :
            print targetServer.getName()
#=================FIM DEFINICAO DE FUNCOES======================
propriedades = carregaArquivoPropriedades('config.properties')
username = propriedades.get('username')
password = propriedades.get('password')
url = propriedades.get('url')
connect(username, password, url)
#lista para armazenar servidores não acessíveis através do admin server.
servidoresNaoAcessiveis = []
servidores = getServidoresDominio()
mostraStatusServidores(servidores)
listaConfiguracoesMemoriaServidoresDomino()
checaThreadsServidoresDominio()
checaPoolsConexoes()
disconnect()
exit()


E o arquivo de propriedades de exemplo:
#este arquivo de propriedades é utilizado para configurar os   
#servidores em um ambiente. Todas as chaves devem ter o formato  
#do nome utilizando sempre _ (underscore) pois é o que define a   
#busca dos nomes dos elementos e separa durante a configuarção   
#no script criaInstancias.py  
USUARIO_ADMIN=user  
SENHA_ADMIN=pwd  
   
PORTA_HTTPS_SERVIDORES=443  
   
#parametro que configura com que quantidade de threads com delay o thread dump deve ser tirado para o servidor.  
PARAMETRO_THREAD_DUMP=10  
   
#Dados dos servidores a serem monitorados pelo script  
SERVIDOR_1=server1  
IP_SERVIDOR_1=xxxxxx  
  
SERVIDOR_2=server2  
IP_SERVIDOR_2=xxxxxxx  
   
SERVIDOR_3=server3  
IP_SERVIDOR_3=xxxxxx  
   
SERVIDOR_4=server4  
IP_SERVIDOR_4=xxxxxx  
   
# .... you may add as many servers as you want here...  


Para este script ficar realmente funcional eu programaria para que ele ficasse conectado com os servidores por um período definido em ciclos e que verificasse o status de cada um de tempos em tempos(3 em 3min por exemplo). E caso o servidor apresentasse algum problema considerável dispararia uma rotina que seria responsável por tirar thread dumps com intervalo de cerca de 20s entre um e outro por um período de 2 min. Os thread dumps retirados seriam de extrema utilidade para definir qual o real problema com o ambiente.

[]s

12 de ago. de 2008

Como definir uma função com WLST?

Para definir uma função com WLST basta utilizar a instrução def que tem o formato:
def nomeFuncao(Parametros)
como no exemplo a seguir:
def carregaPropriedades(nomeArquivo):
  #carrega arquivo de propriedades
  myProps.load(FileInputStream(File(nomeArquivo)))
A função chamada carregaPropriedades é definida recebendo como parâmetro o nome do arquivo a ser carregado. Depois para chamar a função:
#chama a função definida acima
carregaPropriedades('exemplo.properties')

no exemplo acima um arquivo de propriedades chamado exemplo.properties é carregado e deve existir no mesmo diretório do script.

Segue exemplo completo, lembre-se de criar no mesmo diretório do arquivo .py um arquivo chamado exemplo.properties com chave valor no padrão .properties de java.
from java.util  import Properties
from java.io  import FileInputStream
from java.io  import File
from java.util  import Enumeration

myProps = Properties()

def carregaPropriedades(nomeArquivo):
  #carrega arquivo de propriedades
  myProps.load(FileInputStream(File(nomeArquivo)))

#chama a função definida acima
carregaPropriedades('exemplo.properties')

propertyNames = myProps.propertyNames()
while propertyNames.hasMoreElements():
  #imprime on nomes de todas as chaves carregadas do arquivo de propriedades
  chave = propertyNames.nextElement()
  print str(chave)
  print '' + myProps.getProperty(chave)


É isso, em outro artigo mostrarei como fazer herança utilizando WLST e portanto como pode-se definir funções reutilizáveis em seus scripts WLST.
[]s

5 de ago. de 2008

Configuração de log dos servidores com WLST

Para fazer a configuração de log padrão e http de um servidor utilizando WLST utilizo os seguintes comandos:

username='weblogic'
password='weblogic'
adminurl='t3://localhost:7001'

SERVIDOR='managedServer1'

DIRETORIO_LOG='/var/logs'

NOME_ARQUIVO_LOG='server.log'

# Conecta com Admin server do domínio
connect(username, password, adminurl)

edit()
startEdit()

print 'INICIANDO CONFIGURACAO DE LOG DO SERVIDOR ...'
cd('Servers/' + SERVIDOR + '/Log/' + SERVIDOR)
cmo.setFileName(DIRETORIO_LOG+ '/' + SERVIDOR + '/' + NOME_ARQUIVO_LOG)
cmo.setRotationType('byTime')
cmo.setFileTimeSpan(6)
cd('/')
#====CONFIGURANDO LOG HTTP====
cd('Servers/' + SERVIDOR + '/WebServer/' + SERVIDOR + '/WebServerLog/' + SERVIDOR)
cmo.setFileName(DIRETORIO_LOG + '/' + SERVIDOR + '/access.log')
cmo.setRotationType('byTime')
cmo.setFileTimeSpan(6)
print 'LOG DO SERVIDOR CONFIGURADO\n\n'
cd('/')
activate()


Neste caso será feita uma conexão com o Admin server rodando em localhost na porta 7001, depois no primeiro bloco navega para o MBean de log da instância passada na variável SERVIDOR e finalmente seta o arquivo de log para, neste caso, diretório /var/logs/managedServer1/server.log usando o setFileName finalmente configura o arquivo de log para rotacionar por tempo e seta o tempo para 6 horas. Depois inicia configuração do log http para isso navega para local de configuração do WebServer do servidor em questão e configura a saída para /var/logs/managedServer1/access.log, configura para rotacionar por tempo de 6 em 6 horas ativa as configurações e termina o script.

[]s

Como rodar um script WLST

Este post mostra como executar um script WLST do Oracle BEA Weblogic Server 10.

Para executar o script recomendo utilizar a JVM da BEA que vem com o Weblogic server. Para isso neste exemplo como modelo didádito irei passar o caminho completo da JVM utilizada assim como o classpath completo. No seu ambiente vc pode setar o Path e Classpath para simplificar este comando.

O Script WLST tem a extensão python .py portanto o script terá o formato xxxxx.py onde xxxxx pode ser qualquer nome de arquivo válido no sistema operacional.

Para executar o script chamado criaDominioWeblogic.py de um console DOS no windows o comando, pressupondo que vc esteja no mesmo nível do diretório onde se encontra o script mencionado, seria:

C:\bea\jrockit_150_11\bin\java -cp C:\bea\wlserver_10.0\server\lib\weblogic.jar weblogic.WLST criaDominioWeblogic.py

[]s

Criação de domínio com WLST

Script para criação de um domínio default utilizando WLST este script foi escrito para Weblogic 10 MP1.

Neste exemplo foi criado um script wlst com o nome criaDominioBasico.py com a seguinte estrutura:

#Constantes utilizadas para criação do domínio
NOME_DOMINIO='dominioTutorial'
PORTA_HTTP=7001
PORTA_HTTPS=7002


#Utiliza um template padrão do weblogic 10 como base para criação do domínio.
readTemplate("C:/bea/wlserver_10.0/common/templates/domains/wls.jar")

#Configura o Admin Server para o domínio.
cd('Servers/AdminServer')
set('ListenAddress','')
set('ListenPort', PORTA_HTTP)

#Configura porta SSL para domínio
create('AdminServer','SSL')
cd('SSL/AdminServer')
set('Enabled', 'True')
set('ListenPort', PORTA_HTTPS)

#Define a senha para usuário default do weblogic(usuario=weblogic, senha=weblogic).
cd('/')
cd('Security/base_domain/User/weblogic')
cmo.setPassword('weblogic')

#configura o domínio com os valores passados e cria o domínio
setOption('OverwriteDomain', 'true')
writeDomain('c:\\tools\\dominiosWeblogic\\' + NOME_DOMINIO)

print('Dominio chamado: ' + NOME_DOMINIO + ' criado com sucesso')

closeTemplate()
exit()

Este script utiliza WLST offline e cria um domínio do weblogic no diretorio c:\tools\dominiosWeblogic\dominioTutorial, configura a porta http para 7001 e https para 7002, cria usuário de administraçao para o domínio com nome weblogic e senha weblogic.

[]s

30 de jul. de 2008

Como capturar informações de um arquivo de propriedades utilizando WLST

Irei mostrar aqui um script criado para carregar valores de variáveis de um arquivo de propriedades.
O Script irá chamar carregamentoPropriedades.py e o arquivo configuracoes.properties.
O script carregamentoPropriedades.py segue abaixo:

#Script simples que lê um arquivo de propriedades e depois imprime em um loop as chaves e valores carregados.
#algums imports necessários
from java.util  import Properties
from java.io  import FileInputStream
from java.io  import File
from java.util  import Enumeration
#arquivo de propriedades a ser carregado
localizacaoArquivoPropriedades = 'D:\\eclipse_workspace\\scriptsWLST\src\\carregamentoArquivoProperties\\configuracoes.properties'
#instancia objeto Properties
listaPropriedades = Properties()
#carrega efetivamente o arquivo de propriedades
listaPropriedades.load(FileInputStream(File(localizacaoArquivoPropriedades))
#carrega lista Enum com os valores das chaves contidos no arquivo de propriedades.
nomesPropriedades = listaPropriedades.propertyNames()
#loop para imprimir chave=valor
while nomesPropriedades.hasMoreElements():
  #imprime on nomes de todas as chaves carregadas de um arquivo de propriedades
  #perceba que esta rotina não garante que a ordem será a mesma do arquivo carregado.
  chave = nomesPropriedades.nextElement()
  print str(chave) + '=' + listaPropriedades.getProperty(chave)


É isso, bem direto neste caso no arquivo de propriedades com a seguinte estrutura:
adminserverurl=t3://localhost:7001
usuario=weblogic
senha=weblogic


temos uma saída de console:



É isso! Note que nesta imagem estou executando o WLST utilizando o eclipse. Irei mostrar como fazer isso em uma próxima oportunidade!