はじめに
この連載では、「GlassFish」という製品を利用して、Java言語に親しんでもらうことを目的としています。第1回目の今回は、普段はあまり意識しない「アプリケーションサーバとは何か」に焦点を当て、アプリケーションサーバの役割を改めて学んでいきたいと思います。
対象読者
- Javaでなにかしらのアプリケーションを作成したことのある方
- Javaの変数の宣言や、if文・for文・while文の制御文を踏まえてアプリケーションを作成したことのある方
オブジェクト指向プログラミングができなくとも構いません。徐々に学んでいければと考えています。また、学びやすいWebアプリケーションをサンプルとするので、Webアプリケーションとは違った分野を勉強したい方には当連載は向いていません。
改めてアプリケーションサーバって何だろう
GlassFishもアプリケーションサーバの1つです。最近では開発環境がアプリケーションサーバの面倒を見てくれるため、アプリケーションサーバの役割が分かりづらくなってきています。これはこれで開発するには基盤を理解する手間が省け、ビジネスロジックに専念できるというメリットがありますが、Javaの理解を深めたいのであれば、アプリケーションサーバの役割を知ることも重要です。Javaを理解するには言語仕様や開発環境の理解が非常に重要で、それらを解説した入門書もたくさんあります。当連載ではGlassFishを通して今一度アプリケーションサーバという観点からJavaを理解していきたいと考えています。
アプリケーションサーバは何をやってくれるのか
まず、アプリケーションサーバの意味をウィキペディアの「アプリケーションサーバ」のサイト内の記載から、「アプリケーションサーバと呼ぶ場合、一般には Java EEを採用したWebアプリケーションサーバを指し」という箇所に限定して使用します。よくまとめられたいい解説なので、ぜひ目を通してみてください。
Java入門者から「Java SEのインストールが終わったけど、Java EEをどこからインストールするか分からない」という質問を受けたことがあります。こういう質問もありうるのかなと思います。Java EEという場合、Java EEの仕様を指すのか、Java EEの仕様を実装した製品を指すのか曖昧に使用されることが多いからだと思います。また、SunがReference Implementationを提供していた頃の名残かもしれません(今でも提供しているのか調べていませんが本筋とは関係ないのでご容赦ください)。
当連載で紹介するGlassFishも上記のような定義でのアプリケーションサーバです。そのため、Java EEの仕様に従った製品ではありますが、すべてをサポートしているかどうかはマニュアル等で調べる必要があります。例えば、TomcatはJSPやServletはサポートしても、EJBはサポートしていません。GlassFishの中にはTomcatの血も流れていますが、GlassFishはEJBをサポートしています。このように製品によって違いがあるため、Java EEの何をサポートしているかを知ることは重要なことです。
また、次のような機能もGlassFishは備えています。
- JMS(Java Message Service)
- JNDI(JavaNaming and Directory Interface)
- JavaMail
- JBI(Java Business Integration)
- ORB(Object Request Broker)
上記のとおり、Javaを学習するには十分すぎるほどの機能が含まれます。JNDI以外は当入門編では説明しません。応用編を書く機会があればぜひ説明したいところです。
難しい言葉ばかり出てきて余計にアプリケーションサーバがなんだか分からなくなってしまいました。誤解を恐れずに筆者なりの言葉を使うと、アプリケーションサーバとは、「業務システムの開発・構築・運用に耐えうるJavaの機能を乗せたサーバ」です。すごく乱暴な言い方になりましたが、最初はこれくらいの理解で始めましょう。おそらく理解が深まるにつれ、この定義は崩れてきます。とにかく何かを理解するには難しい定義からではなく自分なりに解釈したものを常に修正していく方がはるかに楽ですし、自分の中でイメージが固まってゆくのが楽しくなってきます。
アプリケーションサーバといえども人それぞれ、プロジェクトそれぞれの使い方があるわけであり、置かれた状況によっても変わります。つまり、データベースサーバ、プリンタサーバ、ファイルサーバなどと同じように、利用者にある機能を提供するサーバであり、アプリケーションを乗せるためのサーバ、特に業務システムの使用に耐えうるサーバをアプリケーションサーバと今の時点では理解しておきましょう。
GlassFishを使うには
以前はコマンドラインを使って開発する方が言語を習得する上では効果的であると言われ、筆者もそのように考えていました。しかし、10年ぶりくらいに仕事でプログラミングする機会があり、Java経験1年のメンバーの仕事ぶりを見て考え方が変わりつつあります。開発ツールを実にうまく使い、筆者の10倍は生産性が高いのです。肝心のロジック部分はオブジェクト指向の理解不足から冗長な記述になっており、他の技術者が見て理解しづらいものでしたが、実際の仕事では生産性も求められることを考えると、コマンドラインでは非常に苦しいのが現状です。従って、開発ツールの習熟とともに言語の基礎、Javaの場合であればオブジェクト指向的な作り方を学ぶ必要があります。
当連載では開発ツールとしてNetBeansを使用しつつ、言語の基礎を説明する予定です。執筆時点(2009年12月19日)ではGlassFishを継続して開発することがOracleから公表されていますが、NetBeansについては明言されていません。しかし、NetBeansがなくなることはないでしょう。コミュニティは存続し、NetBeansは生き残っていきます。皆さんの多くはEclipseを使っていると思いますが、Eclipseに習熟している方もNetBeansでの開発をお薦めします。開発ツールの多様さを知ることで、開発の場面により使い分けが可能となるからです。