Inicia uma nova Job Thread em um dos AppServers/Slaves configurados no POOL Job Threads que deve ter sido inicializado pela rotina principal a partir da chamada da função PoolJobs_init.
Sintaxe
_ADVPL_PoolJobs_runProcess( < cPoolMainName >, < cProcess >, < nLimitProcess >, < nWait >, < cCompany >, < cUser > ) => SMALLINT
Parâmetros
Nome | Tipo | Obrigatório? | Descrição |
---|---|---|---|
cPoolMainName |
| Não | Nome principal do POOL de AppServers. Quando não informado, assumirá o nome do POOL com o nome do programa em execução. Este nome de POOL poderá ser utilizado para configurar a lista de AppServers no PROFILE para a chave jobServers. |
cProcess |
| Não | Nome da função (processo) em processamento no POOL Exemplo: Se iniciar um processo no POOL usando a funcao abc0001_process() e esta função está desenvolvida no fonte abc00001.4gl, o programa registrado no POOL será "abc0001" e o processo será "abc0001_process" |
nLimitProcess |
| Não | Quantidade limite de execuções paralelas do processo (função) no POOL de appservers.
|
nWait |
| Não | Indicador para aguardar o término da execução do JOB/processo antes de continuar. TRUE - Aguardar o término do processamento da thread/processo. |
cCompany |
| Não | Código da empresa para processamento. Quando não informado, utiliza a empresa atual conectada no Logix. |
cUser |
| Não | Código do usuário para processamento. Quando não informado, utiliza o usuário atual conectado no Logix. |
Retorno
Tipo | Descrição |
---|---|
SMALLINT | Código de STATUS de execução. 0 - Falha ao iniciar processo |
Exemplo
DATABASE logix GLOBALS DEFINE p_cod_empresa LIKE empresa.cod_empresa END GLOBALS DEFINE m_pooljob_name CHAR(30) DEFINE m_count INTEGER #-----------------------------------# FUNCTION PoolJobs_runProcess_test() #-----------------------------------# DEFINE l_repete SMALLINT IF LOG_initApp("PADRAO") <> 0 THEN RETURN END IF #Nome do POOL de processamentos JOB para a empresa que estiver realizando o processamento. #Neste exemplo foi optado criar o nome do POOL com o código da empresa para permitir controlar um a execução das rotinas por empresa #e não de forma geral pra todas empresas. LET m_pooljob_name = "pool_",p_cod_empresa #Verificar se existe algum processo JOB em andamento para esse nome de POOL Job Threads IF _ADVPL_PoolJobs_getCountProcess(m_pooljob_name) > 0 THEN CALL conout("Processo não iniciado. Este processo já está em andamento para a empresa "||p_cod_empresa) RETURN END IF #Inicializar o POOL Job Threads, onde fará leitura de chaves de profile e identificará lista #de appservers válidos (ativos e com conexão de banco de dados válida) IF NOT _ADVPL_PoolJobs_init(m_pooljob_name) THEN CALL conout("PoolJobs não iniciado. Appservers do POOL não foram detectados ou houve falha de conexão.") RETURN END IF #Ativar o modo JOB (Não apresentar telas de mensagens durante o processamento. Somente considerada para funções de mensagens padrões Logix) CALL LOG_setJobMode(1) LET l_repete = 1 WHILE l_repete LET l_repete = PoolJobs_runProcess_test_process() CALL conout("LOOP - REPETE >> "||l_repete) END WHILE END FUNCTION #-------------------------------------------# FUNCTION PoolJobs_runProcess_test_process() #-------------------------------------------# DEFINE l_repete SMALLINT CALL conout("[POOL] INICIO.....--------------------- iniciando JOBS --------------------") #Iniciando Job Thread para função pool1_main() #A função pool1_main() precisa existir compilada no RPO em um código fonte .4GL CASE _ADVPL_PoolJobs_runProcess(m_pooljob_name,"pool1_main") WHEN 1 LET m_count = m_count + 1 CALL conout("[POOL] Processo pool_01 iniciado..."||m_count) WHEN 2 CALL conout("[POOL] Processo pool_01 está em andamento..."||m_count) WHEN 0 CALL conout("[POOL] Ocorreu falha ao iniciar o processo pool_01..."||m_count) END CASE #Iniciando Job Thread para função pool2_main() CASE _ADVPL_PoolJobs_runProcess(m_pooljob_name,"pool2_main") WHEN 1 LET m_count = m_count + 1 CALL conout("[POOL] Processo pool_02 iniciado..."||m_count) WHEN 2 CALL conout("[POOL] Processo pool_02 está em andamento..."||m_count) WHEN 0 CALL conout("[POOL] Ocorreu falha ao iniciar o processo pool_02..."||m_count) END CASE #Iniciando Job Thread para função pool3_main() CASE _ADVPL_PoolJobs_runProcess(m_pooljob_name,"pool3_main") WHEN 1 LET m_count = m_count + 1 CALL conout("[POOL] Processo pool_03 iniciado..."||m_count) WHEN 2 CALL conout("[POOL] Processo pool_03 está em andamento..."||m_count) WHEN 0 CALL conout("[POOL] Ocorreu falha ao iniciar o processo pool_03..."||m_count) END CASE #Iniciando Job Thread para função pool4_main() CASE _ADVPL_PoolJobs_runProcess(m_pooljob_name,"pool4_main") WHEN 1 LET m_count = m_count + 1 CALL conout("[POOL] Processo pool_04 iniciado..."||m_count) WHEN 2 CALL conout("[POOL] Processo pool_04 está em andamento..."||m_count) WHEN 0 CALL conout("[POOL] Ocorreu falha ao iniciar o processo pool_04..."||m_count) END CASE #Iniciando Job Thread para função pool5_main() CASE _ADVPL_PoolJobs_runProcess(m_pooljob_name,"pool5_main") WHEN 1 LET m_count = m_count + 1 CALL conout("[POOL] Processo pool_05 iniciado..."||m_count) WHEN 2 CALL conout("[POOL] Processo pool_05 está em andamento..."||m_count) WHEN 0 CALL conout("[POOL] Ocorreu falha ao iniciar o processo pool_05..."||m_count) END CASE CALL conout("[POOL] FIM.....--------------------- processos iniciados ("||m_count||") --------------------") ##Após cada bloco de START de processos Job é realizada pausa de 5 segundos ##antes da execução do próximo ciclo de execução de processos Job. SLEEP 5 #Exemplo foi desenvolvido para que após iniciar com sucesso 20 Jobs, o programa principal será finalizado RETURN (m_count < 20) END FUNCTION #-----------------------------# FUNCTION pool1_main() #-----------------------------# DEFINE l_cont SMALLINT CALL conout("[pool_01] inicio.........................") WHILE l_cont < 30 SLEEP 1 LET l_cont = l_cont + 1 CALL conout("[pool_01] processando "||l_cont||".........................") END WHILE CALL conout("[pool_01] fim............................") END FUNCTION #-----------------------------# FUNCTION pool2_main() #-----------------------------# DEFINE l_cont SMALLINT CALL conout("[pool_02] inicio.........................") WHILE l_cont < 180 SLEEP 1 LET l_cont = l_cont + 1 CALL conout("[pool_02] processando "||l_cont||".........................") END WHILE CALL conout("[pool_02] fim............................") END FUNCTION #-----------------------------# FUNCTION pool3_main() #-----------------------------# DEFINE l_cont SMALLINT CALL conout("[pool_03] inicio.........................") WHILE l_cont < 80 SLEEP 1 LET l_cont = l_cont + 1 CALL conout("[pool_03] processando "||l_cont||".........................") END WHILE CALL conout("[pool_03] fim............................") END FUNCTION #-----------------------------# FUNCTION pool4_main() #-----------------------------# DEFINE l_cont SMALLINT CALL conout("[pool_04] inicio.........................") WHILE l_cont < 100 SLEEP 1 LET l_cont = l_cont + 1 CALL conout("[pool_04] processando "||l_cont||".........................") END WHILE CALL conout("[pool_04] fim............................") END FUNCTION #-----------------------------# FUNCTION pool5_main() #-----------------------------# DEFINE l_cont SMALLINT CALL conout("[pool_05] inicio.........................") WHILE l_cont < 120 SLEEP 1 LET l_cont = l_cont + 1 CALL conout("[pool_05] processando "||l_cont||".........................") END WHILE CALL conout("[pool_05] fim............................") END FUNCTION
Informações
Fontes: log1200.prw
Veja também
Observações
Para saber outras informações de como implementar o uso de POOL de Jobs acesse LGX - Exemplo de uso POOL Job Threads.