0

Spring Boot を使用した簡単なアプリケーションがあります。JSR107 - JCache でメソッドキャッシングを許可したかったのです。だからチュートリアルの助けを借りて、私はこのコードをまとめました:

@CacheResult(cacheName = "testpoc")
public Country getCountry(Integer id){
    System.out.println("---> Loading country with code '" + id + "'");
    return new Country(id, "X", "Title");
}

このPOMファイルで

...
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>1.4.0.RELEASE</version>
    </dependency>
    <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-cache</artifactId>
         <version>1.4.0.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>javax.cache</groupId>
        <artifactId>cache-api</artifactId>
        <version>1.0.0</version>
    </dependency>
</dependencies>
...

(依存関係「spring-boot-starter-web」は、 getCountryメソッドを呼び出す単純な REST サービス用に存在します)

ドキュメントが言うようにすべてが機能します-メソッドは一度だけ呼び出されます。

今、WildFly 10アプリケーションサーバーで試してみたかった

pom ファイルを変更しました:

  • トムキャットを除外
  • 除外された spring-boot-starter-cache
  • infinispan-jcache を追加しました (standalone/domain.xml で wildfly によって構成/管理されているキャッシュを使用したいため)

ここのpastebinでpomファイルを確認してください。

問題は、次のエラーが表示されることです: 「java:jboss/infinispan/app-cache」という名前のキャッシュが見つかりません

(ワイルドフライで構成された infinispan キャッシュに割り当てられた JNDI と名前の両方を使用しようとしました)。

次のコードは Cache オブジェクトを作成しました(私はそれを使うことができます):

CacheManager cacheManager = Caching.getCachingProvider().getCacheManager();
Cache<String, String> cache = cacheManager.createCache("testpoc", new MutableConfiguration<String, String>());

質問:

  • WildFly が管理する Infinispan を使用して、WildFly 10 で JCache メソッド キャッシングを使用することは可能ですか?
  • または、JCache のようなメソッド キャッシングには Infinispan を使用する必要があります。したがって、JCache は Infinispan よりも「多くの機能」を備えています。

どうもありがとうございました

PS:コード全体をgithubに置いてリンクを投稿しても問題ありません-数行のコードです...

4

1 に答える 1

3

あなたのアプローチにはいくつかの問題があるので、それらを段階的に説明しましょう。

最初に、適切な Infinispan セットアップを使用する必要があります。WF に同梱されている Infinispan ビットは、内部またはプライベートと見なす必要があります。アプリで Infinispan を適切に使用するorg.infinispan:infinispan-embeddedには、デプロイメントに追加するか、 Infinispan Wildfly モジュールをインストールします。インストール ガイドはこちらにあります (少し古いですが、手順はまったく同じです。モジュールを WF にアンパックし、DependenciesMANIFEST.MF エントリを使用します)。

Infinispan を正常にインストール (またはアプリに追加) したら、Spring CacheまたはJCacheを使用するかどうかを検討する必要があります。アノテーションの使用のみに関心がある場合は、セットアップがはるかに簡単であるため、前者をお勧めします (構成の 1 つに@EnableCachingを追加するだけです)。最後に、Spring Cache を使用して Infinispan CacheManagerBean を作成します。例はここにあります。

最後の注意 - それでも JCache を使用する必要がある場合は、このマニュアルを使用して Caching Provider をセットアップしてください。

于 2016-09-12T05:44:53.487 に答える