Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

O uso das funções POOL JOBS é semelhante ao uso do componente LTHREAD, onde a aplicação controla a quantidade máxima de THREADS executadas de forma paralela e em modo JOB (sem interface), no entanto ela tem as seguintes diferenças:


AçõesComponente LThreadFunções POOL JOBS
Executar múltiplas Threads paralelasSIMSIM
Distribuir a execução de threads em múltiplos AppserversNÃOSIM
Executar funções distintas para um mesmo pool de ThreadsNÃOSIM
Executar mais de um grupo de threads para processamentos distintosNÃOSIM
Controlar a quantidade de execuções paralelas de uma mesma função no POOLNÃOSIM
Identificar se uma determinada função está em andamento no grupo de threads JobsNÃOSIM
Controle da quantidade de execuções paralelas na mesma base de dadosNÃOSIM



1) Configurar chave de profile "logix.pooljobs.servers" para o programa que executa a função para iniciar o
POOL de JOBS ou NOME DO POOL de Jobs desejado.

CHAVE: logix.pooljobs.servers.<PROGRAMA>

Exemplo:
logix.pooljobs.servers.wvd9900=192.168.99.1:7091,192.168.99.1:7092

Neste caso a chave foi configurada para o <PROGRAMA> wvd9900, definindo que existirá apenas um unico POOL de
appservers que atenderá a processamentos multi-threads utilizando a funcionalidades POOLJOBS.

Pode-se criar também mais de um POOL para o mesmo programa, como por exemplo POOL por empresa.

Exemplo: wvd9900_01 e wvd9900_02

No profile ficaria assim:
logix.pooljobs.servers.wvd9900_01=192.168.99.1:7091,192.168.99.1:7092
logix.pooljobs.servers.wvd9900_02=192.168.99.1:7093,192.168.99.1:7094

Onde "wvd9900_01" seria um POOL para empresa "01" e "wvd9900_02" seria para empresa "02", ou seja, neste caso,
existe um pool para empresa 01 e outra pra empresa 02 (nome do pool) e cada um utiliza 2 slaves
distintos para distribuição dos processos paralelos durante a execução.

Se o programa iniciar o POOL como wvd9900_01 e este estiver definido no profile com a lista de appservers, irá
utilizar a lista de appservers definidos para a chave "logix.pooljobs.servers.wvd9900_01".
Caso a chave logix.pooljobs.servers.wvd9900_01 não estiver definida no profile, esta função PoolJobs_init() irá
rastrear automaticamente a chave de servers do pooljobs para o programa que está em execução. Neste caso, se
o programa for "wvd9900" irá procurar a lista de servers definidos para a chave "logix.pooljobs.servers.wvd9900"
e caso encontre será adotada esta lista de servers para o POOL "wvd9900_01".

A distribuição dos processos JOBS durante a execução é totalmente controlado pela base de dados, utilizando
dados registrados na tabela LOG_DADOS_SESSAO_LOGIX, pois desta forma não importa em qual appserver esteja
realizando a execução ou quais usuários estejam executando a rotina, pois a execução sendo realizada por
N processos/usuários, será capaz de identificar se determinado processo JOB previsto no pool (processos executados)
está em andamento ou não na base de dados.

EXEMPLO DE USO:
===============
1) CONFIGURAÇÃO DA CHAVE "logix.pooljobs.servers" NO PROFILE:

logix.pooljobs.servers.logix_pool=192.168.99.1:7091,192.168.99.1:7092

2) DESENVOLVIMENTO NO FONTE .4GL:

DEFINE m_pooljob_name CHAR(30)

LET m_pooljob_name = "logix_pool"

IF _ADVPL_PoolJobs_getCountProcess(m_pooljob_name) > 0 THEN
CALL LOG_Message("POOL JOBS","ERROR","Este processo já está em andamento.")
RETURN
END IF

IF NOT _ADVPL_PoolJobs_init(m_pooljob_name) THEN
CALL LOG_message("POOL JOBS","ERROR","Falha ao iniciar o POOL de appserver JOBS.",
"Lista de appservers da chave logix.jobServers para o programa estão inativos ou não foram configurados.",0)
RETURN
END IF

IF _ADVPL_PoolJobs_runProcess(m_pooljob_name,"log001_processo_01") THEN
CALL conout("Processo 01 iniciado ou já alcançou limites de processos paralelos em andamento.")
ELSE
CALL conout("Processo 01 não iniciado. Falha de conexão.")
END IF

IF _ADVPL_PoolJobs_runProcess(m_pooljob_name,"log001_processo_02") THEN
CALL conout("Processo 02 iniciado ou já alcançou limites de processos paralelos em andamento.")
ELSE
CALL conout("Processo 02 não iniciado. Falha de conexão.")
END IF

IF _ADVPL_PoolJobs_runProcess(m_pooljob_name,"log001_processo_03") THEN
CALL conout("Processo 03 iniciado ou já alcançou limites de processos paralelos em andamento.")
ELSE
CALL conout("Processo 03 não iniciado. Falha de conexão.")
END IF

IF _ADVPL_PoolJobs_runProcess(m_pooljob_name,"log001_processo_04") THEN
CALL conout("Processo 04 iniciado ou já alcançou limites de processos paralelos em andamento.")
ELSE
CALL conout("Processo 04 não iniciado. Falha de conexão.")
END IF
*/