Upload
2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概���(1)-アーキテクチャ、データソース
•
12 likes
•
5,124 views
E
Enpel
Follow
Report
Share
Related slideshows
PostgreSQLのパスワードの謎を追え!
PostgreSQLのパスワードの謎を追え!
Amazon ECS AWS Fargate あるとき~ ないとき~ (トレノケ雲の会 mod2)
Amazon ECS AWS Fargate あるとき~ ないとき~ (トレノケ雲の会 mod2)
ASTERIA WARPをもっと便利に使いこなすためのtips紹介
ASTERIA WARPをもっと便利に使いこなすためのtips紹介
Report
Share
1 of 23
Download now
Download to read offline
More Related Content
2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(1)-アーキテクチャ、データソース
1.
この章では、Tomcat がどのように構成されているか(アーキテクチャ)を理解し、各構成ファイルの役割について学習しま す。 また、構成ファイルを設定するためのGUIの管理ツールの使用方法についても学習します。 アプリケーション・サーバーが持つ機能として、データソースとセッション管理についての概念を学習します。
2.
Webアプリケーションによるサービスを提供するにあたっては、Webアプリケーション・サーバー以外の複数のサービ ス、HTTPサーバーやデータベース・サーバーと連携することが一般的です。 また、Webアプリケーション・サーバーであるTomcatの中でもさまざまな機能が連携して、ブラウザからのリクエストに 対するサービスを提供しています。 この章では、Tomcatがさまざまな機能を提供するコンポーネントについて学習していきます。
3.
Tomcatはネストされた複数のコンポーネントからなり、トップレベル・コンポーネント、コネクタ、コンテナ、ネスト化 コンポーネントに分類されます。 コンポーネントのいくつかはトップレベル・コンポーネントと呼ばれ、階層の一番上位に位置します。 また、コンテナと呼ばれるコンポーネントは、他のコンポーネントの入れ物となります。 自分自身は他のコンポーネント の入れ物とは成り得ず、コンテナ内に入ることだけができるコンポーネントをネスト化コンポーネントと呼びます。
4.
トップレベルコンポーネントは、階層構造からなるコンポーネントの最上位に来るコンポーネントです。 ■Server :Webアプリケーション・サーバーのインスタンスで、Tomcat自身です。 停止リクエストを受け付けるポートを所有しており、サーバーのシャットダウンに使用されます。このポートへのアク セスは、Tomcatを実行しているコンピュータからしか行えません。ファイルの中に記述できるServerは1つだけです。
5.
■Service :1つのエンジン(コンテナ)に接続されるすべてのコネクタをあらわしたものです。 コネクタは特定のプロトコルによって特定のポートに到着したリクエストを受け付け、処理を行うエンジンに引き渡 します。 そのため、Serviceには1つ以上のConnector要素と1つ以上のEngine要素が必要です。
6.
■コネクタ(Connector) :コネクタはWeb アプリケーションとクライアントの橋渡しを行います。 コネクタはクライアントからのリクエストを受け取り、サーバーのポートへ送ります。デフォルトのコネクタはCoyote で、HTTP 1.1をサポートし、ブラウザとの直接的な接続を行います。コネクタには、上図のようないくつかの種類がありま す。
7.
ここでは、他のコンポーネントの入れ物ともなるコンテナ・コンポーネントについて学習します。 ■Engine :リクエストを処理するコンポーネントです。 EngineはHTTPヘッダをチェックして、どの仮想ホストまたはContextにリクエストを渡すか判別します。 HTTPサーバーに Javaサーブレットのサポートを提供するよう設定している場合は、HTTPサーバーがリクエストの正しい宛先を判別します。
8.
■Host :Apacheの仮想ホストと似た機能を持っており、リクエストの処理を行うホストを表現したものです。 1つのEngine上で複数のホストを使用することを可能とします。 仮想ホストとは、複数ドメインに対するサービス要求を単一のサーバーで対処する機能です。 Apacheの仮想ホストでは、 名前ベースまたはIPベースの仮想ホストで識別されますが、Tomcat での仮想ホストはFQDN(完全修飾ホスト名)によっ て識別されます。
そのため、Hostの設定では、ホスト名を決定します。このホスト名は、DNSやhostsファイルで名前解決 される必要があります。
9.
■Context :Webアプリケーション(warファイル)は、コンテキストとも呼ばれます。 Webアプリケーションを設定するには、Engine/Hostに知らせる必要があります。動的なリロードを可能にしておけ ば、クラスが変更されるたびにリロードされ、最新のWebアプリケーションが実行されます。
10.
■レルム :セキュリティを提供するもので、ユーザー認証と許可を管理します。レルムはEngine全体に対して適用されます。レルム 方式とは認証を行う際のユーザー、パスワード、ロール情報にアクセスする際のアクセス方法で、JDBC経由やJNDI経由な どのいくつかの方法がありますが、デフォルトではtomcat-users.xmlファイルの情報をメモリに格納して使用します。ロー ル(役割)はユーザーをグループ化するものです。管理者は各リソースにアクセスできるロールを設定します。
11.
■バルブ :バルブはリクエストをインターセプトし、事前処理するためのコンポーネントです。 Server上のすべてのHostへのログインの単一化(シングル・サインオン)に使われたり、リクエストのパターン、クラ イアントのIPアドレス、サーバーの使用パターン(ピーク・トラフィック、帯域の使用、単位時間当たりの平均リクエスト 数)などをログに出力するのに使われます。
12.
Tomcatの設定は、server.xmlというファイルに記述されています。server.xmlファイルを変更した場合は、Tomcatを再起 動することにより反映されます。 < Server >要素の下に<
Service >要素が、< Service >要素の下に< Connector >要素と< Engine >要素が、 < Engine >要素の 下に< Realm >と< Host >要素が定義されています。 < Connector >と< Realm >以外はname属性があり、名前がつけられて います。 < Host >要素にはデフォルトでlocalhostが登録されています。任意の新しいホストを登録することもできます。
13.
コネクション・プーリングとは、データベースへの接続(コネクション)を保持(プール)しておくことです。 一般的な アプリケーションでは、データベースに対してリクエストがあるたびに接続を確立します。 リクエストごとにコネクショ ンの確立・切断をしていると時間がかかり、コネクション数が増えた場合にパフォーマンスの低下や、
システムの安定性 にも影響が出る可能性があります。コネクションを管理するクラスがあらかじめ設定された数のコネクションを確立し、 Webアプリケーションからの要求によってコネクションを貸し出し、Webアプリケーションはデータベース処理が終わっ たらコネクションを管理クラスに返します。
14.
データソース(DataSource) とは、プログラムとデータベースへの接続との間のインタフェースで、データベースへの接続 を取得するために使用されます。 データソースを取得するには通常JNDI(Java
Naming Directory Interface)を使用しま す。データソースを使用して取得できるのは、Connectionオブジェクトです。
15.
Javaプログラムからデータベースに接続する方法は2種類あります。 従来から使用されているJDBCのDriverManagerを使 用する方法と、JDBC 2.0から使用できるようになったDataSourceを使った方法の2つです。 データベースにアクセスするたびにDriverManagerで接続するのは非常に効率が悪くなります。
パフォーマンスを向上さ せるためには、コネクション・プールを利用します。コネクション・プールの利用には、データソースを使用します。
16.
DriverManagerの場合、データベース接続に必要なデータベース・ドライバやURLなどの情報をプログラム内に記述しま す。そのため、データベースが変更された場合、プログラムの変更を伴います。 データソースの場合、プログラムにはデータベースに対する論理的な名前を記述し、実際に必要なデータベースの情報は xmlファイルに記述します。したがって、データベースが変更された場合でも、プログラムの変更は必要なく、xmlファイル のデータベース情報を変更することにより対応できます。
17.
DriverManager接続では、使用するデータベースの環境が変更されると、データベースにアクセスするプログラムの記述 も変更しなければなりません。 たとえば、テスト環境と本番環境では使用するデータベースが異なりますから、データベースのurlは変更しなければなり ませんし、接続するユーザーやパスワードも異なるでしょう。もしデータベース製品も異なるのであれば、データベー ス・ドライバの変更も必要になります。
18.
データソースを使用する場合、データベースへの接続はTomcatが行います。 データソースを利用するには、JNDIサービスが動いているサーバーが必要です。TomcatにはJNDIサービスの機能があるの で、それを利用します。 JNDIのリソースの設定は、Tomcatのserver.xmlに< Resource >要素として記述します。ここで設定���るJNDI上のリソース名を グローバル名といいます。
19.
Webアプリケーション側では、データソースを使用してデータベースに接続するサーブレット等を作成します。 データソー スはJNDIルックアップで取得できます。ルックアップの引数には、 java:comp/env/ローカル・リソース名 を指定します。このjava:comp/envで始まる名前をローカル名といいます。
20.
この2つを結びつけるのが、リソースリンクとなります。 リソースリンクはXMLファイルで、ローカル名とグローバル名 のマッピングを行います。 使用するデータベースの変更の際には、新しいデータベース用にデータソースの定義をserver.xmlに行い、 リソースリン ク・ファイル上のグローバル名を新しいデータベースのデータソースに変更することにより、Webアプリケーション側の ローカル名の変更を行うことなく、アクセスするデータベースが切り替わります。 Webアプリケーション側で変更をすると、プログラムのコンパイルとパッケージングおよびTomcatへの再デプロイが必 要となります。
21.
■JNDI :Javaでネーミング・サービス、ディレクトリ・サービスを利用できるようにするAPI ネーミング・サービスとは、文字列で表現される名前と特定のオブジェクトとを関連づけるサービスで、論理名(JNDI 名)を指定すると、それに対応するオブジェクトを得ることができます。ディレクトリ・サービスとは、各オブジェクト が属性を持つことができ、属性による検索をサポートするサービスで、JNDIのサービスを利用してDataSourceを取得しま すが、他にもJMS(Java Message Service)の管理オブジェクトやEJB(Tomcatでは使用不可)などを取得する際にも用 いられます。
22.
0. サーバーの構成ファイルからJNDI名とリソースの情報を取得して、DataSource/JMS/EJBオブジェクトを生成し、JNDI がJNDI名とオブジェクトを紐付ける 1. Javaプログラムは、JNDIに対してJNDI名に対応するリソースを問い合わせる 2.
JNDIは、JNDI名に対するリソースをJavaプログラムに返す 3. Javaプログラムは、2.で取得したリソースに対して操作を行う
23.
■JNDIを利用するメリット :リソースを、JNDIを用いてJavaのプログラムからJNDI名で呼び出しを行うことによって、リソースの実体をJavaのプ ログラムから隔離することができます。このことにより、環境の変化(DBの変更など)によってJavaプログラムを変更 する必要がなくなり、アプリケーションのポータビリティが向上すると言えます。
Download now