EclipseLink Auditoría / Historial / Seguimiento de cambios
He intentado implementar una forma de realizar un seguimiento de los cambios en los datos y crear un registro de historial para mi aplicación. Debido a que estoy usando EclipseLink, debería ser fácil y posible obtener los cambios como ellosescribir en las preguntas frecuentes de EclipseLink La primera solución funciona, pero el segundo evento basado no funcionará. Cada vez que se levanta el evento, el ObjectChangeSet es nulo.
La razón por la que no estoy usando simplemente HistoryPolicy es que no voy a almacenar información sobre el usuario conectado (no el usuario de db) y los datos modificados en una tabla separada. Busqué mucho pero no puedo encontrar ninguna solución a este problema.
Esta es mi clase de entidad:
@Entity
@EntityListeners(HistoryEventListener.class)
@Table(name = "t_users")
public class Users implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "GENSEQ_USERS")
@SequenceGenerator(name = "GENSEQ_USERS", sequenceName = "SEQ_USERS", allocationSize = 1, initialValue = 1)
private Integer id;
@Column(nullable = false)
private String userid;
...
}
Y esta es mi clase DescriptorEventAdapter:
public class HistoryEventListener extends DescriptorEventAdapter {
@Override
public void postUpdate(DescriptorEvent event) {
ObjectChangeSet changeSet = event.getChangeSet();
if (changeSet != null) {
System.out.println("ObjectChangeSet not null");
}
System.out.println("ObjectChangeSet null");
}
@Override
public void postMerge(DescriptorEvent event) {
ObjectChangeSet changeSet = event.getChangeSet();
if (changeSet != null) {
System.out.println("ObjectChangeSet not null");
}
System.out.println("ObjectChangeSet null");
}
}
El archivo persistence.xml que he usado:
<?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="PhoneBookPU" transaction-type="RESOURCE_LOCAL">
<provider>
org.eclipse.persistence.jpa.PersistenceProvider
</provider>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="javax.persistence.jdbc.driver" value="oracle.jdbc.OracleDriver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:oracle:thin:@somehostname:1521:xyz"/>
<property name="javax.persistence.jdbc.password" value="getyourown"/>
<property name="javax.persistence.jdbc.user" value="username"/>
<property name="javax.persistence.logging.level" value="INFO"/>
</properties>
</persistence-unit>
</persistence>
Cualquier ayuda sería muy apreciada.