La interfaz ObjectTransformer utiliza devoluciones de llamadas a la aplicación para proporcionar implementaciones personalizadas de operaciones comunes y costosas, como la serialización y la copia exacta de objetos.
La interfaz ObjectTransformer ha sido sustituida por los plug-ins DataSerializer, que puede utilizar para almacenar eficientemente datos arbitrarios en WebSphere eXtreme
Scale de modo que las API existentes del producto puedan interactuar eficazmente con los datos.
Visión general
Siempre se realizan copias de los valores excepto cuando se utiliza la modalidad NO_COPY. El mecanismo de copia predeterminado que se emplea en eXtreme Scale es la serialización, que se sabe que es una operación costosa. La interfaz ObjectTransformer se utiliza en esta situación. La interfaz ObjectTransformer utiliza las devoluciones de llamada a la aplicación para proporcionar una implementación personalizada de las operaciones comunes y costosas como, por ejemplo, la serialización de objeto y la copia exacta de objetos.
Una aplicación puede proporcionar una implementación de la interfaz
ObjectTransformer en una correlación y, a continuación,
eXtreme Scale delega en los métodos de este objeto y se basa en la aplicación para proporcionar una versión optimizada de cada método de la interfaz. La interfaz
ObjectTransformer actúa del modo siguiente:
public interface ObjectTransformer {
void serializeKey(Object key, ObjectOutputStream stream) throws IOException;
void serializeValue(Object value, ObjectOutputStream stream) throws IOException;
Object inflateKey(ObjectInputStream stream) throws IOException, ClassNotFoundException;
Object inflateValue(ObjectInputStream stream) throws IOException, ClassNotFoundException;
Object copyValue(Object value);
Object copyKey(Object key);
}
Puede asociar una interfaz
ObjectTransformer con una BackingMap utilizando el siguiente código de ejemplo:
ObjectGrid g = ...;
BackingMap bm = g.defineMap("PERSON");
MyObjectTransformer ot = new MyObjectTransformer();
bm.setObjectTransformer(ot);
Ajuste de operaciones de copia exacta
Después de que una aplicación reciba un objeto de un ObjectMap, eXtreme Scale realiza una copia exacta del valor de objeto para garantizar que la copia de la correlación BaseMap mantiene la integridad de datos. La aplicación puede entonces modificar el valor de objeto sin riesgos. Cuando se confirma la transacción, se actualiza la copia del valor de objeto de la correlación BaseMap al nuevo valor modificado y se detiene la aplicación, que utilizará el valor de ahí en adelante. Podría haber vuelto a copiar el objeto en la fase de confirmación para realizar una copia privada. Sin embargo, en este caso, el coste del rendimiento de esta acción se ha compensado indicando al programador de aplicaciones que no utilice el valor después de que se confirme la transacción. El ObjectTransformer predeterminado intenta utilizar un clon o un par de métodos serialize e inflate para generar una copia. El par de métodos serialize e inflate es el peor caso de rendimiento. Si la creación de perfiles revela que usar los métodos serialize e inflate es un problema para la aplicación, escriba un método clone apropiado para crear una copia exacta. Si no puede alterar la clase, cree un plug-in ObjectTransformer personalizado e implemente métodos
copyValue y copyKey más eficaces.