The English version of quarkus.io is the official project site. Translated sites are community supported on a best-effort basis.
このページを編集

Infinispanクライアントエクステンションリファレンスガイド

Infinispanは、分散型のインメモリキー/バリューストアで、Quarkusアプリケーションに高度に設定可能で独立して拡張可能なデータレイヤーを提供します。このエクステンションでは、Quarkus上で動作するアプリケーションとリモートのInfinispanクラスターを接続するクライアント機能が提供されます。Infinispanを使い始めるには、以下をお勧めします:

  1. 入門チュートリアル に沿う(5分)。

  2. リモートキャッシュ シンプルコードチュートリアル を実行する。

詳しくは、Infinispanのドキュメント をご覧ください。

インストール

Quarkusプロジェクトのベースディレクトリで以下のコマンドを実行し、 infinispan-client エクステンションを追加します:

コマンドラインインタフェース
quarkus extension add infinispan-client
Maven
./mvnw quarkus:add-extension -Dextensions='infinispan-client'
Gradle
./gradlew addExtension --extensions='infinispan-client'

このコマンドは、ビルドファイルに以下の依存関係を追加します:

pom.xml
<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-infinispan-client</artifactId>
</dependency>
build.gradle
implementation 'io.quarkus:quarkus-infinispan-client'
annotationProcessor 'org.infinispan.protostream:protostream-processor:{infinispan-protostream-version}' (1)
1 アノテーションベースのシリアライゼーションでファイル生成を有効にするため、Gradleビルドで必須です。

Infinispanへの接続

サーバーの実行

実行中のInfinispan サーバーのインスタンスが少なくとも1つ必要です。

開発モード

Dockerインスタンスを実行している場合は、 Infinispan Dev Services を使用して設定なしで接続できます。

Dockerを使用して自分でサーバーを実行したい場合は、Infinispan サーバーを実行するための5分間の Infinispan入門 チュートリアルをチェックしてください。

また、${infinispan.version} サーバー ベアメタルディストリビューションを ダウンロード することが出来、ディストリビューションフォルダで以下のコマンドを実行します。

$ ./bin/server.sh

Infinispan サーバーは デフォルトで認証とセキュリティ 認可を有効にしている ので、権限を持つユーザーを作成する必要があります。

  • Infinispan サーバー イメージ を実行する場合は、 USER="admin"PASS="password" パラメータを渡します。

  • ベアメタルディストリビューション を実行する場合は、次のようにコマンドラインインターフェイス(CLI)を使用します:

    $ ./bin/cli.sh user create admin -p password
プロダクションモード

Kubernetesでは、 Infinispan Operator をお勧めします。さらに、 Cross Site Replication のチュートリアルをご覧ください。ここでは、docker compose(ローカル開発用)とOperatorを使用して、2つの別々のInfinispanクラスターを実行する方法を学びます。

接続の設定

Infinispan サーバーを実行している場合、 src/main/resources ディレクトリの application.properties ファイルに接続するための以下のプロパティを追加します。

quarkus.infinispan-client.hosts=localhost:11222 (1)

quarkus.infinispan-client.username=admin (2)
quarkus.infinispan-client.password=password (3)
1 Infinispanサーバーのアドレスリストをカンマ区切りで設定します。
2 認証ユーザー名を設定します。
3 認証パスワードを設定します。

または、単一の接続プロパティを指定することで、uri接続を使用することもできます。

quarkus.infinispan-client.uri=hotrod://admin:password@localhost:11222 (1)
1 InfinispanのURI接続を設定します。以下のプロパティは無視されます: hosts、username、password。

Infinispan Dev Services を使用してサーバーを実行し、設定なしで接続します。

クライアントインテリジェンス

Infinispanクライアントは、Infinispan サーバークラスタに効率的にリクエストを送信するためにインテリジェンスメカニズムを使用します。デフォルトでは、 HASH_DISTRIBUTION_AWARE インテリジェンスメカニズムが有効になっています。しかし、ローカルでDocker for Macを使用すると、接続性の問題が発生する場合があります。この場合、クライアントのインテリジェンスを BASICに 設定します。

詳細は Infinispanのドキュメント をご覧ください。

quarkus.infinispan-client.client-intelligence=BASIC (1)
1 Docker for Macの回避策。

本番環境ではデフォルトで BASICを 使用しないでください。パフォーマンスに影響が出る可能性があります。

クロスサイト・レプリケーションでのバックアップ・クラスタの構成

高可用性の本番環境では、複数のInfinispanクラスタが世界中のさまざまなデータセンターに分散しているのが一般的です。Infinispanはこれらのクラスタに接続し、クラスタ間のバックアップを設定する機能を提供します。これにより、単一の接続を使用した自動および手動の方法によるクラスタ間のシームレスな切り替えが可能になります。これを実現するには、バックアップクラスタに直接接続するようにクライアントを設定する必要があります。

quarkus.infinispan-client.hosts=host1:11222,host2:3122 (1)
quarkus.infinispan-client.username=admin
quarkus.infinispan-client.password=password
quarkus.infinispan-client.backup-cluster.nyc-site.hosts=nyc1:11222,nyc2:21222,nyc3:31222 (2)
quarkus.infinispan-client.backup-cluster.nyc-site.client-intelligence=BASIC (3)
quarkus.infinispan-client.backup-cluster.lon-site.hosts=lon1:11222,lon2:21222,lon3:31222 (4)
1 Infinispanサーバーのアドレスリストをカンマ区切りで設定します。これはデフォルトのクラスタです。
2 提供されたアドレスリストでバックアップサイト’nyc-site’を設定します。
3 提供されたクライアントインテリジェンスでバックアップサイト’nyc-site’を設定します。
4 提供されたアドレスリストで追加のバックアップサイト’lon-site’を設定します。

提供された設定に基づき、デフォルトクラスタが利用できなくなった場合、クライアントはアクセス可能なバックアップクラスタの1つにシームレスに移行します。さらに、クライアントを別のクラスタに手動で切り替えるオプションもあります:

@ApplicationScoped
public class InfinispanExample {
    @Inject
    RemoteCacheManager cacheManager;

    public void doSomething() {
       cacheManager.switchToCluster("nyc-site"); (1)
       cacheManager.switchToCluster("lon-site"); (2)
       cacheManager.switchToDefaultCluster(); (3)
    }
}
1 クライアントは’nyc-site’に接続します。
2 クライアントは 'lon-site' に接続します。
3 クライアントはデフォルトのサイトに接続します。

デフォルトでは、Protobufスキーマはバックアップクラスタにもアップロードされます。ただし、スキーマが本番環境で使用される際に時間の経過とともに進化する可能性があるため、登録を手動で処理する必要がある場合があります。このため、 quarkus.infinispan-client.backup-cluster.YOUR_SITE_NAME.use-schema-registrationfalse に設定することで、各バックアップサイトでこの処理が発生しないようにすることができます。 use-schema-registration グローバルプロパティが false の場合、このプロパティの値は無視されます。

クロスサイトレプリケーションはInfinispanが提供する強力な機能で、さまざまなクラウドプロバイダに跨った地理的に異なるデータセンターにあるクラスタ間のデータバックアップを容易にします。詳細は Infinispanのドキュメント をご覧ください。

デフォルト接続と名前付き接続

このエクステンションでは、 デフォルトの Infinispanクライアント接続と 名前付き 接続を設定できます。名前付き接続は、複数の Infinispan クラスタに接続するために不可欠です。

デフォルトの接続は、上記のように quarkus.infinispan-client.* プロパティを使用して設定します。デフォルトの接続を使用する場合、 プレーンな @Inject を使用してインジェクトすることができます:

名前付き クライアントは、 quarkus.infinispan-client.<name>.* プロパティを使用して設定します:

quarkus.infinispan-client.site-lon.hosts=localhost:11222
quarkus.infinispan-client.site-lon.username=admin
quarkus.infinispan-client.site-lon.password=password

quarkus.infinispan-client.site-nyc.hosts=localhost:31222
quarkus.infinispan-client.site-nyc.username=admin
quarkus.infinispan-client.site-nyc.password=password

依存性注入では @InfinispanClientName という修飾子を使います:

@ApplicationScoped
public class InfinispanExample {
    @Inject
    @InfinispanClientName("site-lon")
    RemoteCacheManager rcmLon;

    @Inject
    @InfinispanClientName("site-nyc")
    RemoteCacheManager rmcNyc;
}

Infinispan ヘルス・チェック

quarkus-smallrye-health エクステンションを使用している場合、Infinispan クライアントエクステンションは、接続を検証するためのReadinessヘルスチェックを自動的に追加します。

アプリケーションの /q/health/ready エンドポイントにアクセスすると、サーバー接続と利用可能なキャッシュの情報が表示されます。

この動作は、プロパティ quarkus.infinispan-client.health.enabled で無効にすることができます。

OpenTelemetryでトレース

InfinispanはOpenTelemetryによるサーバーのインスツルメンテーションをサポートしています。 quarkus-opentelemetry エクステンションを追加することで、Infinispan クライアントからサーバーにトレースが伝搬されます。この動作は、プロパティ quarkus.infinispan-client.tracing.propagation.enabled で無効にすることが出来ます。

クライアントからキャッシュを作成

クライアントからキャッシュにアクセスする際、Infinispan サーバー内にキャッシュが存在せず、初回アクセス時にキャッシュを作成したい場合は、以下のいずれかのプロパティを使用します。

quarkus.infinispan-client.cache.magazine.configuration=<distributed-cache><encoding media-type="application/x-protostream"/></distributed-cache> (1)
quarkus.infinispan-client.cache.books.configuration-resource=booksDistributedCache.json (2)
quarkus.infinispan-client.cache.authors.configuration-uri=/file/authorsIndexedCache.yaml (3)
1 'magazine' のxmlでの設定(yaml、jsonもサポートされています)
2 'books' キャッシュの設定を含む resources フォルダー下のファイル名
3 提供されたファイルURI。ファイル URI は、'resources' 配下のファイルを指すこともできます。

configuration-resourceconfigurationconfiguration-uri が同じQuarkusプロファイルで同じキャッシュに設定されている場合、 configuration-uriconfiguration-resourceconfiguration よりも優先されます。 configuration-resourceconfiguration よりも優先されます。

configuration-resource はビルド時のプロパティで、ファイルは自動的にネイティブビルドに含まれます。 configuration-uri は、 resources フォルダ下のファイルを指すこともできます。ただし、 quarkus.native.resources.includes プロパティを設定しない限り、ファイルはネイティブ実行可能ファイルに自動的に含まれません。

キャッシュ設定は、XML、JSON、または YAML で提供することができます。Infinispan コンソールおよびキャッシュ設定ウィザードを使用して、Infinispan キャッシュの詳細について学び、ガイド付きの設定を作成してください。

特定のキャッシュについて何も設定されていない場合、以下の基本設定で作成されます。

XML
<distributed-cache>
    <encoding media-type="application/x-protostream"/>
</distributed-cache>
JSON
{
    "distributed-cache": {
        "encoding": {
            "media-type": "application/x-protostream"
        }
    }
}
YAML
distributedCache:
  encoding:
    mediaType: "application/x-protostream"

認証メカニズム

Infinispanクライアントでは、以下の認証メカニズムを使用することができます:

  • DIGEST-MD5

  • PLAIN(TLS暗号化との併用のみ推奨)

  • EXTERNAL

SCRAMやGSSAPIなどの他の認証メカニズムは、Infinispanクライアントではまだ検証されていません。

認証の設定についての詳しい情報は Hot Rod Endpoint Authentication Mechanisms に存在します。

依存性注入を使用する場合は、 hotrod-client.properties ファイルで認証の設定を行う必要があります。

シリアライゼーション(Key Value型のサポート)

デフォルトでは、クライアントは以下の型のキーとバリューをサポートします: byte[]、プリミティブラッパー(例: Integer、Long、Doubleなど)、String、Date、Instant。ユーザ型については、ここで詳しく説明される追加のステップが必要です。以下のようなユーザクラスがあるとします:

Author.java
public record Author(String name, String surname) {
}
Book.java
public record Book(String title,
                   String description,
                   int publicationYear,
                   Set<Author> authors,
                   Type bookType,
                   BigDecimal price) {
}

ユーザ型のシリアライズは、https://github.com/infinispan/protostream[Protostream]と呼ばれるprotobufをベースにしたライブラリを使用します。

Infinispanのキャッシュは、さまざまなエンコーディングでキーと値を保存できますが、 プロトコル・バッファ(Protobuf) の使用を推奨します。

詳しくは、 Cache Encoding and Marshalling ガイドをご覧ください。

アノテーションに基づくシリアライゼーション

これは、ユーザクラスに protostream アノテーションを追加することで自動的に行えます。加えて、初期化子がアノテーションされたインターフェースが1つ必要です。これは、サポートするクラスの生成方法を制御します。

ここでは、先述のクラスをどのように変更するかの例を示します:

Author.java
@Proto (1)
public record Author(String name, String surname) { (2)
}
1 Protostream 5.0以降、デフォルトのマッピングを生成するには1つのアノテーションが必要です。
2 Protostream 5.0 以降では、レコード型がサポートされています。
Type.java
@Proto
public enum Type { (1)
    FANTASY,
    PROGRAMMING
}
1 列挙型をサポートしています。
Book.java
@Proto
@Indexed (1)
public record Book(@Text String title, (2)
                   @Keyword(projectable = true, sortable = true, normalizer = "lowercase", indexNullAs = "unnamed", norms = false) (3)
                   String description,
                   int publicationYear,
                   Set<Author> authors, (4)
                   Type bookType,
                   BigDecimal price) { (5)
}
1 エンティティがインデックス化されることを示します。分散全文クエリ操作を実行するために必要です。
2 title がテキストとしてインデックスされることを示します。
3 description フィールドが Keyword としてインデックスされることを示します。
4 コレクションがサポートされています。
5 Protostreamは、BigDecimal のように、一般的に使用される型に対するデフォルトの Protobuf マッパーを提供します。これらは org.infinispan.protostream.types パッケージに含まれます。

必要なのは、設定を指定する為のアノテーションを付与した非常にシンプルな GeneratedSchema インターフェイスだけです。

BooksSchema.java
import org.infinispan.protostream.GeneratedSchema;
import org.infinispan.protostream.annotations.ProtoSchema;
import org.infinispan.protostream.types.java.math.BigDecimalAdapter;

@ProtoSchema(includeClasses = { Book.class, Author.class, BigDecimalAdapter.class }, schemaPackageName = "book_sample")
interface BookStoreSchema extends GeneratedSchema {
}

basePackages プロパティを使用すると、クラスを含む完全なパッケージをスキャンできます。 @Protofield アノテーションを使用すると、既定のマーシャリングをオーバーライドできます。

そこで今回は、含まれるクラスのマーシャラーとスキーマを自動生成して、スキーマパッケージに自動で配置します。パッケージは用意する必要はありませんが、Infinispan検索機能を利用する場合は生成されたパッケージを知っておく必要があります。

Quarkusでは、 schemaFileName および schemaFilePath 属性を ProtoSchema アノテーションに設定しないでください。どちらの属性を設定しても、ネイティブの実行時エラーが発生します。

カスタムシリアライゼーション

前の方法は、ユーザが自分のクラスにアノテーションを付けられる場合のために提案されています。残念ながら、ユーザはキャッシュに入れるすべてのクラスにアノテーションを付けることができないかもしれません。このような場合はスキーマを定義し、自分で独自のマーシャラを作成しなければなりません。

Protobuf スキーマ

2つの方法のいずれかでprotobufスキーマを提供できます。

  1. Proto ファイル
    プロジェクトの META-INF ディレクトリに .proto ファイルを置くことができます。これらのファイルは初期化時に自動的にピックアップされます。

    library.proto
    パッケージ book_sample;
  2. コード内 または、 org.infinispan.protostream.schema.Schema 型のプロデュースされた Bean を定義することで、ユーザーコード内で直接プロトスキーマを定義することもできます。

       @Produces
       Schema bookSchema() {
            return new Schema.Builder("book.proto")
                    .packageName("book_sample")
                    .addMessage("Author")
                         .addField(Type.Scalar.STRING, "name", 1)
                         .addField(Type.Scalar.STRING, "surname", 2)
                    .addMessage("Book")
                         .addField(Type.Scalar.STRING, "title", 1)
                         .addField(Type.Scalar.STRING, "description", 2)
                         .addField(Type.Scalar.INT32, "publicationYear", 3)
                         .addRepeatedField(Type.create("Author"), "author", 4)
                         .addField(Type.Scalar.DOUBLE, "price", 5)
                    .build();
        }
ユーザマーシャラ

最後にすべきことは、proto スキーマで定義された各ユーザクラスの org.infinispan.protostream.MessageMarshaller 実装を提供することです。このクラスは、上記のコードベースの proto スキーマの定義と同様の方法で @Produces を介して提供されます。

こちらは、Author と Book クラスのマーシャラクラスです。

型名は <protobuf package>.<protobuf message> と正確に一致している必要があります!
AuthorMarshaller.java
public class AuthorMarshaller implements MessageMarshaller<Author> {

   @Override
   public String getTypeName() {
      return "book_sample.Author";
   }

   @Override
   public Class<? extends Author> getJavaClass() {
      return Author.class;
   }

   @Override
   public void writeTo(ProtoStreamWriter writer, Author author) throws IOException {
      writer.writeString("name", author.getName());
      writer.writeString("surname", author.getSurname());
   }

   @Override
   public Author readFrom(ProtoStreamReader reader) throws IOException {
      String name = reader.readString("name");
      String surname = reader.readString("surname");
      return new Author(name, surname);
   }
}
BookMarshaller.java
public class BookMarshaller implements MessageMarshaller<Book> {

   @Override
   public String getTypeName() {
      return "book_sample.Book";
   }

   @Override
   public Class<? extends Book> getJavaClass() {
      return Book.class;
   }

   @Override
   public void writeTo(ProtoStreamWriter writer, Book book) throws IOException {
      writer.writeString("title", book.getTitle());
      writer.writeString("description", book.getDescription());
      writer.writeInt("publicationYear", book.getPublicationYear());
      writer.writeCollection("authors", book.getAuthors(), Author.class);
      writer.writeDouble("price", book.getPrice().doubleValue());
   }

   @Override
   public Book readFrom(ProtoStreamReader reader) throws IOException {
      String title = reader.readString("title");
      String description = reader.readString("description");
      int publicationYear = reader.readInt("publicationYear");
      Set<Author> authors = reader.readCollection("authors", new HashSet<>(), Author.class);
      BigDecimal price = BigDecimal.valueOf(reader.readDouble("price"));
      return new Book(title, description, publicationYear, authors, price);
   }
}

そして、以下のように定義してマーシャラを渡します:

   @Produces
   MessageMarshaller authorMarshaller() {
      return new AuthorMarshaller();
   }

   @Produces
   MessageMarshaller bookMarshaller() {
      return new BookMarshaller();
   }
上記のように生成されたMarshallerメソッドは、型なしで MessageMarshaller を返さなければなりません。さもないと、それが見つかりません。

依存性注入

上で見たように、私たちはユーザーが Marshaller のコンフィギュレーションをインジェクションすることをサポートしています。Infinispan クライアントエクステンションでは、 RemoteCacheManagerRemoteCache オブジェクトへのインジェクションを提供し、その逆を行うことができます。 グローバルな RemoteCacheManager が一つあり、上記のセクションで設定したすべてのコンフィギュレーションパラメータを受け取ります。

これらのコンポーネントをインジェクトするのは非常に簡単です。必要なのは、フィールド、コンストラクタ、またはメソッドに @Inject アノテーションを追加することだけです。以下のコードでは、フィールドとコンストラクタのインジェクションを利用しています。

SomeClass.java
    @Inject
    SomeClass(RemoteCacheManager remoteCacheManager) {
       this.remoteCacheManager = remoteCacheManager;
    }

    @Inject
    @Remote("myCache")
    RemoteCache<String, Book> cache;

    RemoteCacheManager remoteCacheManager;

RemoteCache 宣言に Remote というアノテーションが追加されていることにお気づきでしょう。これは 修飾子 アノテーションで、注入する名前付きキャッシュを指定します。このアノテーションは必須ではなく、指定しないと、既定のキャッシュが注入されます。RemoteCacheManager および RemoteCache ビーンのスコープは @ApplicationScoped です。

デフォルト以外の接続の場合は、@InfinispanClientName 修飾子と @Remote 修飾子を組み合わせてください。

SomeClass.java
    @Inject
    @InfinispanClientName("lon-site")
    @Remote("books")
    RemoteCache<String, Book> lonBooks;

    @Inject
    @InfinispanClientName("nyc-site")
    @Remote("books")
    RemoteCache<String, Book> nycBooks;
その他の型は注入のためにサポートされている場合がありますが、詳細については他のセクションを参照してください

モックサポート

Quarkusでは、2つの異なるアプローチによるモックオブジェクトの使用がサポートされています。CDI 代替を使用してすべてのテストクラスの Bean をモックアウトするか、 QuarkusMock を使用してテストごとに Bean をモックアウトします。詳細については、『 Getting started with testing』ガイド を参照してください。

RemoteCacheManager および RemoteCache はモックできます。

BookService.java
@ApplicationScoped
public class BookService {

   @Inject
   @Remote("books")
   RemoteCache<String, Book> books; (1)

   public String getBookDescriptionById(String id) {
      Book book = books.get(id);
      if (book == null) {
         return "default";
      }

      return book.getDescription();
   }
}
1 依存性注入を使用して書籍キャッシュに接続します。

テスト・クラスでは、RemoteCache をモックできます。

BookServiceTest.java
@QuarkusTest
public class BookServiceTest {

    @Inject
    BookService bookService;

    @InjectMock (1)
    @Remote("books")
    RemoteCache<String, Book> bookRemoteCache;

    @Test
    public void mockRemoteCache() {
        Mockito.when(bookRemoteCache.get("harry_potter")).thenReturn(new Book(... "Best saga ever");(2)

        Assertions.assertThat(bookService.getBookDescriptionById("harry_potter")).isEqualTo("Best saga ever");(3)
    }
}
1 RemoteCache Beanの代わりにモックを注入します。
2 Mockitoを使用して、RemoteCacheの呼び出しをモックします。
3 サービスコールのアサート

InfinispanサーバーへのProtobufスキーマの登録

クエリを実行したり、 Protobuf から JSON のような他のメディアタイプに変換するには、生成された Protobuf スキーマを Infinispan サーバー に登録する必要があります。

Infinispan コンソールにログインし、 http://SERVER_HOST:SERVER_PORT(例: http://localhost:11222 )の Schemas タブに存在するスキーマを確認することができます。

Infinispan Dev Servicesガイド を確認し、Infinispan Dev Servicesサーバーに接続して下さい。

デフォルトでは、この方法で生成されたProtobufスキーマは、クライアントが最初に接続したときに、このエクステンションによって登録されます。 しかし、実運用で使用しているとスキーマが時間の経過とともに進化する可能性があるため、手動で登録を処理する必要があるかもしれません。そのため、`quarkus.infinispan-client.use-schema-registration`を`false`に設定して、この現象を無効にすることができます。

スキーマを手動で設定するには、Kubernetes デプロイメント用の Infinispan Operator 、Infinispan Console、 REST API または Hot Rod Java Client を使用してください。

アノテーションを利用したキャッシング

Infinispan Caching アノテーションは この拡張機能では 非推奨であり、削除される予定です。 Infinispan Cache 拡張 機能を使用するか、アノテーションを置き換えてください。 io.quarkus.infinispan.client の代わりに io.quarkus.cache パッケージのアノテーションを使用するように import 文を更新してください。

Infinispan Client エクステンションは、Infinispan でのキャッシュ能力を有効にするために CDI 管理 Bean で使用できるアノテーションのセットを提供します。

プライベートメソッドではアノテーションのキャッシュは許可されていません。package-private (明示的な修飾子を持たない) を含む他のアクセス修飾子では問題なく動作します。

@CacheResult

可能な限り、メソッドボディを実行せずにキャッシュからメソッドの結果を読み込みます。

@CacheResult でアノテーションされたメソッドが呼び出されると、Quarkus はメソッドの引数をキャッシュキーとして使用し、そのメソッドがすでに呼び出されているかどうかをキャッシュでチェックします。複数のパラメータを持つメソッドは許可されません。複合キーの場合は、複数の値を保持するProtobufスキーマを定義します。キャッシュ内に値が見つかった場合、その値を返し、アノテーションされたメソッドは実際に実行されることはありません。値が見つからない場合、アノテーションされたメソッドが呼び出され、返された値は計算されたキーを使用してキャッシュに格納されます。このアノテーションは、 void を返すメソッドには使用できません。

Infinispan Client エクステンションは、Quarkus-Cache エクステンションとは異なり、まだ null 値をキャッシュすることができません。

@CacheInvalidate

キャッシュからエントリーを削除します。

@CacheInvalidate でアノテーションされたメソッドが呼び出されると、 Infinispan はメソッドの引数をキャッシュキーとして使用し、 キャッシュから既存のエントリを削除しようとします。キーがキャッシュエントリーを特定できない場合、何も起こりません。

@CacheInvalidateAll

@CacheInvalidateAll でアノテーションされたメソッドが呼び出されると、Infinispan はキャッシュからすべてのエントリを削除します。

クエリ

Infinispan クライアントは、 ProtoStreamMarshaller が上記のように設定されている限り、インデックス付き検索とインデックスなし検索の両方をサポートします。これにより、ユーザはプロトスキーマのプロパティに基づく キー または 値に対して クエリを実行できます。 パフォーマンス上の理由から、インデックス付きクエリが推奨されます

XML
<distributed-cache name="books" statistics="true">
    <!-- other configuration -->
	<indexing enabled="true" storage="filesystem" startup-mode="PURGE">
		<indexed-entities>
			<indexed-entity>book_sample.Book</indexed-entity>
		</indexed-entities>
	</indexing>
</distributed-cache>
JSON
{
  "books": {
    "distributed-cache": {
      ...
      "indexing": {
        "enabled": true,
        "storage": "filesystem",
        "startupMode": "PURGE",
        "indexed-entities": [
          "book_sample.Book"
        ]
      }
    }
  }
}
YAML
distributedCache:
  # other configuration
  indexing:
    enabled: "true"
    storage: "filesystem"
    startupMode: "PURGE"
    indexedEntities:
      - "book_sample.Book"

クエリは、 ProtoStreamMarshaller の設定時に設定できるproto定義に基づいて構築されます。上記のいずれのシリアライズ方法でも、起動時に自動的にスキーマをサーバに登録し、リモートの Infinispan サーバーに保存されているオブジェクトを問い合せる機能を自動的に得られます。

Book.java
@Indexed (1)
public class Book {

    @ProtoFactory
    public Book(String title, String description, int publicationYear, Set<Author> authors) {
      ...
    }

    @ProtoField(number = 1)
    @Text (2)
    public String getTitle() {
        return title;
    }

    @ProtoField(number = 2)
    @Keyword(projectable = true, sortable = true, normalizer = "lowercase", indexNullAs = "unnamed", norms = false) (3)
    public String getDescription() {
        return description;
    }
    ...
1 @Indexed アノテーションは、POJOをインデックス可能にします
2 @Basic アノテーションは、インデックス付きフィールドに対して特別な変換を行わずに使用されます。
3 @Keyword アノテーションは、テキストフィールドにnormalizer を適用するために使用します。

Quarkus Infinispanクライアントエクステンションでは、Query DSLまたはIckle Query 言語のいずれかを使用できます。

Query.java
@Inject
@Remote("books")
RemoteCache<String, Book> booksCache; (1)

Query<Book> query = booksCache.query("from book_sample.Book b where b.authors.name like '%" + name + "%'"); (2)
List<Book> list = query.execute().list();
1 書籍キャッシュの注入
2 書籍の著者名の全文クエリを実行します。
詳細は Infinispan のドキュメントの クエリ を参照してください。

Quarkus 3.9とInfinispan 15の統合以前は、クエリは以下のコードを呼び出して実行されていました:.Query.java

QueryFactory queryFactory = Search.getQueryFactory(booksCache); (1)
Query query = queryFactory.create("from book_sample.Book");
List<Book> list = query.execute().list();
1 3.9での変更点

RemoteCache は現在 @ApplicationScoped プロキシ Bean なので、このコードはもう動作しません。 Search.getQueryFactory は ClassCastException を発生させます。 RemoteCache API の query メソッドを以下のように使用して、不要な間接処理を削除します。

Query<Book> query = booksCache.<Book>query("from book_sample.Book");
List<Book> list = query.execute().list();

カウンター

Infinispanにはカウンターという概念もあり、Quarkus Infinispanのクライアントはそれらもサポートしています。

Quarkus Infinispan クライアントエクステンションでは、 CounterManager を直接依存性注入することができます。フィールド、コンストラクタ、メソッドにアノテーションを付けるだけで、簡単に取得できます。そして、通常と同じようにカウンタを使用することができます。

@Inject
CounterManager counterManager;

詳細は Infinispan のドキュメント クラスタカウンター を参照してください。

ニアキャッシング

ニアキャッシングはデフォルトでは無効ですが、次のプロパティを設定することで、キャッシュ単位で有効にすることができます:

quarkus.infinispan-client.cache.books.near-cache-mode=INVALIDATED (1)
quarkus.infinispan-client.cache.books.near-cache-max-entries=200 (2)
quarkus.infinispan-client.cache.books.near-cache-use-bloom-filter=true (3)
1 モードを INVALIDATED に設定して 'books' キャッシュのニアキャッシュを有効にします
2 'books' キャッシュのエビクションが発生するまでにニアキャッシュが保持できる最大エントリ数を設定します
3 'books' キャッシュのブルームフィルタを有効にします

境界付けられたニアキャッシング

キャッシュに格納できるエントリーの最大数を指定し、常に境界付けられたニアキャッシュを使用する必要があります。

ブルームフィルタ

無効化メッセージの総数を減らすことで書き込み操作のパフォーマンスを最適化する必要がある場合はブルームフィルタを有効にします。ブルームフィルタは Infinispan サーバー に常駐し、クライアントが要求したエントリを追跡します。 これらは、境界付けられていないニアキャッシュでは使用できません。ブルームフィルタを有効にする際には、エントリの最大数を定義する必要があります。

暗号化

この時点での暗号化には、作業を開始するための追加のステップが必要です。

最初のステップは、 application.properties ファイルがトラストストアやキーストアを指すように設定することです。詳しくは こちら をご覧ください。

Infinispanクライアント拡張は、デフォルトでSSL/TLSを有効にします。これについては Using SSL With Native Executables に詳しく書かれています。

SSLホスト名の検証

MITM攻撃を防ぐため、SSLが有効になっている場合、InfinispanではデフォルトでSSLホスト名検証が有効になっています。この場合、クライアントを起動するにはSNIホスト名の設定が必須です。

quarkus.infinispan-client.sni-host-name=localhost (1)
1 SNIホスト名の設定

この動作は、バリデーションを無効にすることで変更できます。

quarkus.infinispan-client.ssl-host-name-validation=false (1)
1 sslホスト名の検証を無効にします。

追加機能

Infinispanクライアントには、ここに記載されていない追加機能があります。これは、この機能がQuarkus環境でテストされていないことを意味し、それらは動作するかもしれませんし、動作しないかもしれません。これらの追加機能が必要な場合は、ぜひお知らせください。

Infinispanの開発サービス

開発モードまたはテストでinfinispan-clientエクステンションを使用すると、Quarkusは自動的にInfinispanサーバーを起動し、アプリケーションを設定します。

Infinispanの開発サービスの有効化/無効化

詳しくは、 Infinispan Dev Servicesのガイド をご覧ください。

共有サーバー

開発モードで複数のアプリケーションを実行している場合、QuarkusはInfinispanブローカーを共有します。 Infinispanの開発サービスは、 dev モードで実行されている複数のQuarkusアプリケーションが1つのブローカーを共有するための service discovery メカニズムを実装しています。

Infinispanの開発サービス は、コンテナを識別するために使用される quarkus-dev-service-infinispan ラベルでコンテナを起動します。

複数の(共有)Infinispanサーバーが必要な場合は、 quarkus.infinispan-client.devservices.service-name 属性を設定して、サーバー名を指定することが可能です。 同じ値を持つコンテナを探すか、見つからない場合は新しいコンテナを起動します。 デフォルトのサービス名は infinispan です。

共有は、開発モードではデフォルトで有効ですが、テストモードでは無効になります。 共有は quarkus.infinispan-client.devservices.shared=false で無効にすることができます。

ポートの設定

デフォルトでは、Infinispanの開発サービスはランダムなポートを選択し、アプリケーションを設定します。 ポートは quarkus.infinispan-client.devservices.port プロパティを設定することによって定義することができます。

設定リファレンス

ビルド時に固定される構成プロパティ - 他のすべての構成プロパティは実行時にオーバーライド可能

Configuration property

デフォルト

Sets the marshallerClass. Default is ProtoStreamMarshaller

Environment variable: QUARKUS_INFINISPAN_CLIENT_MARSHALLER_CLASS

Show more

string

Whether or not a health check is published in case the smallrye-health extension is present.

This is a global setting and is not specific to an Infinispan Client.

Environment variable: QUARKUS_INFINISPAN_CLIENT_HEALTH_ENABLED

Show more

boolean

true

Sets the URI of the running Infinispan server to connect to. hotrod://localhost:11222@admin:password If provided hosts, username and password will be ignored.

Environment variable: QUARKUS_INFINISPAN_CLIENT_URI

Show more

string

Sets the host name/port to connect to. Each one is separated by a semicolon (eg. host1:11222;host2:11222).

Environment variable: QUARKUS_INFINISPAN_CLIENT_HOSTS

Show more

string

Sets client intelligence used by authentication Available values: * BASIC - Means that the client doesn’t handle server topology changes and therefore will only use the list of servers supplied at configuration time. * TOPOLOGY_AWARE - Use this provider if you don’t want the client to present any certificates to the remote TLS host. * HASH_DISTRIBUTION_AWARE - Like TOPOLOGY_AWARE but with the additional advantage that each request involving keys will be routed to the server who is the primary owner which improves performance greatly. This is the default.

Environment variable: QUARKUS_INFINISPAN_CLIENT_CLIENT_INTELLIGENCE

Show more

string

HASH_DISTRIBUTION_AWARE

Enables or disables authentication. Set it to false when connecting to an Infinispan Server without authentication. deployments. Default is 'true'.

Environment variable: QUARKUS_INFINISPAN_CLIENT_USE_AUTH

Show more

boolean

true

Sets username used by authentication.

Environment variable: QUARKUS_INFINISPAN_CLIENT_USERNAME

Show more

string

Sets password used by authentication.

Environment variable: QUARKUS_INFINISPAN_CLIENT_PASSWORD

Show more

string

Sets realm used by authentication

Environment variable: QUARKUS_INFINISPAN_CLIENT_AUTH_REALM

Show more

string

default

Sets server name used by authentication

Environment variable: QUARKUS_INFINISPAN_CLIENT_AUTH_SERVER_NAME

Show more

string

infinispan

Sets SASL mechanism used by authentication. Available values: * DIGEST-MD5 - Uses the MD5 hashing algorithm in addition to nonces to encrypt credentials. This is the default. * EXTERNAL - Uses client certificates to provide valid identities to Infinispan Server and enable encryption. * PLAIN - Sends credentials in plain text (unencrypted) over the wire in a way that is similar to HTTP BASIC authentication. You should use PLAIN authentication only in combination with TLS encryption.

Environment variable: QUARKUS_INFINISPAN_CLIENT_SASL_MECHANISM

Show more

string

DIGEST-MD5

Specifies the filename of a keystore to use to create the SSLContext. You also need to specify a keyStorePassword. Setting this property implicitly enables SSL/TLS.

Environment variable: QUARKUS_INFINISPAN_CLIENT_KEY_STORE

Show more

string

Specifies the password needed to open the keystore. You also need to specify a keyStore. Setting this property implicitly enables SSL/TLS.

Environment variable: QUARKUS_INFINISPAN_CLIENT_KEY_STORE_PASSWORD

Show more

string

Specifies the type of the keyStore, such as PKCS12.

Environment variable: QUARKUS_INFINISPAN_CLIENT_KEY_STORE_TYPE

Show more

string

Sets the unique name used to identify a specific key pair in a keystore for secure connections.

Environment variable: QUARKUS_INFINISPAN_CLIENT_KEY_ALIAS

Show more

string

Specifies the filename of a truststore to use to create the SSLContext. You also need to specify a trustStorePassword. Setting this property implicitly enables SSL/TLS.

Environment variable: QUARKUS_INFINISPAN_CLIENT_TRUST_STORE

Show more

string

Specifies the password needed to open the truststore You also need to specify a trustStore. Setting this property implicitly enables SSL/TLS.

Environment variable: QUARKUS_INFINISPAN_CLIENT_TRUST_STORE_PASSWORD

Show more

string

Specifies the type of the truststore, such as JKS or JCEKS. Defaults to JKS if trustStore is enabled.

Environment variable: QUARKUS_INFINISPAN_CLIENT_TRUST_STORE_TYPE

Show more

string

Configures the secure socket protocol. Setting this property implicitly enables SSL/TLS.

Environment variable: QUARKUS_INFINISPAN_CLIENT_SSL_PROTOCOL

Show more

string

Sets the ssl provider. For example BCFIPS Setting this implicitly enables SSL/TLS.

Environment variable: QUARKUS_INFINISPAN_CLIENT_SSL_PROVIDER

Show more

string

Configures the ciphers. Setting this property implicitly enables SSL/TLS.

Environment variable: QUARKUS_INFINISPAN_CLIENT_SSL_CIPHERS

Show more

list of string

Do SSL hostname validation. Defaults to true.

Environment variable: QUARKUS_INFINISPAN_CLIENT_SSL_HOST_NAME_VALIDATION

Show more

boolean

SNI host name. Mandatory when SSL is enabled and host name validation is true.

Environment variable: QUARKUS_INFINISPAN_CLIENT_SNI_HOST_NAME

Show more

string

Configures the socket timeout.

Environment variable: QUARKUS_INFINISPAN_CLIENT_SOCKET_TIMEOUT

Show more

int

Whether a tracing propagation is enabled in case the Opentelemetry extension is present. By default the propagation of the context is propagated from the client to the Infinispan Server.

Environment variable: QUARKUS_INFINISPAN_CLIENT_TRACING_PROPAGATION_ENABLED

Show more

boolean

Enables or disables Protobuf generated schemas upload to the server. Set it to 'false' when you need to handle the lifecycle of the Protobuf Schemas on Server side yourself. Default is 'true'. This is a global setting and is not specific to a Infinispan Client.

Environment variable: QUARKUS_INFINISPAN_CLIENT_USE_SCHEMA_REGISTRATION

Show more

boolean

true

Starts the client and connects to the server. If set to false, you’ll need to start it yourself.

Environment variable: QUARKUS_INFINISPAN_CLIENT_START_CLIENT

Show more

boolean

true

Cache configuration file in XML, JSON or YAML is defined in build time to create the cache on first access. An example of the user defined property. cacheConfig.xml file is located in the 'resources' folder: quarkus.infinispan-client.cache.bookscache.configuration-resource=cacheConfig.xml

Environment variable: QUARKUS_INFINISPAN_CLIENT_CACHE__CACHE__CONFIGURATION_RESOURCE

Show more

string

Cache configuration in inlined XML to create the cache on first access. Will be ignored if the configuration-uri is provided for the same cache name. An example of the user defined property: quarkus.infinispan-client.cache.bookscache.configuration=

Environment variable: QUARKUS_INFINISPAN_CLIENT_CACHE__CACHE__CONFIGURATION

Show more

string

Cache configuration file in XML, Json or YAML whose path will be converted to URI to create the cache on first access. An example of the user defined property. cacheConfig.xml file is located in the 'resources' folder: quarkus.infinispan-client.cache.bookscache.configuration-uri=cacheConfig.xml

Environment variable: QUARKUS_INFINISPAN_CLIENT_CACHE__CACHE__CONFIGURATION_URI

Show more

string

The maximum number of entries to keep locally for the specified cache.

Environment variable: QUARKUS_INFINISPAN_CLIENT_CACHE__CACHE__NEAR_CACHE_MAX_ENTRIES

Show more

int

Sets near cache mode used by the Infinispan Client Available values: * DISABLED - Means that near caching is disabled. This is the default value. * INVALIDATED - Means is near caching is invalidated, so when entries are updated or removed server-side, invalidation messages will be sent to clients to remove them from the near cache.

Environment variable: QUARKUS_INFINISPAN_CLIENT_CACHE__CACHE__NEAR_CACHE_MODE

Show more

disabled, invalidated

Enables bloom filter for near caching. Bloom filters optimize performance for write operations by reducing the total number of invalidation messages.

Environment variable: QUARKUS_INFINISPAN_CLIENT_CACHE__CACHE__NEAR_CACHE_USE_BLOOM_FILTER

Show more

boolean

Sets the host name/port to connect to. Each one is separated by a semicolon (eg. hostA:11222;hostB:11222).

Environment variable: QUARKUS_INFINISPAN_CLIENT_BACKUP_CLUSTER__BACKUP_CLUSTER__HOSTS

Show more

string

required

Sets client intelligence used by authentication Available values: * BASIC - Means that the client doesn’t handle server topology changes and therefore will only use the list of servers supplied at configuration time. * TOPOLOGY_AWARE - Use this provider if you don’t want the client to present any certificates to the remote TLS host. * HASH_DISTRIBUTION_AWARE - Like TOPOLOGY_AWARE but with the additional advantage that each request involving keys will be routed to the server who is the primary owner which improves performance greatly. This is the default.

Environment variable: QUARKUS_INFINISPAN_CLIENT_BACKUP_CLUSTER__BACKUP_CLUSTER__CLIENT_INTELLIGENCE

Show more

string

HASH_DISTRIBUTION_AWARE

Enables or disables Protobuf generated schemas upload to the backup. Set it to 'false' when you need to handle the lifecycle of the Protobuf Schemas on Server side yourself. Default is 'true'. This setting will be ignored if the Global Setting is set up to false.

Environment variable: QUARKUS_INFINISPAN_CLIENT_BACKUP_CLUSTER__BACKUP_CLUSTER__USE_SCHEMA_REGISTRATION

Show more

boolean

true

Named clients

デフォルト

Sets the marshallerClass. Default is ProtoStreamMarshaller

Environment variable: QUARKUS_INFINISPAN_CLIENT__CLIENT_NAME__MARSHALLER_CLASS

Show more

string

Cache configuration file in XML, JSON or YAML is defined in build time to create the cache on first access. An example of the user defined property. cacheConfig.xml file is located in the 'resources' folder: quarkus.infinispan-client.cache.bookscache.configuration-resource=cacheConfig.xml

Environment variable: QUARKUS_INFINISPAN_CLIENT__CLIENT_NAME__CACHE__CACHE__CONFIGURATION_RESOURCE

Show more

string

Sets the URI of the running Infinispan server to connect to. hotrod://localhost:11222@admin:password If provided hosts, username and password will be ignored.

Environment variable: QUARKUS_INFINISPAN_CLIENT__CLIENT_NAME__URI

Show more

string

Sets the host name/port to connect to. Each one is separated by a semicolon (eg. host1:11222;host2:11222).

Environment variable: QUARKUS_INFINISPAN_CLIENT__CLIENT_NAME__HOSTS

Show more

string

Sets client intelligence used by authentication Available values: * BASIC - Means that the client doesn’t handle server topology changes and therefore will only use the list of servers supplied at configuration time. * TOPOLOGY_AWARE - Use this provider if you don’t want the client to present any certificates to the remote TLS host. * HASH_DISTRIBUTION_AWARE - Like TOPOLOGY_AWARE but with the additional advantage that each request involving keys will be routed to the server who is the primary owner which improves performance greatly. This is the default.

Environment variable: QUARKUS_INFINISPAN_CLIENT__CLIENT_NAME__CLIENT_INTELLIGENCE

Show more

string

HASH_DISTRIBUTION_AWARE

Enables or disables authentication. Set it to false when connecting to an Infinispan Server without authentication. deployments. Default is 'true'.

Environment variable: QUARKUS_INFINISPAN_CLIENT__CLIENT_NAME__USE_AUTH

Show more

boolean

true

Sets username used by authentication.

Environment variable: QUARKUS_INFINISPAN_CLIENT__CLIENT_NAME__USERNAME

Show more

string

Sets password used by authentication.

Environment variable: QUARKUS_INFINISPAN_CLIENT__CLIENT_NAME__PASSWORD

Show more

string

Sets realm used by authentication

Environment variable: QUARKUS_INFINISPAN_CLIENT__CLIENT_NAME__AUTH_REALM

Show more

string

default

Sets server name used by authentication

Environment variable: QUARKUS_INFINISPAN_CLIENT__CLIENT_NAME__AUTH_SERVER_NAME

Show more

string

infinispan

Sets SASL mechanism used by authentication. Available values: * DIGEST-MD5 - Uses the MD5 hashing algorithm in addition to nonces to encrypt credentials. This is the default. * EXTERNAL - Uses client certificates to provide valid identities to Infinispan Server and enable encryption. * PLAIN - Sends credentials in plain text (unencrypted) over the wire in a way that is similar to HTTP BASIC authentication. You should use PLAIN authentication only in combination with TLS encryption.

Environment variable: QUARKUS_INFINISPAN_CLIENT__CLIENT_NAME__SASL_MECHANISM

Show more

string

DIGEST-MD5

Specifies the filename of a keystore to use to create the SSLContext. You also need to specify a keyStorePassword. Setting this property implicitly enables SSL/TLS.

Environment variable: QUARKUS_INFINISPAN_CLIENT__CLIENT_NAME__KEY_STORE

Show more

string

Specifies the password needed to open the keystore. You also need to specify a keyStore. Setting this property implicitly enables SSL/TLS.

Environment variable: QUARKUS_INFINISPAN_CLIENT__CLIENT_NAME__KEY_STORE_PASSWORD

Show more

string

Specifies the type of the keyStore, such as PKCS12.

Environment variable: QUARKUS_INFINISPAN_CLIENT__CLIENT_NAME__KEY_STORE_TYPE

Show more

string

Sets the unique name used to identify a specific key pair in a keystore for secure connections.

Environment variable: QUARKUS_INFINISPAN_CLIENT__CLIENT_NAME__KEY_ALIAS

Show more

string

Specifies the filename of a truststore to use to create the SSLContext. You also need to specify a trustStorePassword. Setting this property implicitly enables SSL/TLS.

Environment variable: QUARKUS_INFINISPAN_CLIENT__CLIENT_NAME__TRUST_STORE

Show more

string

Specifies the password needed to open the truststore You also need to specify a trustStore. Setting this property implicitly enables SSL/TLS.

Environment variable: QUARKUS_INFINISPAN_CLIENT__CLIENT_NAME__TRUST_STORE_PASSWORD

Show more

string

Specifies the type of the truststore, such as JKS or JCEKS. Defaults to JKS if trustStore is enabled.

Environment variable: QUARKUS_INFINISPAN_CLIENT__CLIENT_NAME__TRUST_STORE_TYPE

Show more

string

Configures the secure socket protocol. Setting this property implicitly enables SSL/TLS.

Environment variable: QUARKUS_INFINISPAN_CLIENT__CLIENT_NAME__SSL_PROTOCOL

Show more

string

Sets the ssl provider. For example BCFIPS Setting this implicitly enables SSL/TLS.

Environment variable: QUARKUS_INFINISPAN_CLIENT__CLIENT_NAME__SSL_PROVIDER

Show more

string

Configures the ciphers. Setting this property implicitly enables SSL/TLS.

Environment variable: QUARKUS_INFINISPAN_CLIENT__CLIENT_NAME__SSL_CIPHERS

Show more

list of string

Do SSL hostname validation. Defaults to true.

Environment variable: QUARKUS_INFINISPAN_CLIENT__CLIENT_NAME__SSL_HOST_NAME_VALIDATION

Show more

boolean

SNI host name. Mandatory when SSL is enabled and host name validation is true.

Environment variable: QUARKUS_INFINISPAN_CLIENT__CLIENT_NAME__SNI_HOST_NAME

Show more

string

Configures the socket timeout.

Environment variable: QUARKUS_INFINISPAN_CLIENT__CLIENT_NAME__SOCKET_TIMEOUT

Show more

int

Whether a tracing propagation is enabled in case the Opentelemetry extension is present. By default the propagation of the context is propagated from the client to the Infinispan Server.

Environment variable: QUARKUS_INFINISPAN_CLIENT__CLIENT_NAME__TRACING_PROPAGATION_ENABLED

Show more

boolean

Cache configuration in inlined XML to create the cache on first access. Will be ignored if the configuration-uri is provided for the same cache name. An example of the user defined property: quarkus.infinispan-client.cache.bookscache.configuration=

Environment variable: QUARKUS_INFINISPAN_CLIENT__CLIENT_NAME__CACHE__CACHE__CONFIGURATION

Show more

string

Cache configuration file in XML, Json or YAML whose path will be converted to URI to create the cache on first access. An example of the user defined property. cacheConfig.xml file is located in the 'resources' folder: quarkus.infinispan-client.cache.bookscache.configuration-uri=cacheConfig.xml

Environment variable: QUARKUS_INFINISPAN_CLIENT__CLIENT_NAME__CACHE__CACHE__CONFIGURATION_URI

Show more

string

The maximum number of entries to keep locally for the specified cache.

Environment variable: QUARKUS_INFINISPAN_CLIENT__CLIENT_NAME__CACHE__CACHE__NEAR_CACHE_MAX_ENTRIES

Show more

int

Sets near cache mode used by the Infinispan Client Available values: * DISABLED - Means that near caching is disabled. This is the default value. * INVALIDATED - Means is near caching is invalidated, so when entries are updated or removed server-side, invalidation messages will be sent to clients to remove them from the near cache.

Environment variable: QUARKUS_INFINISPAN_CLIENT__CLIENT_NAME__CACHE__CACHE__NEAR_CACHE_MODE

Show more

disabled, invalidated

Enables bloom filter for near caching. Bloom filters optimize performance for write operations by reducing the total number of invalidation messages.

Environment variable: QUARKUS_INFINISPAN_CLIENT__CLIENT_NAME__CACHE__CACHE__NEAR_CACHE_USE_BLOOM_FILTER

Show more

boolean

Sets the host name/port to connect to. Each one is separated by a semicolon (eg. hostA:11222;hostB:11222).

Environment variable: QUARKUS_INFINISPAN_CLIENT__CLIENT_NAME__BACKUP_CLUSTER__BACKUP_CLUSTER__HOSTS

Show more

string

required

Sets client intelligence used by authentication Available values: * BASIC - Means that the client doesn’t handle server topology changes and therefore will only use the list of servers supplied at configuration time. * TOPOLOGY_AWARE - Use this provider if you don’t want the client to present any certificates to the remote TLS host. * HASH_DISTRIBUTION_AWARE - Like TOPOLOGY_AWARE but with the additional advantage that each request involving keys will be routed to the server who is the primary owner which improves performance greatly. This is the default.

Environment variable: QUARKUS_INFINISPAN_CLIENT__CLIENT_NAME__BACKUP_CLUSTER__BACKUP_CLUSTER__CLIENT_INTELLIGENCE

Show more

string

HASH_DISTRIBUTION_AWARE

Enables or disables Protobuf generated schemas upload to the backup. Set it to 'false' when you need to handle the lifecycle of the Protobuf Schemas on Server side yourself. Default is 'true'. This setting will be ignored if the Global Setting is set up to false.

Environment variable: QUARKUS_INFINISPAN_CLIENT__CLIENT_NAME__BACKUP_CLUSTER__BACKUP_CLUSTER__USE_SCHEMA_REGISTRATION

Show more

boolean

true

Dev Services

デフォルト

If DevServices has been explicitly enabled or disabled. DevServices is generally enabled by default, unless there is an existing configuration present.

When DevServices is enabled Quarkus will attempt to automatically configure and start a database when running in Dev or Test mode and when Docker is running.

Environment variable: QUARKUS_INFINISPAN_CLIENT__CLIENT_NAME__DEVSERVICES_ENABLED

Show more

boolean

true

When the configuration is empty, an Infinispan default client is automatically created to connect to the running dev service. However, there are scenarios where creating this client is unnecessary, yet we still need to spin up an Infinispan Server. In such cases, this property serves to determine whether the client should be created by default or not by the extension.

Environment variable: QUARKUS_INFINISPAN_CLIENT__CLIENT_NAME__DEVSERVICES_CREATE_DEFAULT_CLIENT

Show more

boolean

true

Optional fixed port the dev service will listen to.

If not defined, the port will be chosen randomly.

Environment variable: QUARKUS_INFINISPAN_CLIENT__CLIENT_NAME__DEVSERVICES_PORT

Show more

int

Indicates if the Infinispan server managed by Quarkus Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services for Infinispan starts a new container.

The discovery uses the quarkus-dev-service-infinispan label. The value is configured using the service-name property.

Container sharing is only used in dev mode.

Environment variable: QUARKUS_INFINISPAN_CLIENT__CLIENT_NAME__DEVSERVICES_SHARED

Show more

boolean

true

The value of the quarkus-dev-service-infinispan label attached to the started container. This property is used when shared is set to true. In this case, before starting a container, Dev Services for Infinispan looks for a container with the quarkus-dev-service-infinispan label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise, it starts a new container with the quarkus-dev-service-infinispan label set to the specified value.

This property is used when you need multiple shared Infinispan servers.

Environment variable: QUARKUS_INFINISPAN_CLIENT__CLIENT_NAME__DEVSERVICES_SERVICE_NAME

Show more

string

infinispan

The image to use. Note that only official Infinispan images are supported.

Environment variable: QUARKUS_INFINISPAN_CLIENT__CLIENT_NAME__DEVSERVICES_IMAGE_NAME

Show more

string

List of the artifacts to automatically download and add to the Infinispan server libraries.

For example a Maven coordinate (org.postgresql:postgresql:42.3.1) or a dependency location url.

If an invalid value is passed, the Infinispan server will throw an error when trying to start.

Environment variable: QUARKUS_INFINISPAN_CLIENT__CLIENT_NAME__DEVSERVICES_ARTIFACTS

Show more

list of string

Add a site name to start the Infinispan Server Container with Cross Site Replication enabled (ex. lon). Cross Site Replication is the capability to connect two separate Infinispan Server Clusters that might run in different Data Centers, and configure backup caches to copy the data across the clusters with active-active or active-passive replication. See more about Cross Site Replication in the Infinispan Documentation https://infinispan.org/docs/stable/titles/xsite/xsite.html Configure mcast-port to avoid forming a cluster with any other running Infinispan Server container.

Environment variable: QUARKUS_INFINISPAN_CLIENT__CLIENT_NAME__DEVSERVICES_SITE

Show more

string

If you are running an Infinispan Server already in docker, if the containers use the same mcastPort they will form a cluster. Set a different mcastPort to create a separate cluster in Docker (e. 46656). A common use case in a local Docker development mode, is the need of having two different Infinispan Clusters with Cross Site Replication enabled. see https://github.com/infinispan/infinispan-simple-tutorials/blob/main/infinispan-remote/cross-site-replication/docker-compose/

Environment variable: QUARKUS_INFINISPAN_CLIENT__CLIENT_NAME__DEVSERVICES_MCAST_PORT

Show more

int

Environment variables that are passed to the container.

Environment variable: QUARKUS_INFINISPAN_CLIENT__CLIENT_NAME__DEVSERVICES_CONTAINER_ENV__ENVIRONMENT_VARIABLE_NAME_

Show more

Map<String,String>

Infinispan Server configuration chunks to be passed to the container.

Environment variable: QUARKUS_INFINISPAN_CLIENT__CLIENT_NAME__DEVSERVICES_CONFIG_FILES

Show more

list of string

Dev Services

デフォルト

If DevServices has been explicitly enabled or disabled. DevServices is generally enabled by default, unless there is an existing configuration present.

When DevServices is enabled Quarkus will attempt to automatically configure and start a database when running in Dev or Test mode and when Docker is running.

Environment variable: QUARKUS_INFINISPAN_CLIENT_DEVSERVICES_ENABLED

Show more

boolean

true

When the configuration is empty, an Infinispan default client is automatically created to connect to the running dev service. However, there are scenarios where creating this client is unnecessary, yet we still need to spin up an Infinispan Server. In such cases, this property serves to determine whether the client should be created by default or not by the extension.

Environment variable: QUARKUS_INFINISPAN_CLIENT_DEVSERVICES_CREATE_DEFAULT_CLIENT

Show more

boolean

true

Optional fixed port the dev service will listen to.

If not defined, the port will be chosen randomly.

Environment variable: QUARKUS_INFINISPAN_CLIENT_DEVSERVICES_PORT

Show more

int

Indicates if the Infinispan server managed by Quarkus Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services for Infinispan starts a new container.

The discovery uses the quarkus-dev-service-infinispan label. The value is configured using the service-name property.

Container sharing is only used in dev mode.

Environment variable: QUARKUS_INFINISPAN_CLIENT_DEVSERVICES_SHARED

Show more

boolean

true

The value of the quarkus-dev-service-infinispan label attached to the started container. This property is used when shared is set to true. In this case, before starting a container, Dev Services for Infinispan looks for a container with the quarkus-dev-service-infinispan label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise, it starts a new container with the quarkus-dev-service-infinispan label set to the specified value.

This property is used when you need multiple shared Infinispan servers.

Environment variable: QUARKUS_INFINISPAN_CLIENT_DEVSERVICES_SERVICE_NAME

Show more

string

infinispan

The image to use. Note that only official Infinispan images are supported.

Environment variable: QUARKUS_INFINISPAN_CLIENT_DEVSERVICES_IMAGE_NAME

Show more

string

List of the artifacts to automatically download and add to the Infinispan server libraries.

For example a Maven coordinate (org.postgresql:postgresql:42.3.1) or a dependency location url.

If an invalid value is passed, the Infinispan server will throw an error when trying to start.

Environment variable: QUARKUS_INFINISPAN_CLIENT_DEVSERVICES_ARTIFACTS

Show more

list of string

Add a site name to start the Infinispan Server Container with Cross Site Replication enabled (ex. lon). Cross Site Replication is the capability to connect two separate Infinispan Server Clusters that might run in different Data Centers, and configure backup caches to copy the data across the clusters with active-active or active-passive replication. See more about Cross Site Replication in the Infinispan Documentation https://infinispan.org/docs/stable/titles/xsite/xsite.html Configure mcast-port to avoid forming a cluster with any other running Infinispan Server container.

Environment variable: QUARKUS_INFINISPAN_CLIENT_DEVSERVICES_SITE

Show more

string

If you are running an Infinispan Server already in docker, if the containers use the same mcastPort they will form a cluster. Set a different mcastPort to create a separate cluster in Docker (e. 46656). A common use case in a local Docker development mode, is the need of having two different Infinispan Clusters with Cross Site Replication enabled. see https://github.com/infinispan/infinispan-simple-tutorials/blob/main/infinispan-remote/cross-site-replication/docker-compose/

Environment variable: QUARKUS_INFINISPAN_CLIENT_DEVSERVICES_MCAST_PORT

Show more

int

Environment variables that are passed to the container.

Environment variable: QUARKUS_INFINISPAN_CLIENT_DEVSERVICES_CONTAINER_ENV__ENVIRONMENT_VARIABLE_NAME_

Show more

Map<String,String>

Infinispan Server configuration chunks to be passed to the container.

Environment variable: QUARKUS_INFINISPAN_CLIENT_DEVSERVICES_CONFIG_FILES

Show more

list of string

関連コンテンツ