Pessoal estou dando uma estudada no envers da Jboss e tentei fazer uma aplicacao basica aqui (tentando copiar os exemplos do site da Jboss)
obs: nao baixei o demo do console pq aqui no trabalho tem um limite de download e tem que fazer uma solicitacao, as vezes demora um pouco, por isso eu copiei as classes do svn e tentei fazer uma aplicacao bem parecida
a aplicacao esta funcionando normalmente, seguem os fontes
persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.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_1_0.xsd">
<persistence-unit name="enversPU" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>envers.Address</class>
<class>envers.Person</class>
<properties>
<property name="hibernate.connection.username" value="admin"/>
<property name="hibernate.connection.password" value="admin"/>
<property name="hibernate.connection.driver_class" value="org.apache.derby.jdbc.ClientDriver"/>
<property name="hibernate.connection.url" value="jdbc:derby://localhost:1527/envers"/>
<property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/>
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
<!-- Envers listeners -->
<property name="hibernate.ejb.event.post-insert" value="org.jboss.envers.event.VersionsEventListener"/>
<property name="hibernate.ejb.event.post-update" value="org.jboss.envers.event.VersionsEventListener"/>
<property name="hibernate.ejb.event.post-delete" value="org.jboss.envers.event.VersionsEventListener"/>
<!-- Envers properties - changing the name of the generated fields -->
<property name="org.jboss.envers.revisionTypeFieldName" value="VER_REV_TYPE"/>
<property name="org.jboss.envers.revisionFieldName" value="VER_REV"/>
</properties>
</persistence-unit>
</persistence>
[code]package envers;
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import org.jboss.envers.RevisionEntity;
import org.jboss.envers.RevisionNumber;
import org.jboss.envers.RevisionTimestamp;
/**
*
-
@author bernardo
*/
@Entity
@RevisionEntity(RevListener.class)
@Table
public class RevEntity implements Serializable {
private static final long serialVersionUID = 6931265833296051260L;@Id
@GeneratedValue
@RevisionNumber
private int id;@RevisionTimestamp
private long time_stamp;private String user_name;
public int getId() {
return id;
}public void setId(int id) {
this.id = id;
}public long getTime_stamp() {
return time_stamp;
}public void setTime_stamp(long time_stamp) {
this.time_stamp = time_stamp;
}public String getUser_name() {
return user_name;
}public void setUser_name(String user_name) {
this.user_name = user_name;
}@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final RevEntity other = (RevEntity) obj;
if (this.id != other.id) {
return false;
}
if (this.time_stamp != other.time_stamp) {
return false;
}
if ( !(this.user_name.equals(other.user_name)) && (this.user_name == null || !this.user_name.equals(other.user_name))) {
return false;
}
return true;
}@Override
public int hashCode() {
int hash = 3;
hash = 19 * hash + this.id;
hash = 19 * hash + (int) (this.time_stamp ^ (this.time_stamp >>> 32));
hash = 19 * hash + (this.user_name != null ? this.user_name.hashCode() : 0);
return hash;
}
}[/code]
[code]package envers;
import org.jboss.envers.RevisionListener;
/**
*
-
@author bernardo
*/
public class RevListener implements RevisionListener {public void newRevision(Object revisionEntity) {
RevEntity revEntity = (RevEntity) revisionEntity;
revEntity.setUser_name(“Bernardo”);
}
}
[/code]
[code]package envers;
import java.io.Serializable;
import org.jboss.envers.Versioned;
import javax.persistence.*;
/**
-
@author Adam Warski (adam at warski dot org)
*/
@Entity
public class Person implements Serializable {
private static final long serialVersionUID = -4041229582648176872L;@Id
@GeneratedValue
private int id;@Versioned
private String name;@Versioned
private String surname;@Versioned
@ManyToOne
private Address address;public int getId() {
return id;
}public void setId(int id) {
this.id = id;
}public String getName() {
return name;
}public void setName(String name) {
this.name = name;
}public String getSurname() {
return surname;
}public void setSurname(String surname) {
this.surname = surname;
}public Address getAddress() {
return address;
}public void setAddress(Address address) {
this.address = address;
}@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Person)) return false;Person person = (Person) o; if (id != person.id) return false; if (name != null ? !name.equals(person.name) : person.name != null) return false; if (surname != null ? !surname.equals(person.surname) : person.surname != null) return false; return true;}
@Override
public int hashCode() {
int result;
result = id;
result = 31 * result + (name != null ? name.hashCode() : 0);
result = 31 * result + (surname != null ? surname.hashCode() : 0);
return result;
}
}[/code]
soh que eu estou com uma duvida … como eu vou fazer o link para saber qual usuario efetuou a alteracao na entidade.
na revisao da entidade nao existe nenhuma referencia para o usuario
aqui uma linha da tabela reventity
65536 1223304533484 Bernardo
aqui uma linha da tabela person_versions
32768 65536 0 James Bond 1
32769 65536 0 John McClane 2
32770 65536 0 Holly Gennaro 2
a tabela de versao mantem todo o historico, mas como eu faco o link para saber quem fez a alteracao?
EDIT
Esquecam a pergunta … nao tinha reparado que pelo REV_VER da para ver quem fez a alteracao.