ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Write Once, Run Anywhere !コミュのJakarta? Tomcat?

  • mixiチェック
  • このエントリーをはてなブックマークに追加
 今まで、Windows 系では転がってるサンプルを加工してなんとなくプログラミングができるようになる・・・というやり方でやってきましたが、この方法だと即戦力になっても基礎体力が身につかないっす。

というわけで、せっかくなので、基本を押さえるべく、Tomcatの本を今更ながら勉強・・・

Jakarta Tomcatエキスパートガイド
―Webアプリケーションのための環境構築(2004/11第2版)
http://www.amazon.co.jp/exec/obidos/ASIN/479732287X/249-5493870-8570725

半日で簡単な Web-Application を自作できるレベルになるかな?と、ドキドキしながら苦手な読書を美容院で髪切りながら、デニーズで飯食いながら、やってみました。
(家だと、テレビ見たり、ヤフオク見たり、mixiしたり、エロサイト見たり・・・集中できんとです・・・)

全19章+付録で、667ページもある読み応えありすぎるボリューム。4章くらいまで読んで、とんでもないことに気付きました・・・

この本は、タイトルの通り「環境構成」に特化したエキスパート向けの本で、環境設定のためのリファレンスとしてかなり役立ちそうですが、アプリの実装については書かれてないのねー!!結局、7章くらいまで読んでフリーズ・・・

でも、Tomcatの生まれた歴史的背景を前半で教えてくれるので、ややこしいJ2EEの世界の体系をスマート(でもないかも)にまとめて教えてくれて、序章〜7章までは、体系や単語の整理〜インストール方法(Win/Linux両方)〜セットアップ方法と各種設定の意味を教えてくれます。この部分は基礎の基礎を学ぶのに凄く役立つと思います。
(でも、基本は設定方法の本なので、慣れてきてから細かい設定のリファレンスとして役に立ちそうです。バージョンさえ大きく変わらなければ・・・)

コメント(6)

で、うっとおしい前置きはさておき、

そもそも、Tomcat って何?ってのを簡単にまとめると、

「NCSA」- インターネット初期のWEBサーバー
     http://e-words.jp/w/NCSA.html
  ↓
「Apache」- NCSAの改良版で世界的に普及
     http://e-words.jp/w/Apache.html
     「ASF」管理下の元、現在も普及促進
     http://apache.org/
  ↓
「CGI登場」- 動的なHTMLコンテンツを作成可能に!
     http://e-words.jp/w/CGI.html
  ↓
「JAVA servlet 登場」- CGI の弱点を克服
     http://e-words.jp/w/JavaE382B5E383BCE38396E383ACE38383E38388.html
     SUN は独自の Java Web Server としてリリース
     http://www.jiten.com/dicmi/docs/j/6446s.htm
     しかし、堅牢性に欠け、ASF は Apache と連携可能
     な、JServをリリース。結局 SUN は Servlet の
     コードを ASF に寄贈。
  ↓
「Jakarta プロジェクト」- ASFがApacheとServletの融合を目指す
     http://e-words.jp/w/JakartaE38397E383ADE382B8E382A7E382AFE38388.html
  ↓
「Tomcat 登場」- Jakarta プロジェクトの1つとして、Tomcatサーバ
     が誕生する。SUN 公式の Servlet、JSP に準拠し、
     広く普及する。
     http://e-words.jp/w/Tomcat.html

     後にMVCモデルに合わせたStrutsなども生まれる
     http://e-words.jp/w/Struts.html


簡単にまとめると、
 ApacheがWEB Serverとして全世界に普及すると、静的なHTMLでは機能不足で、CGIによる動的なHTMLの作成を可能にしたが、CGIはパフォーマンスとサービスに限界があり、弱点を克服するため、Java Servlet (Webサーバ上で実行されるモジュール(部品)化されたJavaプログラム)という技術が生まれ、SUNがServletを取り入れた独自のWEB-Serverをリリースするが普及せず・・・。結局SUNはServletのコードをASFというApache促進の団体に寄贈。
 ASFはApacheとServletの融合を目指し、Jakarta プロジェクトを立上げ。そのプロジェクトの1つとして、SUNのServletとJSPの仕様に完全に準拠し、SUN公認の参照実装(RI)として、Tomcatサーバが誕生!

という歴史を経て、ASFとSUN公認のWEB-Application Serverである、Tomcatの登場ってなワケなのよ、奥さん。

  ↓
<補足>
これでJakartaとかTomcatとかServlet・・・という何がなんなのか分からん単語の意味は理解し、体系化できますた・・・
ところで、J2EEってのは何?Tomcatとは別物なの??

その前に J2EE って何?

J2EE
http://e-words.jp/w/J2EE.html
"Sun Microsystems社のプログラミング言語「Java 2」の機能セットの一つで、企業の業務システムや電子商取引などで使われるサーバに必要な機能をまとめたもの。
 標準機能セットのJava 2 Standard Edition(J2SE)に、サーバ用のAPIや諸機能を付加したもの。"
(JAVA 2:JDK 1.2以降の別名:http://e-words.jp/w/Java202.html)

要するに、J2SEをEnterprise向けの大規模なサーバ用に拡張したJAVA 2の機能(API 群)の盛り合わせで、JSPやServletはもちろん、CORBAまで包括しちゃう大規模なセットなのね。

でも、JSPやServletを動かすのに、J2EEの全機能はいらないってことで、J2EEの部分的な機能に特化したのが、Tomcatってこと。


ついでに・・・
JAVAの本によく出てくる、EJBとかJAVA Beansって何なの?

EJB
http://e-words.jp/w/EJB.html
"Java言語でプログラム部品を作成し、それらをつなぎ合わせてアプリケーションソフトを構築するためのJavaBeans仕様に、ネットワーク分散型ビジネスアプリケーションのサーバ側の処理に必要な機能を追加したもの。"

Java Beans
http://e-words.jp/w/JavaBeans.html
"Java言語を用いて開発され、部品化されたプログラム(Beanと呼ばれる)を組みあわせてアプリケーションソフトを構築する手法。また、Java言語でBeanを作成するための技術仕様。"

なるへそー、Java Beans は Windows でいうところの COM コンポーネントみたいなもんで、EJBはそれをネットワーク分散型に拡張したDCOMみたいなもんなんですね?博士?

そうじゃよ、ひろし君。
さらにJ2EEの中にはJTA(JAVA Transaction API)というものがあって、COM+のようにコンポーネントのトランザクションを管理、つまり協調分散処理を実現し、より堅牢性を増した機能もあるんじゃ。

JTA
http://e-words.jp/w/JTA.html

へー、"e-Word"さんから説明をパクリまくりだけど、JAVA関連のWEB-Applicationによく出てくる、ワケ分からん単語がよく分かったよ、博士!


それでは次回はいよいよ、Tomcatのアーキテクチャについてじゃ、ケンジ君!
<うんこタイム>

トイレから携帯でこんにちは。

Microsoft や SUN Microsytems、ASF 等オープンソースの促進団体・・・IT発祥の地、アメーリカ人がほとんどなのね。
アメーリカ人は文化的に、固有名称を3文字単語にやくしたがる人達です。

だから、JSP やら、ASP・・・なんて、女子高生にはサッパリ意味が分からん単語が生まれまくり、分かりにくいものをさらに分かりにくくしてくれやがります。おかげで、IT専門用語で女子高生と話をしても、ヲタ扱いされるだけです・・・。
http://rikunabi-next.yahoo.co.jp/tech/docs/ct_s03500.jsp?p=bpc014

こーいう文化の違いを予め知ってると、いきなり出てくる謎の略語にも、おじけずに済みます。

と、COM や JAVA Beans というものは、各社がそれぞれ勝手に決めたコンポーネントモデルの仕様であって、実体ではないんです。実体は各社が仕様に沿って実装した物であったり、サードパーティが実装したものであったり、貴方が実装するかもしれません。

仕様と実体を混同して考えると難しいものが更に難しくなります。昔からのソフトウェア屋さんや、初めてプログラミングに触れる人は、まず、この仕様と実体の区別がつかず、混乱のドツボに陥れられ、ウンザリします・・・
(僕もそうでした・・・。COM コンポーネントの実態が分からなくて、COM ポートの事かと考えてみたり・・・)

C 言語は多少分かるけど、MFC や JSP が理解できん・・・
main() はどこだ?どこからプログラムが始まるんだ?!
なんて人は、多いと思います。僕もそうでした。

理解しがたいのは、先入観や既成概念によるものです。
例えば、純粋なANSI の C 言語を知ってる人はまず main() 関数を探して、コードのエントリポイントを探すと思います。
でも、MFCにもJSPにも無いです・・・大混乱です・・・
それは、main()から全てが始まるという自分自身の既成概念が、自分自身を悩ませます・・・

API や SDK で定義される関数やクラス、メソッド等以外のわけのわからんモノは、仕様であり、概念であり、ルールであることを理解する必要があります。

ルールを知り、ルールに従えば、あら不思議・・・ C 言語の知識でほとんどの他の言語や仕様を理解できて、コードがサクサク書けちゃいます。

しかし、このルール(仕様という名の概念)と謎の略語に、どーしても中々なじめず、とっかかりにくいもんです・・・
.NET Framework なんかが典型例です。多くのデベロッパーが、リリース当初、.NET ってなんぞや?と首をかしげて、実体を探ろうとしてドツボにハマッたと思います・・・

しかし、一旦ルールが理解できれば、あとは従ってかくだけ。
難しいことじゃないんです。脳みそを溶かして既成概念を捨て、ただルールに従えばいいんです・・・


「郷に入っては郷に従え」ってことですね。
さて、いよいよ Tomcat のアーキテクチャについて

----------

その前に(JAVAの) WEB-Application のベースとなる、

 MVC(Model View Controller) アーキテクチャ

を理解しましょう。(画像1 参照)
MVC アーキテクチャはモデル、ビュー、コントローラから成り立つ、シンプルなモデルで、

モデル・・・
 コンポーネントあるいはサイトのロジックであり、誰に何を表示するかを決めるルールです。

ビュー・・・
 コンポーネントは JSP ページであり、作成されるコンテンツを表示します。

コントローラ・・・
 モデルのどの部分を呼び出すか決定し、どのJSPページを使ってデータを表示するかを指示します。

画像1はMVCアーキテクチャの最もシンプルなイメージを示しています。

----------

さて、MVC の概念をふまえて、
Tomcat のアーキテクチャを見てみよう。

バージョン別に異なるようだけど、現行のバージョン4.xや5.x はおおむね「画像 2」のようなモデル(トポロジ)。

この図の内、いくつかのオブジェクトが無くともサーバの働きに影響はありません。
(例えば、外部WEBサーバ(Apatch等)がWebアプリケーションへリクエストを処理するタスクを実行しているなら、エンジンとホストは必要ありません・・・)

図中のそれぞれのオブジェクトを見ていきましょう。

サーバ・・・
 WEBアプリケーションサーバのインスタンスとしてのTomcat自身であり、トップレベルのコンポーネントで、ポートを所有します。(単一マシン上に複数のサーバを用意してそれぞれ異なるポートを割り当て動作させることもできます)

サービス・・・
 サービスはコンテナ(この場合、エンジン)とそのコネクタをグループ化します。グループ化して名前を付けて識別できるようにします。

コネクタ・・・
 WEBアプリケーションとクライント(ブラウザ等)との橋渡しを行います。TomcatをStand Aloneモードにしている場合、(既定では)8080ポートの"AJPコネクタ"を通して、エンジンにアクセスします。
 また、単一のエンジンに対し、複数のコネクタ(各々、一意のポート)を設定することも可能です。

エンジン・・・
 エンジンはリクエストを処理するコンポーネントであり、Catalina サーブレット(Tomcat4のコア・サーブレット)のエンジンを表しています。エンジンはHTTPヘッダをチェックして、どの仮想ホスト、またはコンテキストにリクエストを渡すか判別します。

レルム・・・
 エンジンのレルムは、ユーザー認証と許可を管理します。アプリケーションの設定の一部として、管理者は各リソース又はリソースのグループにアクセスできるロール(役割)を設定します。(レルムの認証方法は様々な物が使えます)

バルブ・・・
 リクエストを傍受(Intercept)し、事前処理するためのコンポーネントで、サーバ上の全てのホストへのログインを単一化する他、リクエストのパターン、クライアントのIP、サーバの使用パターン等をログに出力するのに使われます。
(イマイチ、イメージがつかめない・・・)

ロガー・・・
 コンポーネントの内部状態を報告(ログ出力)します。
トップレベルのコンテナ(コンポーネント)にロガーを設定すると、全ての子コンテナにも自動的に割り当てられます。

ホスト・・・
 Apacheの仮想ホストと似た機能を持ち、仮想ホストは単一マシン上で複数のサーバ(異なるホスト名)を使用可能にします。

コンテキスト・・・
 Webアプリケーションのことを「コンテキスト」とも呼ばれます。コンテキストではアプリケーションの初期化のパラメータやアクセス制御(認証と許可の制限)を設定することも可能です。

その他・・・
 Tomcatでは、リクエスト、レスポンス、セッション、リスナを表すクラスも定義し、接続等も扱います。


以上が、Tomcat の構造及び、構成される要素となります。
Web-Applicationを作成し、上記のコンポーネントの設定を行い、クライアントから使用可能となります。

また、ApacheやDatabeseサーバと組み合わせて使用すると、具体的には画像 3 のような構成になります。



- 参考情報

http://www.itmedia.co.jp/developer/java/tomcat/01/index.html

http://www.itmedia.co.jp/developer/java/tomcat/02/index.html

http://www.itmedia.co.jp/developer/java/tomcat/03/index.html





さて、アーキテクチャを理解し、各種設定が整えば、いよいよWeb-Applicationの開発です!
うはー。吐き気がする説明ですな > IT Media
---
「コンテキスト」とはWebアプリケーションを配置するために「コンテナ」と呼ぶ領域で仕切ったものである
---
2.コンテキストを用意する
---

完全に「コンテキスト」を誤解してる。ひどい……。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Write Once, Run Anywhere ! 更新情報

Write Once, Run Anywhere !のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。