2014-09-26 2 views
0

В настоящее время я работаю над скриптом jython, который может выполнять внешний скрипт jython. Выполненный (внешний) скрипт jython должен выполняться в том же сеансе weblogic, где выполняется мой скрипт, чтобы иметь возможность отменить сеанс (в случае ошибки) или активировать его. В моем скрипте создается веб-логическое соединение, и вызываемый скрипт должен использовать созданный (с сеансом «startEdit()»).Команды WLST в дочернем скрипте

Я нашел гибридное решение, но, возможно, это можно сделать лучше.

Выполненный сценарий в рабочем растворе:

import wlst_operations as wl 
print 'Start' 
wl.cd('/') 
print wl.cmo 
wl.cd('/Servers/AdminServer') 
print wl.cmo 
wl.cd('/JDBCSystemResources/pasDataSource/JDBCResource/pasDataSource/JDBCConnectionPoolPara ms/pasDataSource') 
print wl.cmo 
wl.cmo.setInitialCapacity(6) 

wlst_operations Jython был взят из http://www.javamonamour.org/2013/08/wlst-nameerror-cd.html. Как вы можете видеть объект как ссылки («» з.д.) должны быть поставлены перед каждой командой WLST ... Выход нормально:

[MBeanServerInvocationHandler]com.bea:Name=gintdev1,Type=Domain 
[MBeanServerInvocationHandler]com.bea:Name=AdminServer,Type=Server 
[MBeanServerInvocationHandler]com.bea:Name=pasDataSource,Type=weblogic.j2ee.descriptor.wl.JDBCConnectionPoolParamsBean,Parent=[gintdev1]/JDBCSystemResources[pasDataSource],Path=JDBCResource[pasDataSource]/JDBCConnectionPoolParams 

Когда я не использую ссылку на объект:

from wlstModule import * 
print 'user defined' 
cd('/') 
print cmo 
cd('/Servers/AdminServer') 
print cmo 
cd('/JDBCSystemResources/pasDataSource/JDBCResource/pasDataSource/JDBCConnectionPoolParams/pasDataSource') 
print cmo 
cmo.setInitialCapacity(6) 

Тогда выход:

[MBeanServerInvocationHandler]com.bea:Name=gintdev1,Type=Domain 
[MBeanServerInvocationHandler]com.bea:Name=gintdev1,Type=Domain 
[MBeanServerInvocationHandler]com.bea:Name=gintdev1,Type=Domain 
Problem invoking WLST - Traceback (innermost last): 
    File "/tmp/lv30083/./orchestrator.py", line 83, in ? 
    File "/tmp/lv30083/./orchestrator.py", line 66, in main 
    File "/tmp/lv30083/./utils/orch_wl.py", line 55, in execute 
    File "user_defined_script_incorrect.py", line 11, in ? 
AttributeError: setInitialCapacity 

т.е. команды выполняются кд (не получаю ошибки), но это просто не скачет к источнику данных ...

Мой сценарий

import orch_logging 
import sys 
from wlstModule import * 
class WeblogicManager(object): 
    def connect_to_server(self, p_ssl, p_domainName, p_userConfigFile, p_userKeyFile): 
     logger = orch_logging.Logger() 
     logger.info('Trying to connect to the node manager. domainName='+p_domainName+',userConfigFile='+p_userConfigFile+',ssl='+p_ssl+',p_userKeyFile='+p_userKeyFile) 
     try: 
      connect(domainName=p_domainName,userConfigFile=p_userConfigFile,userKeyFile=p_userKeyFile) 
      return True 
     except: 
      logger.error("Error while trying to connect to node manager!") 
      return False 
    def startEdit(self): 
     edit() 
     startEdit() 
    def activate(self): 
     activate() 
    def undo(self): 
     cancelEdit('y') 
    def disconnect(self): 
     disconnect() 
    def execute(self, path): 
     execfile(path) 

Есть ли способ, чтобы использовать команды WLST без использования «WL». ссылку перед ними?

Спасибо, В.

ответ

0

мне пришлось изменить свой сценарий. Все операции теперь в одном контексте (в контексте моего сценария)

import sys 
from wlstModule import * 
from weblogic.management.scripting.utils import WLSTUtil 
import sys 

# needed to execute normal (without object reference) WLST commands in child scripts 
origPrompt = sys.ps1 
theInterpreter = WLSTUtil.ensureInterpreter(); 
WLSTUtil.ensureWLCtx(theInterpreter) 
execfile(WLSTUtil.getWLSTScriptPath()) 
execfile(WLSTUtil.getOfflineWLSTScriptPath()) 
exec(WLSTUtil.getOfflineWLSTScriptForModule()) 
execfile(WLSTUtil.getWLSTCommonModulePath()) 
theInterpreter = None 
sys.ps1 = origPrompt 
modules = WLSTUtil.getWLSTModules() 
for mods in modules: 
    execfile(mods.getAbsolutePath()) 
wlstPrompt = "false" 

class WeblogicManager(object): 
    ... 
    def execute(self, path): 
     execfile(path) 
Смежные вопросы