Ola pessoAll! Estive meio atarefado ultimamente, infelizmente, acabei deixando de atualizar o blog.Nesta iniciativa de retomada, sempre tentarei realizar postagens duplas, sendo: em portugues e ingles.A razao: (a) felizmente, pelas estatisticas de acesso ha um numero razoavel de acessos internacionais, assim, acredito que com isto o blog podera alcancar mais publico; (b) para aperfeicoar meu ingles ;)Espero que gostem, e obrigado pelos acessos e comentarios! Ola seguidores e entusiastas do SerJava!!Faz certo tempo que nao os alimento de conteudo, mas tenham certeza que nao abandonei o blog nem o interesse em disseminar p conhecimento e, acima de tudo, propagar a tecnologia Java.Desde que comecei a trabalhar no ecossistema Java, confesso, sempre tive uma queda pelas tecnologias relativas a ORM (Mapeamento Objeto-Relacional); gostos a parte, optei como artigo de retomada, abordar sobre o HibernateEnvers.Comumente, desde pequenas a grandes aplicacoes, tem-se o desejo (necessidade realmente) de monitorar as acoes do usuario frente ao sistema, de modo a prover controle sobre o uso da aplicacao, bem como, resguardar a integridade das informacoes administradas pela mesma. Por certo, a maioria das aplicacoes desenvolvidas sobre a plataforma Java, fazem uso de frameworks ORM. Aproveitando os preceitos desta tecnologia, diga-se de passagem, ja abordados em topicos anteriores (mas ainda ha mais conteudos, aguardem!), o Hibernate dispoes do subprojeto Envers.O Hibernate Envers "prove o historico de versionamento dos dados manipulados pela aplicacao", ou seja, e possivel fazer uso de objetos persistentes (entidades mapeadas para a persistencia JPA) para auditar as modificacoes havidas num dado registro. O Envers, utiliza de artificios de revisoes, conceito similar ao subservion. Sua configuracao e bastante simples, bastando a adicao do jar correspondente ao classpath e a configuracao do arquivo persistence.xml.No intuito de ser objetivo, neste topico vou abordar apenas os primeiros passos, novos posts trarao mais detalhes sobre o Envers.ImplementacaoAproveitando o conteudo ja trabalhado, a respeito de persistencia nos posts anteriores, farei uso do projeto criado ate entao, onde foi realizado o mapeamento para a persistencia de objetos representativos de um Produto (http://www.serjava.blogspot.com/2011/12/persistencia-jpa-dao-generico.html).Como o projeto foi feito ha um tempinho (rsrs) resolvi modernizar inserindo a ultima versao do Hibernate, a 4.0, disponivel em: Hibernate Download, feito o download, observe que o diretorio lib contem: envers, jpa, required e optional. Para atualizar seu hibernate, delete todos os artefatos do seu projeto, exceto o driver de conexao com o banco (caso esteja utilizando o projeto iniciado anteriormente) e adicione os jars dos diretorios: envers, jpa e required no classpath da sua aplicacao (o primeiro post sobre JPA mostra como fazer). Seu classpath, neste momento, devera conter:O proximo passo e adicionarmos a configuracao do Envers, faremos a auditoria, ate entao, apenas para a criacao e atualizacao de dados, assim, seu arquivo persistence.xml, devera ficar similar a este:<?xml version="1.0" encoding="UTF-8"?><persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> <persistence-unit name="PersistenciaPU" transaction-type="RESOURCE_LOCAL"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <class>br.com.serjava.persistencia.entity.Produto</class> <properties> <property name="hibernate.connection.username" value="postgres" /> <property name="hibernate.connection.driver_class" value="org.postgresql.Driver" /> <property name="hibernate.connection.password" value="123456" /> <property name="hibernate.connection.url" value="jdbc:postgresql://localhost:5432/PERSISTENCIA" /> <property name="hibernate.show_sql" value="true" /> <!-- Permite operacoes ddls pelo jpa --> <property name="hibernate.hbm2ddl.auto" value="update" /> <!-- configuracao do Envers --> <property name="post-insert" value="org.hibernate.ejb.event.EJB3PostInsertEventListener, org.hibernate.envers.event.EnversListener" /> <property name="post-update" value="org.hibernate.ejb.event.EJB3PostUpdateEventListener, org.hibernate.envers.event.EnversListener" /> </properties>