第4章 データ変換


Data Grid はトランスコーダーを使用して、メディアタイプで識別されるさまざまなエンコーディング間でデータを変換します。

4.1. Hot Rod DataFormat API

Hot Rod エンドポイントを使用したリモートキャッシュでの読み取り操作および書き込み操作は、デフォルトでクライアントマーシャラーを使用します。Hot Rod は、異なるメディアタイプエンコーディングやマーシャラーを使用してキャッシュ操作を実行するのに使用できる Java クライアントの DataFormat API を提供します。

キーと値の異なるマーシャラー

実行時にキーと値のマーシャラーを上書きできます。

たとえば、Hot Rod クライアントのすべてのシリアル化をバイパスし、リモートキャッシュに保存されている byte[] 配列を読み取るには、以下を実行します。

// Existing RemoteCache instance
RemoteCache<String, Pojo> remoteCache = ...

// IdentityMarshaller is a no-op marshaller
DataFormat rawKeyAndValues =
DataFormat.builder()
          .keyMarshaller(IdentityMarshaller.INSTANCE)
          .valueMarshaller(IdentityMarshaller.INSTANCE)
          .build();

// Creates a new instance of RemoteCache with the supplied DataFormat
RemoteCache<byte[], byte[]> rawResultsCache =
remoteCache.withDataFormat(rawKeyAndValues);
重要

keyMarshaller() および keyType() メソッドでキーに異なるマーシャラーとデータ形式を使用すると、クライアントインテリジェンスルーティングメカニズムに干渉する可能性があり、Data Grid クラスター内の追加のネットワークホップが発生する可能性があります。パフォーマンスが重要な場合は、クライアントとサーバーで鍵に同じエンコーディングを使用する必要があります。

異なるエンコーディングでのデータの読み取り

以下のように、org.infinispan.commons.dataconversion.MediaType で指定された異なるエンコーディングでデータを要求および送信します。

// Existing remote cache using ProtostreamMarshaller
RemoteCache<String, Pojo> protobufCache = ...

// Request values returned as JSON
// Use the UTF8StringMarshaller to convert UTF-8 to String
DataFormat jsonString =
DataFormat.builder()
          .valueType(MediaType.APPLICATION_JSON)
          .valueMarshaller(new UTF8StringMarshaller())
          .build();
RemoteCache<byte[], byte[]> rawResultsCache =
protobufCache.withDataFormat(jsonString);

カスタム値マーシャラーの使用

org.codehaus.jackson.JsonNode オブジェクトとして値を返す以下の例のように、値にカスタムマーシャラーを使用できます。

この例では、Data Grid Server はデータ変換を処理し、指定したメディアタイプに対応していない場合は例外を出力します。

DataFormat jsonNode =
DataFormat.builder()
          .valueType(MediaType.APPLICATION_JSON)
          .valueMarshaller(new CustomJacksonMarshaller()
          .build();

RemoteCache<String, JsonNode> jsonNodeCache =
remoteCache.withDataFormat(jsonNode);

XML で値を返す

以下のコードスニペットは、値を XML として返します。

Object xmlValue = remoteCache
      .withDataFormat(DataFormat.builder()
      .valueType(MediaType.APPLICATION_XML)
      .valueMarshaller(new UTF8StringMarshaller())
      .build())
      .get(key);

たとえば、前述の get(key) 呼び出しは、以下のような値を返します。

<?xml version="1.0" ?><string>Hello!</string>
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.