Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Vraptor + Eventos CDI + Ordem e Atomicidade

Olá a todos :) !

Estou desenvolvendo um sistema de publicações oficiais com o Vraptor, na minha aplicação tem o passo principal do sistema que é a publicação do documento onde realizo várias etapas: salvo a data da publicação, geração de um arquivo pdf e por fim assino digitalmente o pdf gerado. Atualmente meu código está concentrado no controlador e no service:

    @Get("/publicacao/{id}/gerar")
    public void gerarDiario(Integer id) throws Exception{
//faz um monte de coisa antes..

//salva a data da publicação no banco e gera um nome padrão para a publicacao
publicacoes.publicar(publicacao);
        publicacoesService.publicarDiario(publicacao);
        result.redirectTo(this).lista( );
    }

as outras classes envolvidas no processo:

@Stateless
public class DiarioService {

    @Inject
    private AssinadorA1 assinadorA1;
    @Inject
    private HtmlToPdfConverter converter;
    @Inject
    private publicacaoBuilder builder;

    public void publicar(Publicacao publicacao){

        /**um documento possui várias publicações
       o publicacaoBuilder gera uma String com o html de todas as 
       publicações de um documento**/
        String conteudo = builder.convert(publicacao);

       /**
      pega o html gerado anteriormente e converte em um arquivo pdf
       e salva em um diretório dentro do servidor
       **/
        converter.convertToFile(conteudo, PATH_PUBLICACAO publicacao.getCaminho());
           /*assina digitalmente o arquivo criado*/
        assinadorA1.signA1( PATH_PUBLICACAO + publicacao.getCaminho(),  PATH_PUBLICACAO + UUID.randomUUID()+publicacao.getCaminho());
    }
}

O código acima funciona, mas acredito que eu possa melhora ló, uma coisa que achei bem legal e que deixaria esse código bem desacoplado seriam os eventos do CDI mas fiquei com dúvida em dois pontos:

1- Eu preciso que todo esse processo ocorra exatamente nesta ordem: salvar a data da publicação no banco, gerar o html da publicação, gerar o pdf e assinar o pdf. utilizando os eventos do CDI posso definir a ordem em que eles ocorrem?

2- Preciso que todo esse processo seja transacional, qualquer operação que falhe deve invalidar todo o processo, os eventos CDI são transacionais?

desde já agradeço qualquer ajuda.

2 respostas
solução!

O segundo é ok, os eventos podem rolar numa mesma transação... Só que o primeiro ainda não tem suporte :(. Ta planejado suporte para a próxima versão apenas.

poxa que pena :( . Obrigado!