EclipseLink Audit / Verlauf / Änderungen verfolgen
Ich habe versucht, eine Möglichkeit zum Nachverfolgen von Datenänderungen und zum Erstellen eines Verlaufsprotokolls für meine Anwendung zu implementieren. Da ich EclipseLink verwende, sollte es einfach und möglich sein, die Änderungen so abzurufen, wie sie sindSchreiben Sie in die EclipseLink-FAQ Die erste Lösung funktioniert, aber die zweite ereignisbasierte Lösung funktioniert nicht. Jedes Mal, wenn das Ereignis ausgelöst wird, ist ObjectChangeSet null.
Der Grund, warum ich nicht einfach HistoryPolicy benutze, ist, dass ich keine Informationen über den angemeldeten Benutzer (nicht den Datenbankbenutzer) und die geänderten Daten in einer separaten Tabelle speichern möchte. Ich habe viel gesucht, aber keine Lösung für dieses Problem gefunden.
Dies ist meine Entitätsklasse:
@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;
...
}
Und das ist meine DescriptorEventAdapter-Klasse:
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");
}
}
Die persistence.xml-Datei, die ich verwendet habe:
<?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>
Jede Hilfe wäre sehr dankbar.