Con el plug-in ObjectTransformer puede serializar, deserializar y copiar objetos en la memoria caché para mejorar el rendimiento.
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.
Si observa problemas de rendimiento con el uso del procesador, añada un plug-in ObjectTransformer a cada correlación. Si no proporciona un plug-in ObjectTransformer, se emplea entre un 60 y un 70 por ciento del tiempo total de procesador en serializar y copiar entradas.
Si no se proporciona ningún plug-in ObjectTransformer, debe poder serializar las claves y los valores porque ObjectGrid utiliza una secuencia de serialización y deserialización para copiar los objetos. Éste es un método costoso, por lo que conviene utilizar un plug-in ObjectTransformer si el rendimiento es crítico. La operación de copia se produce cuando una aplicación busca un objeto en una transacción por primera vez. Puede evitar esta copia si establece la modalidad de copia de la correlación en NO_COPY o puede reducir la copia si establece la modalidad de copia en COPY_ON_READ. Optimice la operación de copia cuando sea necesario para la aplicación; para ello, proporcione un método de copia personalizada en este plug-in. Dicho plug-in puede reducir la sobrecarga de copia del 65 al 70 por ciento a 2/3 del porcentaje del tiempo total del procesador.
Las implementaciones predeterminadas del método copyKey y copyValue intentan, en primer lugar, utilizar el método clone, si se ha proporcionado el método. Si no se ha proporcionado ninguna implementación del método clone, la implementación toma el valor predeterminado de la serialización.
La serialización de objetos también se utiliza directamente cuando eXtreme Scale se ejecuta en la modalidad distribuida. El LogSequence utiliza el plug-in ObjectTransformer para ayudar a serializar claves y valores antes de transmitir los cambios a sus iguales en ObjectGrid. Debe actuar con detenimiento cuando proporcione un método de serialización personalizado, en lugar de utilizar la serialización del Java Developer Kit incorporada. La creación de versiones de objetos es un asunto complejo y podría tener problemas con la compatibilidad de las versiones si no se asegura de que sus métodos personalizados se han diseñado para la creación de versiones.
Un objeto ObjectTransformer debe implementar la interfaz ObjectTransformer y seguir las convenciones comunes de plug-in de ObjectGrid.
Se utilizan dos enfoques, configuración mediante programa y configuración de XML, para añadir un objeto ObjectTransformer a la configuración de BackingMap tal como se indica a continuación.
ObjectGridManager objectGridManager = ObjectGridManagerFactory.getObjectGridManager();
ObjectGrid myGrid = objectGridManager.createObjectGrid("myGrid", false);
BackingMap backingMap = myGrid.getMap("myMap");
MyObjectTransformer myObjectTransformer = new MyObjectTransformer();
backingMap.setObjectTransformer(myObjectTransformer);
<?xml version="1.0" encoding="UTF-8"?>
<objectGridConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://ibm.com/ws/objectgrid/config ../objectGrid.xsd"
xmlns="http://ibm.com/ws/objectgrid/config">
<objectGrids>
<objectGrid name="myGrid">
<backingMap name="myMap" pluginCollectionRef="myMap" />
</objectGrid>
</objectGrids>
<backingMapPluginCollections>
<backingMapPluginCollection id="myMap">
<bean id="ObjectTransformer" className="com.company.org.MyObjectTransformer" />
</backingMapPluginCollection>
</backingMapPluginCollections>
</objectGridConfig>
/**
* Objeto Stock para ObjectGrid
*
*
*/
public class Stock implements Cloneable {
String ticket;
double price;
String company;
String description;
int serialNumber;
long lastTransactionTime;
/**
* @return Devuelve la descripción.
*/
public String getDescription() {
return description;
}
/**
* @param description La descripción que se debe establecer.
*/
public void setDescription(String description) {
this.description = description;
}
/**
* @return Devuelve lastTransactionTime.
*/
public long getLastTransactionTime() {
return lastTransactionTime;
}
/**
* @param lastTransactionTime El lastTransactionTime a establecer.
*/
public void setLastTransactionTime(long lastTransactionTime) {
this.lastTransactionTime = lastTransactionTime;
}
/**
* @return Devuelve el precio.
*/
public double getPrice() {
return price;
}
/**
* @param price El precio a establecer.
*/
public void setPrice(double price) {
this.price = price;
}
/**
* @return Devuelve serialNumber.
*/
public int getSerialNumber() {
return serialNumber;
}
/**
* @param serialNumber El serialNumber a establecer.
*/
public void setSerialNumber(int serialNumber) {
this.serialNumber = serialNumber;
}
/**
* @return Devuelve el ticket.
*/
public String getTicket() {
return ticket;
}
/**
* @param ticket El ticket a establecer.
*/
public void setTicket(String ticket) {
this.ticket = ticket;
}
/**
* @return Devuelve la empresa.
*/
public String getCompany() {
return company;
}
/**
* @param company La empresa a establecer.
*/
public void setCompany(String company) {
this.company = company;
}
//clone
public Object clone() throws CloneNotSupportedException
{
return super.clone();
}
}
Puede escribir una clase de ObjectTransformer para la clase Stock:
/**
* Implementación personalizada de ObjectGrid ObjectTransformer para el objeto stock
*
*/
public class MyStockObjectTransformer implements ObjectTransformer {
/* (no Javadoc)
* @see
* com.ibm.websphere.objectgrid.plugins.ObjectTransformer#serializeKey
* (java.lang.Object,
* java.io.ObjectOutputStream)
*/
public void serializeKey(Object key, ObjectOutputStream stream) throws IOException {
String ticket= (String) key;
stream.writeUTF(ticket);
}
/* (no Javadoc)
* @see com.ibm.websphere.objectgrid.plugins.
ObjectTransformer#serializeValue(java.lang.Object,
java.io.ObjectOutputStream)
*/
public void serializeValue(Object value, ObjectOutputStream stream) throws IOException {
Stock stock= (Stock) value;
stream.writeUTF(stock.getTicket());
stream.writeUTF(stock.getCompany());
stream.writeUTF(stock.getDescription());
stream.writeDouble(stock.getPrice());
stream.writeLong(stock.getLastTransactionTime());
stream.writeInt(stock.getSerialNumber());
}
/* (no Javadoc)
* @see com.ibm.websphere.objectgrid.plugins.
ObjectTransformer#inflateKey(java.io.ObjectInputStream)
*/
public Object inflateKey(ObjectInputStream stream) throws IOException, ClassNotFoundException {
String ticket=stream.readUTF();
return ticket;
}
/* (no Javadoc)
* @see com.ibm.websphere.objectgrid.plugins.
ObjectTransformer#inflateValue(java.io.ObjectInputStream)
*/
public Object inflateValue(ObjectInputStream stream) throws IOException, ClassNotFoundException {
Stock stock=new Stock();
stock.setTicket(stream.readUTF());
stock.setCompany(stream.readUTF());
stock.setDescription(stream.readUTF());
stock.setPrice(stream.readDouble());
stock.setLastTransactionTime(stream.readLong());
stock.setSerialNumber(stream.readInt());
return stock;
}
/* (no Javadoc)
* @see com.ibm.websphere.objectgrid.plugins.
ObjectTransformer#copyValue(java.lang.Object)
*/
public Object copyValue(Object value) {
Stock stock = (Stock) value;
try {
return stock.clone();
}
catch (CloneNotSupportedException e)
{
// mostrar mensaje de excepción }
}
/* (no Javadoc)
* @see com.ibm.websphere.objectgrid.plugins.
ObjectTransformer#copyKey(java.lang.Object)
*/
public Object copyKey(Object key) {
String ticket=(String) key;
String ticketCopy= new String (ticket);
return ticketCopy;
}
}
ObjectGridManager ogf=ObjectGridManagerFactory.getObjectGridManager();
ObjectGrid og = ogf.getObjectGrid("NYSE");
BackingMap bm = og.defineMap("NYSEStocks");
MyStockObjectTransformer ot = new MyStockObjectTransformer();
bm.setObjectTransformer(ot);