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ção | Descrição | Parâmetro |
|---|---|---|
@ServiceName | Informa para VSet Chameleon que essa classe será disponibilizada para os canais | name - 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 |
@NotLog | Informa para VSet Chameleon não gravar rastreamento/performance do processo | |
@NotShow | Informa para VSet Chameleon não gravar as mensagem de requisição e resposta no log de auditoria | |
@LockExecution | Informa 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 |
Exemplo:
@ServiceName(name = "LoadBilling", description = "Load Billing")
@LockExecution
public class LoadBilling extends Service {
// any code
}
Método principal do processo de negócio
| Método | Tipo | Descrição | |
|---|---|---|---|
initialize() | void | Implementa as inicializações necessárias para viabilizar execução de um processo | Opcional |
process() | void | Implementa a rotina de execução do processo | Obrigatório |
finalize() | void | Implementa a rotina de finalização necessárias do processo | Opcional |
recover() | void | Implementa a rotina de recuperações após de uma interrupção inesperada | Opcional |
cleanVariables() | void | Implementa a limpeza/eliminação da memória das variavéis do processo | Opcional |
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étodo | Tipo | Descrição | |
|---|---|---|---|
getBusinessProcess() | Service | Retorna referência do processo executado pelo serviço | |
isShutdown() | boolean | Retorna o status do shutdown do serviço | |
setShutdown(boolean shutdown) | void | Altera o status shutdown (Se for true, informará serviço que é para encerrar o processo) | |
isRunOnly() | boolean | Retorna o status da forma de execução do serviço | |
setRunOnly(boolean runOnly) | void | Altera 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() | long | Retorna o tempo do intervalo da execução do processo implementado no serviço em milissegundos | |
setTimeWait(long timeWait) | void | Insere o tempo do intervalo da execução do processo implementado no serviço em milissegundos | |
getObjectParams() | Object | Retorna os parâmetros definidos para o serviço | |
setObjectParams(Object objectParams) | void | Insere os parâmetros definidos para o serviço | |
getTimer() | Timer | Retorna a referência do objeto agendado | |
setTimer(Timer timer) | void | Insere a referência do objeto agendado | |
getDescription() | String | Retorna a descrição do serviço | |
setDescription(String description) | void | Insere a descrição do serviço | |
addTrigger(Class<?> service) | void | Dispara outro serviço após do termino da execução do método process() | |
nextScheduleByMethod(Class<?> objClass, String name) | void | Agenda a execução por meio de um método de uma classe | |
validateTimeHHMM(String horary, String messageError) | void | Valida o formato de horário (hora e minuto) |
Variável de sessão
| Método | Tipo | Descrição | |
|---|---|---|---|
getSessionProperty(String key) | Object | Recupera o valor de uma variável de sessão tipo objeto | |
getSessionPropertyInt(String key) | int | Recupera o valor de uma variável de sessão tipo inteiro | |
getSessionPropertyLong(String key) | long | Recupera o valor de uma variável de sessão tipo long | |
getSessionPropertyByte(String key) | byte | Recupera o valor de uma variável de sessão tipo byte | |
getSessionPropertyDouble(String key) | double | Recupera o valor de uma variável de sessão tipo double | |
getSessionPropertyBool(String key) | boolean | Recupera o valor de uma variável de sessão tipo booleano | |
getSessionPropertyStr(String key) | String | Recupera o valor de uma variável de sessão tipo string | |
setSessionProperty(String key, Object value) | void | Insere o valor de uma variável de sessão tipo objeto | |
setSessionPropertyInt(String key, int value) | void | Insere o valor de uma variável de sessão tipo inteiro | |
setSessionPropertyLong(String key, long value) | void | Insere o valor de uma variável de sessão tipo long | |
setSessionPropertyByte(String key, byte value) | void | Insere o valor de uma variável de sessão tipo byte | |
setSessionPropertyDouble(String key, double value) | void | Insere o valor de uma variável de sessão tipo double | |
setSessionPropertyBool(String key, boolean value) | void | Insere 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étodo | Tipo | Descrição | |
|---|---|---|---|
beginTransactionBlock() | void | Inicia o bloco transacional de um escopo da regra de negócio | Garantir o contexto transacional do bloco - Banco de dados |
commitTransactionBlock() | void | Efetiva o bloco transacional de um escopo da regra de negócio | |
rollbackTransactionBlock() | void | Desfaz 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étodo | Tipo | Descrição | |
|---|---|---|---|
startTimeService(Class<?> serviceClass, String date, String pattern, String description) | String | Agenda o disparo do serviço. Retorna ticket do agendamento do serviço | |
startTimeService(Class<?> serviceClass, Date date, Object params, String description) | String | Agenda o disparo do serviço. Retorna ticket do agendamento do serviço | |
startTimeService(String name, Class<?> serviceClass, Date date, Object params, String description) | String | Agenda o disparo do serviço. Retorna ticket do agendamento do serviço | |
startTimeServiceNow(Class<?> serviceClass, Object params, String description) | String | Agenda o disparo do serviço. Retorna ticket do agendamento do serviço | |
removeScheduler(String ticket) | boolean | Remove o serviço na lista de agendamento | |
hasScheduler(String ticket) | boolean | Verifica se o serviço está agendado | |
hasSchedulerByName(String name) | int | Retorna quantas instâncias agendadas tem o serviço | |
getTimeScheduler(String ticket) | String | Retorna o horário do serviço agendado | |
removeAllScheduler() | boolean | Remove todas as instâncias de serviços no gerenciador de agendamento | |
changeTime(String ticket, String date, String pattern) | String | Altera o horário do serviço | |
changeTime(String ticket, Date date) | String | Altera 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
hasSchedulerpara 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
removeSchedulerpara 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étodo | Tipo | Descrição |
|---|---|---|
getTimeScheduler(String ticket) | String | Recupera a informação do horário que foi agendada por meio do parâmetro ticket. |
getSchedulerList() | ObjectTreeMap | Lista 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étodo | Tipo | Descrição |
|---|---|---|
addTrigger(Class<?> service) | void | Adiciona a classe de serviço que será disparado após da conclusão do serviço. |
nextScheduleByMethod(Class<?> objClass, String name) | void | Adiciona 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");