SpringDataGeodeの紹介
1. 概要
Apache Geode は、分散型クラウドアーキテクチャを通じてデータ管理ソリューションを提供します。 Apache Geodeサーバーを介したデータアクセスには、 Spring DataAPIを利用するのが理想的です。
このチュートリアルでは、Apache Geode Javaクライアントアプリケーションの構成と開発について、 Spring DataGeodeについて説明します。
2. Spring Data Geode
Spring Data Geodeライブラリは、JavaアプリケーションがXMLとアノテーションを介してApacheGeodeサーバーを構成できるようにします。 同時に、このライブラリは、ApacheGeodeキャッシュクライアントサーバーアプリケーションを作成するのにも便利です。
Spring Data Geodeライブラリは、 Spring DataGemfireに似ています。 微妙な違いは別として、後者は PivotalGemfireとの統合を提供します。これはApacheGeodeの商用バージョンです。
その過程で、いくつかのSpring Data Geodeアノテーションを調べて、JavaアプリケーションをApacheGeodeのキャッシュクライアントに構成します。
3. Mavenの依存関係
最新のspring-geode-starter依存関係をpom.xmlに追加しましょう。
<dependency>
<groupId>org.springframework.geode</groupId>
<artifactId>spring-geode-starter</artifactId>
<version>1.1.1.RELEASE</version>
</dependency>
4. ApacheGeodeの@ClientCacheApplicationとSpring Boot
まず、 @ Spring BootApplication を使用して、Spring Boot ClientCacheAppを作成しましょう。
@SpringBootApplication
public class ClientCacheApp {
public static void main(String[] args) {
SpringApplication.run(ClientCacheApp.class, args);
}
}
次に、 ClientCacheAppクラスをApacheGeodeキャッシュクライアントに変換するために、Spring DataGeodeが提供する@ClientCacheApplicationを追加します。
@ClientCacheApplication
// existing annotations
public class ClientCacheApp {
// ...
}
それでおしまい! キャッシュクライアントアプリを実行する準備が整いました。
ただし、アプリを起動する前に、ApacheGeodeサーバーを起動する必要があります。
5. ApacheGeodeサーバーを起動します
ApacheGeodeとgfshコマンドラインインターフェイスがすでにセットアップされていると仮定すると、 basicLocator という名前のロケーターを起動し、次にbasicServerという名前のサーバーを起動できます。
これを行うには、 gfshCLIで次のコマンドを実行します。
gfsh>start locator --name="basicLocator"
gfsh>start server --name="basicServer"
サーバーの実行が開始されると、すべてのメンバーを一覧表示できます。
gfsh>list members
gfsh CLI出力には、ロケーターとサーバーが一覧表示されます。
Name | Id
------------ | ------------------------------------------------------------------
basicLocator | 10.25.3.192(basicLocator:25461:locator)<ec><v0>:1024 [Coordinator]
basicServer | 10.25.3.192(basicServer:25546)<v1>:1025
出来上がり! これで、Mavenコマンドを使用してキャッシュクライアントアプリを実行する準備が整いました。
mvn spring-boot:run
6. 構成
ApacheGeodeサーバーを介してデータにアクセスするようにキャッシュクライアントアプリを構成しましょう。
6.1. 領域
まず、 Author という名前のエンティティを作成し、それをApache GeodeRegionとして定義します。Region は、RDBMSのテーブルに似ています。
@Region("Authors")
public class Author {
@Id
private Long id;
private String firstName;
private String lastName;
private int age;
}
Authorエンティティで宣言されたSpring DataGeodeアノテーションを確認してみましょう。
まず、 @Region は、ApacheGeodeサーバーにAuthors リージョンを作成して、Authorオブジェクトを永続化します。
次に、@Idはプロパティを主キーとしてマークします。
6.2. 実在物
@EnableEntityDefinedRegions を追加することで、Authorエンティティを有効にできます。
また、 @EnableClusterConfiguration を追加して、アプリケーションがApacheGeodeサーバーにリージョンを作成できるようにします。
@EnableEntityDefinedRegions(basePackageClasses = Author.class)
@EnableClusterConfiguration
// existing annotations
public class ClientCacheApp {
// ...
}
したがって、アプリを再起動すると、リージョンが自動的に作成されます。
gfsh>list regions
List of regions
---------------
Authors
6.3. リポジトリ
次に、AuthorエンティティにCRUD操作を追加します。
そのためには、[X43X]の CrudRepositoryを拡張するAuthorRepository、という名前のリポジトリを作成しましょう。
public interface AuthorRepository extends CrudRepository<Author, Long> {
}
次に、 @EnableGemfireRepositories を追加して、AuthorRepositoryを有効にします。
@EnableGemfireRepositories(basePackageClasses = AuthorRepository.class)
// existing annotations
public class ClientCacheApp {
// ...
}
これで、CrudRepositoryが提供するsaveやfindByIdなどのメソッドを使用して、Authorエンティティに対してCRUD操作を実行する準備が整いました。
6.4. インデックス
Spring Data Geodeは、ApacheGeodeサーバーでインデックスを作成して有効にする簡単な方法を提供します。
まず、@EnableIndexingをClientCacheAppクラスに追加します。
@EnableIndexing
// existing annotations
public class ClientCacheApp {
// ...
}
次に、@IndexedをAuthorクラスのプロパティに追加しましょう。
public class Author {
@Id
private Long id;
@Indexed
private int age;
// existing data members
}
ここで、Spring Data Geodeは、Authorエンティティで定義されたアノテーションに基づいてインデックスを自動的に実装します。
したがって、@Idはidの主キーインデックスを実装します。 同様に、 @Indexed は、ageのハッシュインデックスを実装します。
それでは、アプリケーションを再起動して、ApacheGeodeサーバーで作成されたインデックスを確認しましょう。
gfsh> list indexes
Member Name | Region Path | Name | Type | Indexed Expression | From Clause | Valid Index
----------- | ----------- | ----------------- | ----- | ------------------ | ----------- | -----------
basicServer | /Authors | AuthorsAgeKeyIdx | RANGE | age | /Authors | true
basicServer | /Authors | AuthorsIdHashIdx | RANGE | id | /Authors | true
同様に、 @LuceneIndexed を使用して、StringタイプのプロパティのApacheGeodeLuceneインデックスを作成できます。
6.5. 連続クエリ
継続的なクエリにより、サーバーでデータが変更されたときにアプリケーションが自動通知を受信できるようになります。 クエリに一致し、サブスクリプションモデルに依存します。
機能を追加するには、 AuthorService を作成し、一致するクエリを使用して@ContinuousQueryを追加します。
@Service
public class AuthorService {
@ContinuousQuery(query = "SELECT * FROM /Authors a WHERE a.id = 1")
public void process(CqEvent event) {
System.out.println("Author #" + event.getKey() + " updated to " + event.getNewValue());
}
}
継続的なクエリを使用するには、サーバーからクライアントへのサブスクリプションを有効にします。
@ClientCacheApplication(subscriptionEnabled = true)
// existing annotations
public class ClientCacheApp {
// ...
}
したがって、idが1に等しいAuthorオブジェクトを変更するたびに、アプリはprocessメソッドで自動通知を受け取ります。
7. 追加の注釈
Spring DataGeodeライブラリで追加で利用できるいくつかの便利な注釈を調べてみましょう。
7.1. @PeerCacheApplication
これまで、Spring BootアプリケーションをApacheGeodeキャッシュクライアントとして検討してきました。 場合によっては、アプリケーションをApacheGeodeピアキャッシュアプリケーションにする必要があります。
次に、メインクラスに@CacheClientApplicationの代わりに@PeerCacheApplicationのアノテーションを付ける必要があります。
また、 @PeerCacheApplication は、接続する埋め込みピアキャッシュインスタンスを自動的に作成します。
7.2. @CacheServerApplication
同様に、Spring Bootアプリケーションをピアメンバーとサーバーの両方として使用するには、メインクラスに@CacheServerApplication。のアノテーションを付けることができます。
7.3. @EnableHttpService
@PeerCacheApplicationと@CacheServerApplication。の両方でApacheGeodeの組み込みHTTPサーバーを有効にできます。
そのためには、メインクラスに @EnableHttpServiceでアノテーションを付ける必要があります。デフォルトでは、HTTPサービスはポート7070で開始されます。
7.4. @EnableLogging
メインクラスに@EnableLoggingを追加するだけで、ロギングを有効にできます。 同時に、logLevel属性とlogFile属性を使用して、対応するプロパティを設定できます。
7.5. @EnablePdx
また、メインクラスに @EnablePdx を追加するだけで、すべてのドメインでApacheGeodeのPDXシリアル化手法を有効にできます。
7.6. @EnableSslおよび@EnableSecurity
@EnableSsl を使用して、ApacheGeodeのTCP/IPソケットSSLをオンに切り替えることができます。 同様に、 @EnableSecurity を使用して、認証と承認のためにApacheGeodeのセキュリティを有効にすることができます。
8. 結論
このチュートリアルでは、ApacheGeodeのSpring Dataについて説明しました。
まず、ApacheGeodeキャッシュクライアントアプリケーションとして機能するSpring Bootアプリケーションを作成しました。
同時に、Spring Data Geodeが提供するいくつかの便利な注釈を調べて、ApacheGeode機能を構成および有効化しました。
最後に、@ PeerCacheApplicationや@ CacheServerApplication のようないくつかの追加のアノテーションを調べて、クラスター構成でアプリケーションをピアまたはサーバーに変更しました。
いつものように、すべてのコード実装はGitHubで利用できます。