Skip to main content

ChoreographyAgentWrapper

Classe ChoreographyAgentWrapper

Implementa as regras de negócio de um processo de negócio gerenciado pela coreografia do VSet Chameleon. Só será executado o processo após da autenticação do usuário.

Nota: Essa classe tem que ter pelo menos um processo participante ChoreographyParticipant.

Anotações

Classe

AnotaçãoDescriçãoParâmetro
@BusinessProcessNameInforma para VSet Chameleon que essa classe será disponibilizada para os canaisname(1) - nome da classe de negócio
description - descrição da classe de negócio
channel - Informa que será visível para canal (depreciado)
@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
(1) Quando VSet Chameleon é iniciado ou faz hot deploy, ele registra o nome do processo name no seu gerenciador de processos. É esse nome que os canais que irão invocar para executar o processo. O atributo name por padrão tem o mesmo nome da classe de negócio. Mas é opcional.

Exemplo:

@BusinessProcessName(name="CotacaoAuto", description="Cotação de auto")
@NotLog
@NotDisplay
public class CotacaoAuto extends ChoreographyAgentWrapper {
// any code
}

Estrutura de dados

AnotaçãoDescriçãoParâmetro
@InternalInforma que este campo não é disponibilizado para os canais
@ReadOnlyInforma que este campo é somente leitura para os canais
@ConfidentialInforma que este campo é informação sensível. Aparece no log como asterisco

Exemplo:

public class AccountBalanceInfoOutput {

@FieldInfo(description="Saldo da conta", required=true)
@Internal
@Confidential
private double accountBalance;
@FieldInfo(description="Limite do cartão", required=false)
@ReadOnly
private double cardLimit;
@FieldInfo(description="Saldo do cartão", required=false)
private double cardBalance;

public double getAccountBalance() {
return accountBalance;
}
public void setAccountBalance(double accountBalance) {
this.accountBalance = accountBalance;
}
public double getCardLimit() {
return cardLimit;
}
public void setCardLimit(double cardLimit) {
this.cardLimit = cardLimit;
}
public double getCardBalance() {
return cardBalance;
}
public void setCardBalance(double cardBalance) {
this.cardBalance = cardBalance;
}
}

Método do processo de negócio

MétodoTipoDescrição
getInput()Object – classe de dados da classe de negócioEstrutura de dados da entrada da classe de negócioOpcional
getOutput()Object – classe de dados da classe de negócioEstrutura de dados da saída da classe de negócioOpcional
addParticipant(Class<?> participant, boolean abort)voidAdiciona os processos participantes da coreografiaObrigatório
builtIn()voidImplementa regras de negócio na instanciação da classeOpcional
initialize()voidImplementa inicializaçõesOpcional
enhancementControllerLayer(Context context)voidImplementa regras de controle e segurançaOpcional
preProcess()voidImplementa regras que serão executadas antes do validate()
validate()voidImplementa validações necessáriasOpcional
beforeProcess()voidImplementa alguma atividade antes de processar o método process()Opcional
process()voidImplementa a regra de negócio propriamente ditaObrigatório
afterProcess()voidImplementa alguma atividade ou rotina após a execução do método process()Opcional
finalize()voidImplementa alguma atividade ou rotina para finalizaçãoOpcional
rollback()voidImplementa alguma atividade ou rotina de desfazimento caso houver alguma exceção na classe de negócioOpcional

Nota: Quando o coreografia do VSet Chameleon executa a classe, serão executadas os métodos na forma sequencial:

  • enhancementLayer
  • validate
  • beforeProcess
  • process
  • afterProcess
  • finalize

Se houver alguma exceção por parte da execução da classe de negócio, o VSet Chameleon executará o método rollback() para desfazer o contexto transacional.

O método process() é o principal método que executa as regras de negócio da classe de negócio.


Exemplo:

@BusinessProcessName(name="CotacaoAuto", description="Cotação de auto - multicalculo", channel=true)
public class CotacaoAuto extends ChoreographyAgent {

private CotacaoAutoInput input = new CotacaoAutoInput();
private CotacaoAutoOutput output = new CotacaoAutoOutput();

private int idCotacaoSeguro;
private int idCondutorPrincipal;

private CotacaoSeguradoraAuto cotacaoSeguradoraAuto;


@Override
public CotacaoAutoInput getInput() {
return input;
}

@Override
public CotacaoAutoOutput getOutput() {
return output;
}

@Override
protected void choreographyParticipant() throws Exception {
addParticipant(CotacaoAutoAllianz.class, false);
addParticipant(CotacaoAutoItau.class, false);
}

@Override
public void validate() throws Exception {
if (getSessionPropertyInt("idPreposto") == 0)
throw new ExpiredSessionException("Sessâo encerrada ou expirada. Favor fazer o login novamente.");
}

@Override
public void beforeProcess() throws Exception {

}

@Override
public void process() throws Exception {
output.setIdCotacao(idCotacaoSeguro);
for (ChoreographyParticipant participant : getParticipants()) {
if (participant.getStatus() == ChoreographyParticipant.CONCLUDED) {
if (participant instanceof CotacaoAutoAllianz) {
CotacaoAutoAllianzOutput p = (CotacaoAutoAllianzOutput) participant.getOutput();
CotacaoAutoSeguradora cas = new CotacaoAutoSeguradora();
moveCorr(p, cas, false);
cas.setCarroReserva(VariavelDefinidaMultiCalculo.getCarroReserva(p.getCarroReserva()));
output.getCotacaoAutoSeguradora().add(cas);
}
else if (participant instanceof CotacaoAutoItau) {
CotacaoAutoItauOutput p = (CotacaoAutoItauOutput) participant.getOutput();
CotacaoAutoSeguradora cas = new CotacaoAutoSeguradora();
moveCorr(p, cas, false);
cas.setCarroReserva(VariavelDefinidaMultiCalculo.getCarroReserva(p.getCarroReserva()));
output.getCotacaoAutoSeguradora().add(cas);
}
}
}

Comum.notificationWebByPerfil(2, "1", "Cotação número " + idCotacaoSeguro);
}


}

Classe ChoreographyParticipant

Implementa as regras de negócio de um processo de negócio que será gerenciado pela classe ChoreographyAgentWrapper.

Método do processo de negócio

MétodoTipoDescrição
getInput()(1)Object – classe de dados da classe de negócioEstrutura de dados da entrada da classe de negócioOpcional
setInput(Object input)Object – classe de dados da classe de negócioInseri objeto de estrutura de dados da entrada da classe de negócioOpcional
getOutput()Object – classe de dados da classe de negócioEstrutura de dados da saída da classe de negócioOpcional
initialize()voidImplementa inicializaçõesOpcional
process()voidImplementa a regra de negócio propriamente ditaObrigatório
finalize()voidImplementa alguma atividade ou rotina para finalizaçãoOpcional
(1) A estrutura de entrada tem que ser a mesma da estrutura de entrada da classe ChoreographyAgentWrapper

Exemplo:

public class CotacaoAutoAllianz extends ChoreographyParticipant {

private CotacaoAutoInput input;
private CotacaoAutoAllianzOutput output = new CotacaoAutoAllianzOutput();

@Override
public CotacaoAutoInput getInput() {
return input;
}

@Override
public void setInput(Object input) {
this.input = (CotacaoAutoInput) input;
}

@Override
public CotacaoAutoAllianzOutput getOutput() {
return output;
}

@Override
public void initialize() throws Exception {

}

@Override
public void process() throws Exception {
input.getIdCotacaoSeguro());
output.setCodigoSUSEP(5177);
output.setCarroReserva(input.getCarroReserva());
output.setPremio(1500.00);
output.setFranquia(3000.00);

CotacaoSeguradoraAutoDAO cotacaoSeguradoraAutoDAO = new CotacaoSeguradoraAutoDAO();
CotacaoSeguradoraAuto cotacaoSeguradoraAuto = cotacaoSeguradoraAutoDAO.getInput();
cotacaoSeguradoraAuto.setIdCotacaoSeguro(input.getIdCotacaoSeguro());
cotacaoSeguradoraAuto.setCodigoSUSEP(output.getCodigoSUSEP());
cotacaoSeguradoraAuto.setCarroReserva(input.getCarroReserva());
cotacaoSeguradoraAuto.setPremio(output.getPremio());
cotacaoSeguradoraAuto.setFranquia(output.getFranquia());
cotacaoSeguradoraAutoDAO.insert();

}

@Override
public void finalize() {

}

FAQ (Frequently Asked Questions)