6.14. JPA キャッシュストア
JPA (Java Persistence API) キャッシュストア、JpaStore は正式なスキーマを使用してデータを永続化します。
その後、他のアプリケーションは永続ストレージから読み取れ、Data Grid からデータを読み込むことができます。ただし、他のアプリケーションは、Data Grid と同時に永続ストレージを使用しないでください。
JPA キャッシュストアを使用する際には、以下の点を考慮する必要があります。
- キーはエンティティーの ID である必要があります。値はエンティティーオブジェクトにする必要があります。
-
1 つの
@Idまたは@EmbeddedIdアノテーションのみが許可されます。 -
@GeneratedValueアノテーションを使用した自動生成 ID はサポートされません。 - すべてのエントリーは immortal として保存されます。
- JPA のキャッシュストアは、セグメント化をサポートしていません。
Data Grid キャッシュを組み込んだ JPA キャッシュストアのみを使用する必要があります。
JPA キャッシュストアの設定
XML
<local-cache name="vehicleCache">
<persistence passivation="false">
<jpa-store xmlns="urn:infinispan:config:store:jpa:13.0"
persistence-unit="org.infinispan.persistence.jpa.configurationTest"
entity-class="org.infinispan.persistence.jpa.entity.Vehicle">
/>
</persistence>
</local-cache>
ConfigurationBuilder
Configuration cacheConfig = new ConfigurationBuilder().persistence()
.addStore(JpaStoreConfigurationBuilder.class)
.persistenceUnitName("org.infinispan.loaders.jpa.configurationTest")
.entityClass(User.class)
.build();
設定パラメーター
| 宣言型 | プログラマティック | 詳細 |
|---|---|---|
|
|
|
JPA エンティティークラスを含む JPA 設定ファイル |
|
|
| このキャッシュに保存されることが想定される完全修飾 JPA エンティティークラス名を指定します。1 つのクラスのみが許可されます。 |
6.14.1. JPA キャッシュストアの例
このセクションでは、JPA キャッシュストアを使用する例を紹介します。
前提条件
- JPA エンティティーをマーシャリングするように Data Grid を設定します。
手順
永続性ユニット "myPersistenceUnit" を
persistence.xmlで定義します。<persistence-unit name="myPersistenceUnit"> <!-- Persistence configuration goes here. --> </persistence-unit>
ユーザーエンティティークラスを作成します。
@Entity public class User implements Serializable { @Id private String username; private String firstName; private String lastName; ... }JPA キャッシュストアで"usersCache"という名前のキャッシュを設定します。
キャッシュ usersCache を設定して JPA キャッシュストアを使用するように設定できます。これにより、データをキャッシュに配置すると、JPA 設定を基にデータがデータベースに永続化されます。
EmbeddedCacheManager cacheManager = ...; Configuration cacheConfig = new ConfigurationBuilder().persistence() .addStore(JpaStoreConfigurationBuilder.class) .persistenceUnitName("org.infinispan.loaders.jpa.configurationTest") .entityClass(User.class) .build(); cacheManager.defineCache("usersCache", cacheConfig); Cache<String, User> usersCache = cacheManager.getCache("usersCache"); usersCache.put("raytsang", new User(...));JPA キャッシュストアを使用するキャッシュは、以下の例のように、1 種類のデータのみを保存できます。
Cache<String, User> usersCache = cacheManager.getCache("myJPACache"); // Cache is configured for the User entity class usersCache.put("username", new User()); // Cannot configure caches to use another entity class with JPA cache stores Cache<Integer, Teacher> teachersCache = cacheManager.getCache("myJPACache"); teachersCache.put(1, new Teacher()); // The put request does not work for the Teacher entity class@EmbeddedIdアノテーションでは、以下の例のように複合キーを使用できます。@Entity public class Vehicle implements Serializable { @EmbeddedId private VehicleId id; private String color; ... } @Embeddable public class VehicleId implements Serializable { private String state; private String licensePlate; ... }
関連資料