Cuando inicie el actualizador basado en la hora de JPA (Java Persistence API), las correlaciones de ObjectGrid se actualizan con los últimos cambios de la base de datos.
Si crea la configuración de timeBasedDBUpdate para la correlación de respaldo, el actualizador de la base de datos basado en la hora se inicia automáticamente cuando se activa un fragmento distribuido de ObjectGrid. Para un ObjectGrid que tiene varias particiones, el actualizador de la base de datos basado en la hora sólo se inicia en la partición 0.
Si crea la configuración de timeBasedDBUpdate para la correlación de respaldo, el actualizador de la base de datos basado en la hora se inicia automáticamente cuando se activa la correlación local.
public synchronized void startDBUpdate(ObjectGrid objectGrid, String mapName,
String punitName, Class entityClass, String timestampField, DBUpdateMode mode) {
Si desea detener el actualizador de base de datos basado en la hora, puede llamar al siguiente método para detener el actualizador:
public synchronized void stopDBUpdate(ObjectGrid objectGrid, String mapName)
Los parámetros ObjectGrid y mapName deben ser los mismos que los que se pasan en el método startDBUpdate.
Como parte de la características de bloqueo optimista, DB2 9.5 proporciona una función de indicación de fecha y hora de cambio de fila. Puede definir una columna ROWCHGTS mediante el formato ROW CHANGE TIMESTAMP de la siguiente manera:
ROWCHGTS TIMESTAMP NOT NULL
GENERATED ALWAYS
FOR EACH ROW ON UPDATE AS
ROW CHANGE TIMESTAMP
A continuación, puede indicar el campo de entidad que corresponde a esta columna como campo de indicación de hora mediante una anotación o configuración. A continuación se muestra un ejemplo:
@Entity(name = "USER_DB2")
@Table(name = "USER1")
public class User_DB2 implements Serializable {
private static final long serialVersionUID = 1L;
public User_DB2() {
}
public User_DB2(int id, String firstName, String lastName) {
this.id = id;
this.firstName = firstName;
this.lastName = lastName;
}
@Id
@Column(name = "ID")
public int id;
@Column(name = "FIRSTNAME")
public String firstName;
@Column(name = "LASTNAME")
public String lastName;
@com.ibm.websphere.objectgrid.jpa.dbupdate.annotation.Timestamp
@Column(name = "ROWCHGTS", updatable = false, insertable = false)
public Timestamp rowChgTs;
}
En Oracle, hay una pseudocolumna ora_rowscn para el número de cambio del sistema del registro. Puede utilizar esta columna para el mismo propósito. A continuación, aparece un ejemplo de la entidad que utiliza el campo ora_rowscn como el campo de indicación de fecha y hora de actualización de la base de datos basada en tiempo:
@Entity(name = "USER_ORA")
@Table(name = "USER1")
public class User_ORA implements Serializable {
private static final long serialVersionUID = 1L;
public User_ORA() {
}
public User_ORA(int id, String firstName, String lastName) {
this.id = id;
this.firstName = firstName;
this.lastName = lastName;
}
@Id
@Column(name = "ID")
public int id;
@Column(name = "FIRSTNAME")
public String firstName;
@Column(name = "LASTNAME")
public String lastName;
@com.ibm.websphere.objectgrid.jpa.dbupdate.annotation.Timestamp
@Column(name = "ora_rowscn", updatable = false, insertable = false)
public long rowChgTs;
}
Para otros tipos de bases de datos, puede crear una columna de tabla para realizar un seguimiento de los cambios. Los valores de la columna debe gestionarlos manualmente la aplicación que actualiza la tabla.
Tome una base de datos Apache Derby como un ejemplo: puede crear una columna "ROWCHGTS" para rastrear los números de cambio. Además, se realiza un seguimiento del último número de cambio en esta tabla. Cada vez que se inserta o actualiza un registro, se aumenta el número de cambio más reciente en la tabla, y el valor de la columna ROWCHGTS para el registro se actualiza con este número incrementado.
@Entity(name = "USER_DER")
@Table(name = "USER1")
public class User_DER implements Serializable {
private static final long serialVersionUID = 1L;
public User_DER() {
}
public User_DER(int id, String firstName, String lastName) {
this.id = id;
this.firstName = firstName;
this.lastName = lastName;
}
@Id
@Column(name = "ID")
public int id;
@Column(name = "FIRSTNAME")
public String firstName;
@Column(name = "LASTNAME")
public String lastName;
@com.ibm.websphere.objectgrid.jpa.dbupdate.annotation.Timestamp
@Column(name = "ROWCHGTS", updatable = true, insertable = true)
public long rowChgTs;
}