ObjectTransformer プラグインを使用すると、パフォーマンス向上のために、キャッシュ内のオブジェクトをシリアライズ、デシリアライズ、およびコピーすることができます。
ObjectTransformer インターフェースは、DataSerializer プラグインで置換されました。これを使用して、既存の製品 API がデータと効率的に対話できるように WebSphere® eXtreme
Scale 内の任意のデータを効率的に格納できます。
プロセッサーの使用に関するパフォーマンス上の問題がある場合は、各マップに ObjectTransformer プラグインを追加します。 ObjectTransformer プラグインを使用しない場合、合計プロセッサー時間の 60 から 70 パーセントまではエントリーのシリアライズとコピーに費やされます。
ObjectTransformer プラグインが提供されない場合、 ObjectGrid はシリアライズおよびデシリアライズのシーケンスを使用して オブジェクトをコピーするので、ユーザーがキーと値のシリアライズを行う必要があります。 この方法には費用がかかるので、パフォーマンスが重大である場合には ObjectTransformer プラグインを使用してください。 アプリケーションが、トランザクションのオブジェクトを 最初に検索する際に、コピーが行われます。 このコピーは、マップのコピー・モードを NO_COPY に設定すると行われません。あるいは、コピー・モードを COPY_ON_READ に設定すると、コピー数を軽減できます。アプリケーションの必要に応じて、 このプラグインにカスタム・コピー・メソッドを提供することによって、 コピー操作を最適化します。 このようなプラグインにより、コピー・オーバーヘッドを合計プロセッサー時間の 65-70 パラメーターから 2/3 パーセントに軽減できます。
デフォルトの copyKey および copyValue メソッド実装では、最初に clone メソッド (このメソッドが提供されている場合) を使用しようとします。 clone メソッド実装が提供されていない場合は、実装のデフォルトはシリアライゼーションになります。
eXtreme Scale が分散モードで実行されているときは、オブジェクト・シリアライゼーションも直接使用されます。 LogSequence は、変更内容を ObjectGrid のピアに送信する前に、ObjectTransformer プラグインを使用して、キーおよび値のシリアライズを支援します。 組み込み Java Developer Kit シリアライゼーションを使用するのではなく、シリアライゼーションのカスタム・メソッドを提供するときは、注意が必要です。 オブジェクトのバージョン管理は複雑な問題であり、 カスタム・メソッドがバージョン管理用に設計されていることが確認できない場合、 バージョンの互換性に問題が発生することがあります。
ObjectTransformer は、ObjectTransformer インターフェースを実装し、共通 ObjectGrid プラグイン規則に準拠している必要があります。
ObjectTransformer オブジェクトを BackingMap 構成に追加する場合、以下のように、プログラマチック構成と XML 構成の 2 つの方法が使用されます。
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>
/**
* Stock object for ObjectGrid demo
*
*
*/
public class Stock implements Cloneable {
String ticket;
double price;
String company;
String description;
int serialNumber;
long lastTransactionTime;
/**
* @return Returns the description.
*/
public String getDescription() {
return description;
}
/**
* @param description The description to set.
*/
public void setDescription(String description) {
this.description = description;
}
/**
* @return Returns the lastTransactionTime.
*/
public long getLastTransactionTime() {
return lastTransactionTime;
}
/**
* @param lastTransactionTime The lastTransactionTime to set.
*/
public void setLastTransactionTime(long lastTransactionTime) {
this.lastTransactionTime = lastTransactionTime;
}
/**
* @return Returns the price.
*/
public double getPrice() {
return price;
}
/**
* @param price The price to set.
*/
public void setPrice(double price) {
this.price = price;
}
/**
* @return Returns the serialNumber.
*/
public int getSerialNumber() {
return serialNumber;
}
/**
* @param serialNumber The serialNumber to set.
*/
public void setSerialNumber(int serialNumber) {
this.serialNumber = serialNumber;
}
/**
* @return Returns the ticket.
*/
public String getTicket() {
return ticket;
}
/**
* @param ticket The ticket to set.
*/
public void setTicket(String ticket) {
this.ticket = ticket;
}
/**
* @return Returns the company.
*/
public String getCompany() {
return company;
}
/**
* @param company The company to set.
*/
public void setCompany(String company) {
this.company = company;
}
//clone
public Object clone() throws CloneNotSupportedException
{
return super.clone();
}
}
Stock クラス用に、カスタム・オブジェクト変換プログラム・クラスを作成できます。
/**
* Custom implementation of ObjectGrid ObjectTransformer for stock object
*
*/
public class MyStockObjectTransformer implements ObjectTransformer {
/* (non−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);
}
/* (non−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());
}
/* (non−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;
}
/* (non−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;
}
/* (non−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)
{
// display exception message }
}
/* (non−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);