glassworkトップガイドVaadinのサーバサイドの仕組み

■Vaadinのサーバサイドの仕組み


ここでは、Vaadinのサーバサイドの仕組みについて紹介します。




Vaadin Framework のアプリケーションは、サーブレットコンテナ内で Java サーブレットとして実行されます。 ただし、Java Servlet API はフレームワークの背後に隠されています。 アプリケーションのユーザーインターフェースは UI クラスとして実装され、このクラスがユーザーインターフェースを構成するコンポーネントを作成および管理する必要があります。 ユーザー入力はイベントリスナーで処理されますが、ユーザーインターフェースのコンポーネントを直接データにバインドすることも可能です。 アプリケーションの視覚的なスタイルは、CSS または Sass を使用したテーマで定義されます。 アイコン、その他の画像、ダウンロード可能なファイルはリソースとして扱われ、外部リソースとして提供されるか、アプリケーションサーバーまたはアプリケーション自体によって提供されます。
Vaadin サーバサイドの仕組み

Vaadin Framework アプリケーションのアーキテクチャは、Vaadin Framework を使用して作成されたアプリケーションの基本的なアーキテクチャを示しており、主要な要素をすべて含んでいます。 これらの要素については、以下で紹介し、本章で詳しく説明します。

まず、Vaadin Framework のアプリケーションは、抽象クラス com.vaadin.ui.UI を継承し、init() メソッドを実装する 1 つ以上の UI クラスを持つ必要があります。
カスタムテーマは、UI に対するアノテーションとして定義できます。


Java

@Theme("hellotheme")
public class HelloWorld extends UI {
    protected void init(VaadinRequest request) {
     ... initialization code goes here ...
    }
}


UI は、Web ページ内で実行されるアプリケーションのビューポートです。 1 つの Web ページ内に複数の UI を持つことも可能であり、特にポータル内のポートレットでは一般的な状況です。 アプリケーションは複数のブラウザウィンドウで実行でき、それぞれが異なる UI インスタンスを持ちます。 アプリケーションの UI は、同じ UI クラスを使用することも、異なる UI クラスを使用することもできます。

Vaadin Framework はサーブレットリクエストを内部で処理し、リクエストをユーザーセッションと UI の状態に関連付けます。 これにより、Vaadin Framework を使用したアプリケーション開発は、デスクトップアプリケーションの開発と同じような感覚で行うことができます。

初期化において最も重要な作業は、初期ユーザーインターフェースの作成です。 これに加えて、「Deploying an Application」で説明されているように、UI を Servlet コンテナ内の Java サーブレットとしてデプロイすることが、アプリケーションの最小要件となります。

以下に、UI 以外のアプリケーションの基本的な要素について簡単に概要を示します。

UI UI は、Web ページ内で Vaadin アプリケーションが実行される HTML フラグメントを表します。 通常はページ全体を占めますが、ページの一部として動作することも可能です。 Vaadin Framework を使用してアプリケーションを開発する際は、UI クラスを拡張し、そこにコンテンツを追加するのが一般的です。>
UI は本質的に、アプリケーションのユーザーセッションに接続されたビューポートであり、特にマルチウィンドウアプリケーションでは複数のビューを持つことができます。 通常、ユーザーが UI の URL で新しいページを開くと、そのページ用に新しい UI インスタンス(および関連する Page オブジェクト)が自動的に作成されます。 ただし、すべての UI は同じユーザーセッションを共有します。

現在の UI オブジェクトは、UI.getCurrent() を使用してグローバルにアクセスできます。 この静的メソッドは、現在処理中のリクエストに対応するスレッドローカルな UI インスタンスを返します。(「ThreadLocal Pattern」を参照)
Page UI は Page オブジェクトと関連付けられており、この Page オブジェクトは、UI が実行されている Web ページおよびブラウザウィンドウを表します。

現在処理中のリクエストに対応する Page オブジェクトには、Vaadin アプリケーション内で Page.getCurrent() を使用してグローバルにアクセスできます。これは UI.getCurrent().getPage() を呼び出すのと同じ意味になります。
Vaadin Session VaadinSession オブジェクトは、アプリケーション内で 1 つ以上の UI を開いているユーザーセッションを表します。 セッションは、ユーザーが最初に Vaadin アプリケーションの UI を開いたときに開始され、サーバー上でセッションが期限切れになるか、明示的に閉じられたときに終了します。
User Interface Components ユーザーインターフェースは、アプリケーションによって作成されるコンポーネントで構成されます。 これらのコンポーネントは、特殊なレイアウトコンポーネントを使用して階層的に配置され、階層の最上位にはコンテンツルートレイアウトが存在します。 ユーザーがコンポーネントと対話すると、コンポーネントに関連するイベントが発生し、アプリケーションがそれを処理できます。 フィールドコンポーネントは値の入力を目的としており、フレームワークのデータモデルを使用してデータに直接バインドすることが可能です。 独自のユーザーインターフェースコンポーネントは、継承またはコンポジション(合成)を使用して作成できます。 ユーザーインターフェースコンポーネントの詳細なリファレンスについては「User Interface Components」、 レイアウトコンポーネントについては「Managing Layout」、 コンポーネントの合成については「Composition with Composite and CustomComponent」を参照してください。
Resources ユーザーインターフェースには、画像を表示したり、Web ページやダウンロード可能なドキュメントへのリンクを含めたりすることができます。 これらは リソース として扱われ、外部リソースとして提供される場合もあれば、Web サーバーやアプリケーション自体によって提供される場合もあります。 リソースの種類についての実践的な概要は、「Images and Other Resources」を参照してください。
Themes ユーザーインターフェースの プレゼンテーション(見た目) と ロジック は分離されています。 UI のロジックは Java コードとして処理される一方、プレゼンテーションは CSS または SCSS を使用したテーマ によって定義されます。 Vaadin にはいくつかの 組み込みテーマ が含まれています。 また、ユーザーが定義したカスタムテーマには、スタイルシートに加えて、独自のレイアウトを定義する HTML テンプレート や 画像などのテーマリソース を含めることができます。 テーマ の詳細については「Themes」、 カスタムレイアウト については「Custom Layouts」、 テーマリソース については「Theme Resources」を参照してください。
Data Binding データバインディングを使用すると、Vaadin Framework の任意のフィールドコンポーネントを、JavaBeans などの ビジネスオブジェクトのプロパティ にバインドし、フォームとしてまとめることができます。 コンポーネントは、データモデルから直接値を取得したり、ユーザー入力をデータモデルに更新したりできるため、制御コードを記述する必要がありません。 同様に、任意の セレクトコンポーネント を データプロバイダー にバインドすることで、Java コレクションや SQL データベースなどのバックエンドからアイテムを取得できます。 Vaadin におけるデータバインディングの詳細な概要については、「Binding Components to Data」を参照してください。
[作成日 2025/03/07]