Ajustando Operações de Cópia com a Interface ObjectTransformer

A interface ObjectTransformer utiliza retornos de chamada para o aplicativo para fornecer implementações customizadas de operações comuns e caras, como serialização de objeto e cópias detalhadas em objetos.

Deprecated feature A interface ObjectTransformer foi substituída pelos plug-ins DataSerializer, que podem ser usados para armazenar dados arbitrários eficientemente no WebSphere eXtreme Scale para que as APIs do produto existentes possam ser interagir de modo eficiente com seus dados.

Visão Geral

As cópias de valores são sempre feitas, exceto quando o modo NO_COPY é usado. O mecanismo de cópia padrão que é empregado no eXtreme Scale é a serialização, que é conhecida como uma operação cara. A interface ObjectTransformer é usada nesta situação. A interface ObjectTransformer usa retornos de chamadas para o aplicativo fornecer uma implementação customizada de operações comuns e caras, como serialização de objetos e cópias detalhadas em objetos.

Um aplicativo pode oferecer uma implementação da interface ObjectTransformer para um mapa, e o eXtreme Scale então delega os métodos neste objeto e confia no aplicativo para oferecer uma versão otimizada de cada método na interface. A interface ObjectTransformer é a seguinte:
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);
}
É possível associar uma interface ObjectTransformer com um BackingMap usando o seguinte código de exemplo:
ObjectGrid g = ...;
BackingMap bm = g.defineMap("PERSON");
MyObjectTransformer ot = new MyObjectTransformer();
bm.setObjectTransformer(ot);

Ajustar Operações de Cópia Detalhada

Depois que um aplicativo receber um objeto de um ObjectMap, o eXtreme Scale executará uma cópia detalhada no valor do objeto para assegurar que a cópia no mapa BaseMap mantenha a integridade dos dados. O aplicativo pode então modificar o valor de objeto de maneira segura. Quando a transação for confirmada, a cópia do valor de objeto no mapa BaseMap será atualizada para o novo valor modificado e o aplicativo parará de utilizar o valor desse ponto em diante. Você poderia ter copiado o objeto novamente na fase de confirmação para fazer uma cópia privada. Entretanto, nesse caso, o custo do desempenho desta ação foi equilibrado ao solicitar que o programador do aplicativo não utilize o valor após a confirmação da transação. O ObjectTransformer padrão tenta utilizar um clone ou um par de serialize e inflate para gerar uma cópia. O par de serialize e inflate é o cenário de desempenho de pior caso. Se o traçado de perfil indicar que serialize e inflate são um problema para seu aplicativo, grave um método de clone apropriado para criar uma cópia detalhada. Se você não conseguir alterar a classe, crie um plug-in ObjectTransformer customizado e implemente mais métodos copyValue e copyKey eficientes.