BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース MicroStream 7.0がCDIをサポート

MicroStream 7.0がCDIをサポート

ブックマーク

原文(投稿日:2022/05/17)へのリンク

MicroStreamはJavaオブジェクトとドキュメントを格納するための永続化エンジンである。これにより、パフォーマンスとリソース効率の高い方法で、オブジェクトグラフを部分的かつオンデマンドでロード、更新、永続化することができる。MicroStream 7では、Contexts and Dependency Injection(CDI)との統合、スタンドアロン機能としてのシリアライザロジック、SLF4Jによるロギングサポートが提供される。

MicroStreamでは、AWS S3、Hazelcast、Kafka、MongoDB、Redis、そして、他にもSQLデータベースといった、さまざまなストレージオプションがサポートされている。一部のストレージオプションは、エンタープライズサブスクリプションでのみ使用できる。リファレンスマニュアルの入門パートには、プレーンJavaでMicroStreamを使う方法、またHelidonSpring Bootに統合する方法が記載されている。

このバージョンでは、MicroStream CDI拡張機能が導入されている。CDI 2.0か、それ以降のバージョンの実装が必要である。microstream-integrations-cdiアーティファクトを通して利用できる。この拡張機能は、既存のSpring BootHelidonの統合に相当するものである。MicroProfile Config仕様は、プロパティから設定を読み取るために使われ、MicroProfileランタイムをサポートする。あるいはJava SE CDIをSmallRye ConfigなどのMicroProfile Config実装と組み合わせるために使われる。

アプリケーションには、MicroStream実装に接続する@Storageアノテーションが付けられた1つのクラスが必要である。

@Storage
public class CarStorage
{
    private final List<Car> carList = new ArrayList<>();

    public List<Car> findAll() {
        return this.carList;
    }

    public void removeAll() {
        this.carList.clear();
    }

    public void add(final Car car) {
        this.carList.add(car);
    }
}

@Storageアノテーションが付けられたクラスは、ApplicationScoped Beanに挿入される。データ変更メソッドには@Storeアノテーションを付ける必要がある。

@ApplicationScoped
public class CarStorageService {
    @Inject
    private CarStorage carStorage;

    @Store
    public void addCar(Car car) {
        carStorage.add(car);
    }

    @Store
    public void deleteCars() {
        carStorage.removeAll();
    }

    public List<Car> findCars() {
        return carStorage.findAll();
    }
}

MicroStreamのCDI統合は、キャッシュデータの保存にも使うことができる。

@Inject
@StorageCache
private Cache<String, String> myCustomCache;

MicroStreamではカスタムの高性能シリアライザエンジンが使われる。これは、APIを介して公開されており、microstream-persistence-binaryの依存関係を追加することでスタンドアロンで使用できる。バイト配列をデシリアライズした後、各クラスにユニークな番号が同じであることを確認するために、エンティティタイプを登録する必要がある。

CarPart porscheCarPart = new CarPart("wheel", 23.23);
Car porsche = new Car("Porsche", "911", List.of(porscheCarPart));

final SerializerFoundation<?> foundation = SerializerFoundation.New()
    .registerEntityTypes(Car.class);
final Serializer<byte[]> serializer = Serializer.Bytes(foundation);
byte[] data = serializer.serialize(porsche);
Car deserializedCar = serializer.deserialize(data);
assertEquals("911", deserializedCar.getModel());
assertEquals(23.23, deserializedCar.getCarPartList().get(0).getPrice());

新しいロギング機能では、ロギングファサードとしてSLF4Jが使われる。ロギングフレームワークの依存関係を追加することにより、Logbackなどのロギングフレームワークと一緒に使うことができる。

Androidの日付と時刻のインスタンス用のカスタムハンドラは、新規のmicrostream-persistence-binary-androidアーティファクトを通して利用できる。これは、最近のAndroidバージョンのリフレクションの課題を解決するためのものである。

メモリ使用量とメモリの解放が最適化され、いくつかのバグが解決された。

2019年に最初に導入されたMicroStreamは、MicroStream 5.0のリリースでオープンソースになった。この最新バージョンは、MicroStream 6との下位互換性がある。コミュニティユーザ向けに12か月間無料でサポートされる。次のメジャーリリースは2023年4月に予定されている。計画されている新機能の1つは、いくつかのMicroStreamインスタンス向けのクラスタサポートである。全変更一覧の詳細については、変更ログを参照してください。

作者について

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

BT