Histórico da Página
...
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ções | Componente LThread | Funções POOL JOBS |
---|---|---|
Executar múltiplas Threads paralelas | SIM | SIM |
Distribuir a execução de threads em múltiplos Appservers | NÃO | SIM |
Executar funções distintas para um mesmo pool de Threads | NÃO | SIM |
Executar mais de um grupo de threads para processamentos distintos | NÃO | SIM |
Controlar a quantidade de execuções paralelas de uma mesma função no POOL | NÃO | SIM |
Identificar se uma determinada função está em andamento no grupo de threads Jobs | NÃO | SIM |
Controle da quantidade de execuções paralelas na mesma base de dados | NÃO | SIM |
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
*/