L'interface ObjectTransformer envoie les rappels à l'application pour permettre l'implémentation personnalisée d'opérations courantes et coûteuses telles de la sérialisation ou la copie complète sur des objets.
L'interface ObjectTransformer a été remplacée par les plug-in DataSerializer que vous pouvez utiliser pour stocker efficacement les données arbitraires dans WebSphere eXtreme Scale pour que les API de produit existantes puissent interagir efficacement avec vos données.
Présentation
Des copies des valeurs sont toujours créées, sauf lorsque le mode NO_COPY est utilisé. Le mécanisme de copie par défaut utilisé dans eXtreme Scale est la sérialisation,
qui est connue pour être une opération coûteuse. L'interface ObjectTransformer est utilisée dans cette situation. L'interface ObjectTransformer envoie des rappels à l'application pour permettre l'implémentation personnalisée d'opérations courantes et coûteuses, telles que la sérialisation d'objets et la copie complète sur des objets.
Une application permet l'implémentation de l'interface
ObjectTransformer sur une mappe.
eXtreme Scale délègue ensuite aux méthodes de cet objet et dépend de l'application pour fournir une version optimisée de chaque méthode de l'interface. Voici l'interface
ObjectTransformer :
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);
}
Vous pouvez associer l'interface
ObjectTransformer à une BackingMap en utilisant le code de l'exemple suivant :
ObjectGrid g = ...;
BackingMap bm = g.defineMap("PERSON");
MyObjectTransformer ot = new MyObjectTransformer();
bm.setObjectTransformer(ot);
Ajustement des opérations de copie complète
Après qu'une application a reçu un objet d'une ObjectMap, eXtreme Scale effectue une copie complète de la valeur de l'objet afin de s'assurer que la copie de la mappe BaseMap maintient l'intégrité des données. L'application peut ensuite modifier la valeur de l'objet en toute sécurité. Lorsque la transaction est validée, la copie de la valeur de l'objet dans la mappe BaseMap est mise à jour avec la nouvelle valeur modifiée et l'application arrête d'utiliser la valeur. Vous pouvez copier de nouveau l'objet au moment de la validation afin de disposer d'une copie privée. Cependant, dans ce cas, le coût des performances de cette action est compensé par le fait que le programmeur de l'application ne peut pas utiliser cette valeur une fois la transaction validée. L'ObjectTransformer par défaut tente d'utiliser soit un clone soit une paire sérialisation-inflation pour générer une copie. La paire sérialisation-inflation est le pire scénario imaginable en termes de performances. Si le profilage révèle que la sérialisation et l'inflation présentent un problème pour votre application, écrivez une méthode de clonage appropriée pour créer une copie complète. Si vous ne pouvez pas modifier la classe, créez un plug-in ObjectTransformer personnalisé et implémentez des méthodes copyValue et copyKey plus efficaces.