Skip to main content

Serviço

Classe Service

Implementa as regras de negócio de um processo de negócio gerenciado pelo contexto transacional VSet Chameleon como serviço, ou seja, não há interação com o usuário/canal.

Anotações

Classe

AnotaçãoDescriçãoParâmetro
@ServiceNameInforma para VSet Chameleon que essa classe será disponibilizada para os canaisname - nome da classe de negócio
description - descrição da classe de negócio
batch(1) - Igual a true informa para VSet Chameleon que essa classe só poderá ser executada se parametro batch da Tag environment estiver como true
@NotLogInforma para VSet Chameleon não gravar rastreamento/performance do processo
@NotShowInforma para VSet Chameleon não gravar as mensagem de requisição e resposta no log de auditoria
@LockExecutionInforma para VSet Chameleon bloquear a execução de uma ou "n" instâncias do serviço enquanto estiver outra instância do mesmo serviço em execução
(1) VSet Chameleon criou o ambiente para permitir execução de processos em batch para evitar redundância em outros servidores onde arquitetura de servidores escala horizontal.

Exemplo:

@ServiceName(name = "LoadBilling", description = "Load Billing")
@LockExecution
public class LoadBilling extends Service {
// any code
}

Método principal do processo de negócio

MétodoTipoDescrição
initialize()voidImplementa as inicializações necessárias para viabilizar execução de um processoOpcional
process()voidImplementa a rotina de execução do processoObrigatório
finalize()voidImplementa a rotina de finalização necessárias do processoOpcional
recover()voidImplementa a rotina de recuperações após de uma interrupção inesperadaOpcional
cleanVariables()voidImplementa a limpeza/eliminação da memória das variavéis do processoOpcional

Exemplo:

@ServiceName(name = "LoadBilling", description = "Load Billing")
public class LoadBilling extends Service {

@Override
protected void initialize() throws Exception {
// any code if necessary
}

@Override
protected void process() throws Exception {
// any code
}

@Override
protected void finalize() throws Exception {
// any code if necessary
}

@Override
protected void recover() throws Exception {
// any code if necessary
}

@Override
protected void cleanVariables() throws Exception {
// any code if necessary
}
}

Método auxiliar/apoio do serviço

MétodoTipoDescrição
getBusinessProcess()ServiceRetorna referência do processo executado pelo serviço
isShutdown()booleanRetorna o status do shutdown do serviço
setShutdown(boolean shutdown)voidAltera o status shutdown (Se for true, informará serviço que é para encerrar o processo)
isRunOnly()booleanRetorna o status da forma de execução do serviço
setRunOnly(boolean runOnly)voidAltera o status da forma de execução do serviço (Se for true, informará serviço que a execução do processo será feita uma vez)
getTimeWait()longRetorna o tempo do intervalo da execução do processo implementado no serviço em milissegundos
setTimeWait(long timeWait)voidInsere o tempo do intervalo da execução do processo implementado no serviço em milissegundos
getObjectParams()ObjectRetorna os parâmetros definidos para o serviço
setObjectParams(Object objectParams)voidInsere os parâmetros definidos para o serviço
getTimer()TimerRetorna a referência do objeto agendado
setTimer(Timer timer)voidInsere a referência do objeto agendado
getDescription()StringRetorna a descrição do serviço
setDescription(String description)voidInsere a descrição do serviço
addTrigger(Class<?> service)voidDispara outro serviço após do termino da execução do método process()
nextScheduleByMethod(Class<?> objClass, String name)voidAgenda a execução por meio de um método de uma classe
validateTimeHHMM(String horary, String messageError)voidValida o formato de horário (hora e minuto)

Variável de sessão

MétodoTipoDescrição
getSessionProperty(String key)ObjectRecupera o valor de uma variável de sessão tipo objeto
getSessionPropertyInt(String key)intRecupera o valor de uma variável de sessão tipo inteiro
getSessionPropertyLong(String key)longRecupera o valor de uma variável de sessão tipo long
getSessionPropertyByte(String key)byteRecupera o valor de uma variável de sessão tipo byte
getSessionPropertyDouble(String key)doubleRecupera o valor de uma variável de sessão tipo double
getSessionPropertyBool(String key)booleanRecupera o valor de uma variável de sessão tipo booleano
getSessionPropertyStr(String key)StringRecupera o valor de uma variável de sessão tipo string
setSessionProperty(String key, Object value)voidInsere o valor de uma variável de sessão tipo objeto
setSessionPropertyInt(String key, int value)voidInsere o valor de uma variável de sessão tipo inteiro
setSessionPropertyLong(String key, long value)voidInsere o valor de uma variável de sessão tipo long
setSessionPropertyByte(String key, byte value)voidInsere o valor de uma variável de sessão tipo byte
setSessionPropertyDouble(String key, double value)voidInsere o valor de uma variável de sessão tipo double
setSessionPropertyBool(String key, boolean value)voidInsere o valor de uma variável de sessão tipo booleano

Exemplo:

  • Inclusão do valor da variável de sessão
    setSessionPropertyInt("IdUser", ui.getOutput().getId());
setSessionPropertyInt("IdCompany", idCompany);
setSessionProperty("Usercode", input.getUsercode());
  • Recuperação do valor da variável de sessão
    int idUser = getSessionPropertyInt("IdUser");
int idCompany = getSessionPropertyInt("IdCompany");
String usercode = getSessionProperty("Usercode");

Contexto Transacional Nível Bloco

MétodoTipoDescrição
beginTransactionBlock()voidInicia o bloco transacional de um escopo da regra de negócioGarantir o contexto transacional do bloco - Banco de dados
commitTransactionBlock()voidEfetiva o bloco transacional de um escopo da regra de negócio
rollbackTransactionBlock()voidDesfaz o bloco transacional de um escopo da regra de negócio

Exemplo:

    try {
PassportPassword pp = new PassportPassword();
pp.setUsercode(input.getUsercode());
pp.setChannel(uio.getChannel());
pp.setTokenApp(getClientID());
pp.setToken(Util.generateKeyRandom(8));
// begin transaction block
beginTransactionBlock();
TokenUserDAO tuDAO = new TokenUserDAO();
tuDAO.getInput().setId(uio.getIdToken());
tuDAO.select();
TokenUser tu = (TokenUser) tuDAO.getOutputOnlyRecord();
tuDAO.getInput().setPasswordErrorAmount(tu.getPasswordErrorAmount() + 1);
tuDAO.getInput().setLastPasswordErrorDate(new Timestamp(System.currentTimeMillis()));
tuDAO.update();
// end transaction block
commitTransactionBlock();
}
catch (Exception e) {
// rollback transaction block
rollbackTransactionBlock();
throw e;
}

Observação: Aqueles trechos que estão fora do contexto transacional do bloco serão controlados pelo contexto transacional nível global.

Agendamento do Serviço

No VSet Chameleon existe um gerenciador de agendamento SchedulingManager, o qual é responsável por todo o mecanismo de agendamento do processo, tais como: iniciar, cancelar e registrar. Toda vez que é criado um agendamento de serviço no VSet Chameleon, é criado um ticket único de agendamento pelo gerenciador SchedulingManager.

Nota: É permitido agendar várias vezes a mesma classe de serviço. Para cada mesma classe de serviço criada (instância nova) ter-se-á o seu ticket único. Para saber quantos agendamentos existem da mesma classe de serviço, deve-se executar o método hasSchedulerByName, passando o parâmetro “nome do serviço” ou “nome da classe” e e será retornado quantos agendamentos existentes para mesma classe de serviço.

Classe SchedulingManager

MétodoTipoDescrição
startTimeService(Class<?> serviceClass, String date, String pattern, String description)StringAgenda o disparo do serviço. Retorna ticket do agendamento do serviço
startTimeService(Class<?> serviceClass, Date date, Object params, String description)StringAgenda o disparo do serviço. Retorna ticket do agendamento do serviço
startTimeService(String name, Class<?> serviceClass, Date date, Object params, String description)StringAgenda o disparo do serviço. Retorna ticket do agendamento do serviço
startTimeServiceNow(Class<?> serviceClass, Object params, String description)StringAgenda o disparo do serviço. Retorna ticket do agendamento do serviço
removeScheduler(String ticket)booleanRemove o serviço na lista de agendamento
hasScheduler(String ticket)booleanVerifica se o serviço está agendado
hasSchedulerByName(String name)intRetorna quantas instâncias agendadas tem o serviço
getTimeScheduler(String ticket)StringRetorna o horário do serviço agendado
removeAllScheduler()booleanRemove todas as instâncias de serviços no gerenciador de agendamento
changeTime(String ticket, String date, String pattern)StringAltera o horário do serviço
changeTime(String ticket, Date date)StringAltera o horário do serviço

Existem quatro formas de agendar pelo gerenciador de agendamento SchedulingManager, por meio do método startTimeService, e sempre será retornado o ticket do agendamento:

  • startTimeService(Class<?> serviceClass, String date, String pattern, String description)

    1 - serviceClass: nome da classe de serviço.
    2 - date: data e/ou hora no formato Date que o serviço será processado.
    3 - pattern: formato definido no parâmetro date.
    4 - description: descrição sobre agendamento.

Exemplo:

   String ticket = SchedulingManager.startTimeService(MakeBackup.class, 
“02/08/2010 21:00”,
“dd/MM/yyyy HH:mm”,
“Rotina de backup de arquivos”);
  • startTimeService(Class<?> serviceClass, Date date, String description).

    1 - serviceClass: nome da classe de serviço.
    2 - date: data e/ou hora no formato Date que o serviço será processado.
    3 - description: descrição sobre agendamento.

Exemplo:

   Date schedulerDate = new Date();
String ticket = SchedulingManager.startTimeService(MakeBackup.class,
schedulerDate,
“Rotina de backup de arquivos”);
  • startTimeService(Class<?> serviceClass, Date date, Object params, String description)

    1 - serviceClass: nome da classe de serviço.
    2 - date: data e/ou hora no formato Date que o serviço será processado.
    3 - params: parâmetros tipo objeto. São parâmetros específicos da classe de serviço que será executado.
    4 - description: descrição sobre agendamento.

Exemplo:

   // 
Date schedulerDate = new Date();
Object parameter = new Parameter();
String ticket = SchedulingManager.startTimeService(MakeBackup.class,
schedulerDate,
parameter,
“Rotina de backup de arquivos”);
  • startTimeService(String name, Class<?> serviceClass, Date date, Object params, String description)

    1 - name: nome do serviço.
    2 - serviceClass: nome da classe de serviço.
    3 - date: data e/ou hora no formato Date que o serviço será processado.
    4 - params: parâmetros tipo objeto. São parâmetros específicos da classe de serviço que será executado.
    5 - description: descrição sobre agendamento.

Atenção: Quando passar o parâmetro “name”, o mesmo deverá ser único. Como sugestão, além do nome incluir o nome da classe de serviço para garantir sua unicidade.

Exemplo:

   // 
Date schedulerDate = new Date();
Object parameter = new Parameter();
String ticket = SchedulingManager.startTimeService("MakeBackup"
MakeBackup.class,
schedulerDate,
parameter,
“Rotina de backup de arquivos”);

Para executar o serviço imediatamente, utiliza-se o método startTimeServiceNow:

  • startTimeServiceNow(Class<?> serviceClass, Object params, String description)

    1 - serviceClass: nome da classe de serviço.
    2 - params: parâmetros tipo objeto. São parâmetros específicos da classe de serviço que será executado.
    3 - description: descrição sobre agendamento.

Cancelamento do Agendamento

Para cancelar o agendamento, utiliza-se o método removeScheduler passando o parâmetro ticket do agendamento:

   SchedulingManager.removeScheduler(ticket); 

Nota: Antes de fazer o cancelamento, utilize o método hasScheduler para verificar se o serviço ainda está agendado - SchedulingManager. hasScheduler(ticket);

Para cancelar todos os agendamentos existentes, utiliza-se o método removeAllScheduler.

Atenção: Recomenda-se utilizar esta opção em caso excepcional. Sugerimos sempre utilizar a opção, cancelamento individual removeScheduler para se ter mais controle.

Alteração do horário de Agendamento já existente

Para postergar ou antecipar a execução do serviço, utiliza-se o método changeTime e sempre será retornado o ticket do agendamento:

  • changeTime(String ticket, String date, String pattern);

    1 - ticket: ticket agendamento.
    2 - date: data e/ou hora no formato string que o serviço será processado.
    3 - pattern: formato definido no parâmetro date.

  • changeTime(String ticket, Date date);

    1 - ticket: ticket agendamento.
    2 - date: data e/ou hora no formato Date que o serviço será processado.

Atenção: Qualquer alteração do horário da execução do serviço gerará novo ticket e o anterior será removido pelo VSet Chameleon.

Lista de agendamento

MétodoTipoDescrição
getTimeScheduler(String ticket)StringRecupera a informação do horário que foi agendada por meio do parâmetro ticket.
getSchedulerList()ObjectTreeMapLista de todos os serviços agendados existentes.

Disparo do serviço através de gatilho (Trigger)

O VSet Chameleon oferece a opção de disparar serviços ou metodo de classe através do gatilho (Trigger). Existem dois metodos para executar o gatilho (Trigger):

MétodoTipoDescrição
addTrigger(Class<?> service)voidAdiciona a classe de serviço que será disparado após da conclusão do serviço.
nextScheduleByMethod(Class<?> objClass, String name)voidAdiciona a classe e o método que será executado após da conclusão do serviço.

Exemplo:

   // trigger LoadBilling service class 
addTrigger(LoadBilling.class);

// trigger LoadBilling service class by method
nextScheduleByMethod(Common.class ,"startup");

FAQ (Frequently Asked Questions)