Pessoal estou com seguinte duvida, quando salvo, altero ou deleto algo no meu sistema tenho que gerar um log no qual guardo usuario, data, e descricao.
A duvida é, em qual momento dessa operações que eu chamo este log?
Chamo depois de fazer a inserção por exemplo:
repositoryEmpresa.save(empresa);
repositoryLog.save(log);
Isso não está muito procedural?
Me ajudem…vlw
Esse requisito é um “crosscutting concern”, logo AOP pode resolve-lo.
Eu colocaria pointcuts para metodos do repositorio que são pertinentes ao requisito de Log.
Esse não é um problema do domínio e sim da aplicação… Seu domínio nem precisa saber que este requisito existe.
Esse “log” (o nome correto é historico já que log é algo do tipo do log4j) é, como já foi dito uma preocupação da apliação e não do
dominio. normalmente isso é feito para auditoria posterior
Se vc tem um repositorio editável (estou supondo que o seu repositorio não é um DAO) vc pode, ser não quiser usar AOP, utilizar o save para fazer as duas operações.
Ou pode utilizar um método num repositorio abstrato pai de todos os outros (padrão Layer SuperType) onde vc faz o processo de forma automática. Claro que para isso vc precisa de um padrão para o historico que seja compativel com o objeto do dominio. Normalmente o historico tem um data e hora , um usuario e os dados da entidade do dominio ou um codigo designando a operação que foi feita.
uma outra opção, se estiver usando DAO, além do repositorio , é colocar essa logica comum no DAO. Se seguio o padrão DAO vc tem uma interface DAO e um DAO concreto. Vc cria um outro DAO que delega todas as operaçãos ao DAO concreto, mas na operação de save ele processa os dados para criar o log. Alguma anotação do tipo @Auditable ou uma interface marcadora podem facilitar o uso desse “cuting concern”
Resolveria usando o AspectJ?
Eu já fiz algo deste tipo Implementando um Filtro para Hibernate (procure por org.Hibernate.EmptyInterceptor).
Ele verifica se a classe está anotada com @Auditable e faz o trabalho de persistir as ocorrências.
Alguem poderia dar um exemplo de como seria com AOP.
Ja tinha ouvido falar, mas nunca estudei sobre AOP a fundo.
Gostaria de saber se alguem tem algum exemplo
Vlw galera pela ajuda
Depende, qual o seu problema?
O meu problema a ser resolvido é guardar um historico das transações efetuadas por um usuario.
Exemplo: Ao cadastrar uma Empresa ou altera-la preciso guardar esse historico