BT

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

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース OCIはMicronaut Data 1.0を特徴とするMicronaut 1.3をリリースした

OCIはMicronaut Data 1.0を特徴とするMicronaut 1.3をリリースした

原文(投稿日:2020/03/18)へのリンク

Object Computing, Inc.(OCI) は、 Micronaut Data 1.0プロジェクトのマイルストーン・リリースを特徴とするMicronaut 1.3を リリースした。"これは、薄くて軽量なランタイム・レイヤーで実行するリポジトリ・インターフェースのためのクエリを事前に演算するためAhead of Time (AoT) コンパイラを使用するデータベース・アクセス・ツールキットだ。" Micronaut 1.3のその他の機能には、不変の設定プロパティ、Ehache、Hazelcast、Infinispanなどのキャッシュサポート、Kotlinコ・ルーチンと非同期フローの初期サポート、GraalVM 19.3とJackson XMLによるXMLシリアライゼーション/デシリアライゼーションのサポート、パフォーマンスとメモリ消費の改善が含まれている。

元はMicronaut Predatorとして知られていたMicronaut Dataは、 クエリモデルをコンパイル時にクエリに変換するための一般的なAPIを提供する。また、JPA/Hibernate と SQL/JDBC バックエンドのランタイムサポートを提供する。Micronaut Dataチームは、将来的に他のデータベース実装をサポートする予定だ。Micronaut Dataは、H2、MySQL 5.5+、Oracle 12c+、PostgreSQL 9.5+、SQLServer 2012+をサポートしている。

GORMSpring Dataに鼓舞されたMicronaut Dataは、リフレクションを使用するランタイムモデルを排除し、正規表現とパターンマッチングを使用するクエリ変換を排除し、型の安全性を追加することで、これら2つの技術を改善する。GORMやSpring Dataで、エンティティ間の関係をモデリングするためにリフレクションを使用すると、より多くのメモリを消費する。

はじめに

他のMicronautアプリケーションと同様に、動作するMicronautデータ・アプリケーションはより包括的なアプリケーションの出発点として、JPA/HibernateまたはSQL/JDBCバックエンドのいずれかの適切なパラメータを使用してコマンドライン経由で作成できる。

    
$ mn create-app myapp --features data-hibernate-jpa
$ mn create-app myapp --features data-jdbc
    

Gradle を Micronaut アプリケーションのデフォルトのビルドツールとして設定した場合、生成された build.gradleファイルには、適切な依存関係が含まれる。

    
implementation "io.micronaut.data:micronaut-data-hibernate-jpa"
implementation "io.micronaut.data:micronaut-data-jdbc"
    

Micronaut Dataで簡単な映画のH2データベースアプリケーションのモデルを考えてみる。テーブルが2つ、movieそして directorは、アプリケーション内に対応する POJO、リポジトリ、コントローラを持っています。Movieクラスは、 それを表すmovieテーブルにいくつかの映画の情報を記録し、汎用固有識別コード (UUID)と directorテーブルと@ManyToOne関係を持つ。

    
@Entity
public class Movie {

    @Id
    @AutoPopulated
    private UUID id;

    private String name;
    private MovieType type;
    private int year;

    @ManyToOne
    private Director director;

    @Creator
    public Movie(String name, @Nullable Director director, MovieType type, int year) {
        // setter methods
        }
    }
    

Micronaut Dataによって自動設定される@AutoPopulatedはアノテーションを識別し、@Creatorはプライマリ コンストラクタに適用されるアノテーションだ。

リポジトリの作成

次のようなリポジトリインターフェイスを考えてみる。

    
@JdbcRepository(dialect = Dialect.H2)
public interface MovieRepository extends CrudRepository<Movie,Long> {
    Movie findByName(String name);

    @Join("director")
    Optional<Movie> findByName(String lastName);
    }
    

MovieRepositoryインターフェイスは @JdbcRepositoryアノテーションを経由するデータリポジトリとして定義される。それは、生のSQLエンコーディングを使用するRepositoryを構成するステレオタイプリポジトリのアノテーションだ。 実装は、実行時にMicronaut Dataによって自動的に生成される。CrudRepositoryインターフェイスは、作成、読み込み、更新、削除の操作を自動的に提供する。movieテーブルは@Joinアノテーションを介してdirectorテーブルと結合される。

クエリ演算

アプリケーションのPOJO、リポジトリ、およびコントローラに基づいて、Micronaut Dataは適切なクエリを演算する。次のテストを考えてみる。

    
@Inject
BeanContext beanContext;

@Test
void testQuery() {
    String query = beanContext.getBeanDefinition(MovieRepository.class)
                .getRequiredMethod("findByName",String.class)
                .getAnnotationMetadata()
                .stringValue(Query.class)
                .get();
        assertEquals(
                "SELECT ...FROM ...INNER JOIN ...ON ...WHERE ...",
                query
                );
        }
    

注入されたMicronaut BeanContextMovieRepositoryインターフェイスで定義されたfindByName()メソッドに基づいて完全なクエリを生成するだろう。

    
SELECT movie_.`id`,movie_.`name`,movie_.`director_id`,movie_.`type`,movie_.`year`,movie_director_.`last_name` AS
director_last_name,movie_director_.`first_name` AS director_first_name,movie_director_.`name` AS director_name FROM
`movie` movie_ INNER JOIN `director` movie_director_ ON movie_.`director_id`=movie_director_.`id` WHERE (movie_.`name` = ?)
    

完全な包括的な例はGitHubにある。

Micronaut 2.0への道

Micronaut 2.0に向けて、Micronautチームは以下のような改善を計画している。

  • SQL、Neo4j、MongoDB用のReactive Micronaut Data
  • HTTP/2 サポート
  • サーバーレス対応の改善
  • MavenとGradleのための新しいビルドプラグイン
  • さらなる性能向上

Micronaut Dataは、Micronaut AWSMicronaut GCPMicronaut for SpringMicronaut RabbitMQMicronaut Testなどの他のMicronautプロジェクトに参加している。

編集部注

最近のマイナーなMicronaut 1.3.3のリリースでは、GraalVM 20.0.0をサポートしている。

この記事に星をつける

おすすめ度
スタイル

BT