JavaRush /Java Blog /Random-JA /コーヒーブレイク#119。Java Enterprise Edition (Java EE) の概要

コーヒーブレイク#119。Java Enterprise Edition (Java EE) の概要

Random-JA グループに公開済み
出典: Dev.to Java Enterprise Edition (Java EE) は、中規模および大企業の問題を​​解決するためのサーバー プラットフォーム アーキテクチャを説明する Java 言語の仕様とドキュメントのセットです。 コーヒーブレイク#118。 Java Enterprise Edition (Java EE) の概要 - 1Java EE を学習すると、次の用語に遭遇します。
  • アプリケーション サーバーは、抽象的な Java EE 仕様を具体的に実装したものです。例: Payara Server (Glassfish)、IBM OpenLiberty、JBoss Wildfly。

  • Java 仕様リクエスト(JSR) は、Java コミュニティに対するテクノロジの追加と改善を求める正式なリクエストです。Java テクノロジー プラットフォーム上の API を標準化する団体であり、JAX-RS (Java API for RESTful Web Services) などの API をブロックにグループ化するために使用されます。すべての JSR には、常にデフォルトの参照実装が存在します。

  • 参照実装は、具体的な実装/抽象 JSR の実装です。たとえば、JAX-RS のリファレンス実装は Jersey と呼ばれます。Java EE自体はJSRです。したがって、アプリケーション サーバーは、さまざまな Java EE JSR リファレンス実装の集合です。Java EE は JSR 366 であり、そのリファレンス実装の 1 つが Glassfish 5 です。

  • Jakarta EE は、 2018 年から始まる Java EE の新しい名前です。現在、Oracle は Java プラットフォームをEclipse Foundationの管理下に移管しています。

JavaEEの基本

Java EE には 3 つの主要な API があります。
  1. Java Persistence API (JPA)。リレーショナル データベースへの情報の保存と取得を担当します。リレーショナル データベースは、NoSQL データベースで動作するように拡張できます。これはアプリケーションのデータ層です。

  2. コンテキストと依存関係の挿入 (CDI API)。これは、アプリケーションのカップリングを軽減するための標準化された方法です。さまざまなコンポーネントの相互作用を管理して、自由なデカップリングを保証します。

  3. RESTful Web サービス用の Java API (JAX-RS)。HTTP 経由でリソースを Web サービスとして提供します。

コンテキストと依存関係の挿入 API

依存関係の注入は、特殊な形式の反転制御 (個々のコンポーネントが依存関係を受け取るソフトウェア戦略) です。これにより、アプリケーション内の依存関係が外部化され、低結合コンポーネントが作成されます。

CDIの特徴

  • 依存関係の注入 (Typesafe) を使用すると、型に対する依存関係を宣言して、コンパイラが実行時にエラーをキャッチできるようにします。

  • ライフサイクル コンテキストは、ライフサイクルとステートフル コンポーネントの相互作用を、明確に定義された拡張可能なライフサイクル コンポーネントに結び付ける機能です。

  • インターセプターを使用すると、特定のメソッドにアクセスするリクエストをインターセプトできます。

  • イベントは、高度に分離されたアプリケーションを開発する方法です。Observers メソッドが発生したイベントをリッスンしている間に、イベントを発生させることができます。

  • サービス プロバイダー インターフェイス (SPI) は、 Apache ライブラリなどの拡張機能として使用できる一連の手法、API、およびインターフェイスです。

CDI API のいくつかの概念:

  • CDI Bean Discovery は、依存関係注入フレームワークが Bean を解析して検出し、デフォルトで Bean (つまり、@Annotated などのアノテーションが付いた Bean) を検出する方法を制御するメカニズムです。Bean 検出モードには、ALL (アノテーションのない Bean を含む)、ANNOTATED、NONE の 3 種類があります。

  • CDI コンテナは、Java クラスがその機能を出入りするファクトリ メソッドです。これはBeanを管理するアプリケーションです。

  • Bean インスタンスとコンテキスト インスタンス。Bean は開発者が作成するテンプレートです。コンテキスト インスタンスは、CDI コンテナによって作成および管理される Bean のインスタンスです。

Java永続性API

JPA は、オブジェクトをリレーショナル データベース テーブルにマップするために使用されます。Java Persistence API は、ORM マニフェストの原則に従います。 ORM マニフェスト (オブジェクト リレーショナル マッピング マニフェスト):
  • テーブルではなくオブジェクト:開発者はテーブルではなくオブジェクトを作成します。

  • 無知ではなく利便性: ORM は便利である必要があります。開発者はリレーショナル データベースに関する最低限の知識を持っている必要があります。ORM は無知を隠す方法ではなく、利便性を提供するものです。

  • 目立たず透過的: ORM は、開発者がデータベース内の内容を制御し、保存される内容を完全に制御できるようにする必要があります。レガシー データ、新しいオブジェクト: ORM を使用すると、レガシー データから新しいオブジェクトを作成できます。つまり、レガシー データベースを Java オブジェクトに再構築できます。

  • 十分ではありますが、多すぎません。ORM は、インピーダンスの不一致 (データベース モデルとプログラミング言語の違いによって生じる問題を指す用語) に起因する一般的な問題を解決するためのすべてのツールを提供します。ORM は重すぎてはいけません。

  • 局所性と移動性:データはローカルですが、アプリケーションの永続的な状態がアプリケーションの別の部分に移動できる必要があります。

  • 標準 API、プラグ可能な実装:標準 API に依存しますが、必要に応じて実装を変更できます。

JPA の重要な概念: JPA エンティティ
  • JPA オブジェクトの最もモジュール化されたコンポーネントは、Plain Old Java Object (POJO) です。各オブジェクトには一意の識別子が必要です。

  • JPA エンティティは通常、@MappedSuperClass などのアノテーションを使用します。これにより、共通のエンティティ フィールドを含むスーパークラスの使用が可能になります。@AttributeOverride アノテーションは、スーパークラス エンティティをオーバーライドするために使用されます。@Column はデータベース マッピングを構成するために使用されます。@Transient アノテーションは、データベースにマップすべきでないエンティティ クラスのフィールドに使用できます。

  • アクセス タイプは、永続化プロバイダーがエンティティ内の状態にアクセスするプロセスです。フィールド アクセスは、プロバイダーがリフレクションを通じてクラスのフィールドに直接アクセスするときに発生します。プロパティへのアクセスは、Java Bean プロパティ メソッドを使用して状態にアクセスするとき、つまりゲッターとセッターを使用するときに発生します。プロパティ アクセスを使用するには、ゲッターに @Id アノテーションを付ける必要があります。混合アクセス タイプでは、@Access アノテーションを使用して、同じエンティティ クラス内のフィールドとプロパティの両方にアクセスします。

RESTful Webサービス用のJava API

REST アーキテクチャの制限:
  1. クライアントとサーバーは互いに独立しています。

  2. ステートレス: サーバーに到着する個々のリクエストは自律的で固有です。サーバーは、前のリクエストからいかなる仮定も行いません。

  3. キャッシュ可能性: システムは、パフォーマンスとスケーラビリティを向上させるために、さまざまなレベルでのキャッシュをサポートする必要があります。

  4. 統合インターフェイスとは、クライアントがサーバー上のリソースにアクセスしたり、サーバー上のリソースと対話したりするために共通の統合インターフェイスを備えている必要があることを意味します。多層システム: クライアントが負荷分散をサポートするサーバーなどの多層システムについて心配する必要がないように、サーバーをさまざまな層で実装できます。

JAX-RS に関連するいくつかの一般的な概念:
  • HTTP GET メソッド: リソースのリクエスト。GET リクエスト メソッドはべき等です。つまり、メソッドに対して同じリクエストを繰り返し実行しても、サーバー上のリソースやデータの状態は変更されません。

  • HTTP POST メソッド: POST リクエストは、サーバー上に新しいリソースを作成するために使用されます。これにより、サーバー上のデータセットが変更されます。通常、POST には、ペイロードやサーバー上に作成したいものが公開または添付される本体が含まれます。

  • HTTP PUT メソッド: サーバー上のリソースを更新するために意味的に使用されます。

  • HTTP DELETE メソッド: サーバー上のリソースを削除するために使用されます。

  • コンテンツタイプ。クエリ メソッドで使用および作成できるコンテンツには、XML、CSV、EXCEL、TEXT、JSON などの種類があります。

  • JAX-RS には、メッセージ本文を記述するという概念があります。これらは、Java 型をクライアントが予期する型に変換するために使用される API 構造です。@Produces アノテーションを使用して、Java オブジェクトの応答が変換される型を指定できます。

  • @Consumes アノテーションは、特定のリソース メソッドが消費しているコンテンツのタイプを JAX-RS ランタイムに伝えます。次に、JAX-RS ランタイムは、ペイロードとして渡された JSON コンテンツを、メソッド パラメーターと同じ型の Java オブジェクトに変換します。

  • JAX-RS 例外マッパー: 例外を HTTP 応答にマップするために使用される API 構造。@Provider アノテーションは、JAX-RS ランタイムに例外リゾルバーをプログラム的に登録するために使用されます。

これは Java EE の非常に簡単な入門です。Java EE を使用して Web アプリケーションを構築するには、各主要な API をさらに詳しく調べる必要があります。
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION