WebObjectsはJavaで実装されたWebアプリケーションサーバで、現在はアップルが開発・販売を行っています。WebObjectsの歴史は古く、競合する他社製品やオープンソースのWebアプリケーションフレームワークと比べて独特の開発・運用環境を持っています。最近はWebサービスやJ2EE準拠などの最新技術にも対応し、決して古いだけのツールではありません。WebObjectsは長年に渡って考え抜かれたフレームワークと豊富な実績を持つ、魅力あるWebアプリケーションサーバです。
現在WebObjectsを最も積極的に使っているのは、開発・販売元のアップルです。アップルは自社のオンラインサービスの数々をWebObjectsで開発しており、特にiTunes Music Storeでは"WebObjects"の単語が入ったURLを見たことのある人が多いでしょう。
WebObjectsは、開発から運用までに必要な環境をすべて揃えています。
開発においては、Webアプリケーションを構築するためのフレームワーク一式と、シームレスな連携が可能な開発ツールが用意されています。高度なカスタマイズが可能なフレームワークとグラフィカルな開発ツールのおかげで、最小限のコーディングでアプリケーションを開発できます。
運用に関しても負荷分散をサポートしており、一台のマシンから複数台のマシンまで柔軟な構成が可能です。はじめはWebサーバ・WebObjectsアプリケーション・データベースサーバのすべてを一台のマシンで運用しておいて、負荷に応じてそれぞれのマシンを追加していくこともできます。
WebObjectsではWebページをコンポーネントとして扱います。わざわざコンポーネントと呼ぶのはマーケティングの都合ではなく、ビュー(HTMLファイル)やロジック(Javaクラス)などの要素をまとめたものだからです。コンポーネントもまた一つのオブジェクトであり、適切なメソッドをオーバーライドすることで柔軟なカスタマイズができます。
また、コンポーネントはHTMLファイルにJavaクラスの情報を一切含めない仕組みになっていて、ビューとロジックをうまく分離しています。デザイナーとプログラマが別々に作業を進めることも可能です。
WebObjectsはセッションを利用してステートフルなWebページ(コンポーネント)を実現しています。コンポーネントはHTTPトランザクションを越えて使われ、一つのオブジェクトとして自然に扱えるようになっています。Webアプリケーションではどうしても意識せざるを得ないステート管理を、WebObjectsではほとんど気にすることがありません。
保存や復元などのセッション管理の一切をWebObjectsが行ってくれるため、セッションを管理する手続きを実装する必要はありません。セッション管理にはURLかクッキーを使うほか、様々なカスタマイズが可能です。
WebObjectsの機能の中でも特に強力なのが、Enterprise Objects Framework (EOF)と呼ばれるデータベースフレームワークです。EOFはリレーショナルデータベースのスキーマをオブジェクトにマッピングするだけでなく、データベースとしての機能(トランザクション管理、同時実行制御、整合性など)もオブジェクトで表現しています。また、設定に応じてSQL文が自動的に生成されるため、特別にデータベースアクセスを意識する必要はありません。
いまやオブジェクト指向プログラミングは珍しいことではありませんが、WebObjectsはプログラミング部分のみならず、開発環境から運用環境までがオブジェクト指向で、一貫したコンセプトの元に設計されています。これはアプリケーション開発の直接的なメリットではないものの、WebObjectsに熟練してくると素早く開発を進められるようになり、幅広くカスタマイズできるようになります。
WebObjectsはJ2EEにも準拠しているので、サーブレットやEJBを混ぜて開発することも可能です。ただ、開発面ではあまり使われませんが(WebObjectsのアドバンテージがほとんどなくなります)、運用面ではWebObjectsアプリケーションをサーブレットにすることで、任意のJ2EE対応サーバでアプリケーションを運用できるようになります。WebObjectsでアプリケーションを普通に開発しておいて、運用だけJ2EE対応サーバで行うこともできます。
WebObjectsにはNeXT時代から練り上げられてきた強力なフレームワークが揃っています。これらのフレームワークは元々Objective-Cで書かれていましたが、アップルが開発を引き継いでからJavaで全面的に書き直されました。しかし言語以外に大きな変更はなく、フレームワークの仕様はすでに枯れ、パフォーマンスも最適化されています。
WebObjectsの中核となるのはWeb Objectsフレームワーク (WOF)とEnterprise Objectsフレームワーク (EOF)です。Web ObjectsフレームワークはWebインターフェースとステート管理の機能を提供し、Enterprise Objectsフレームワークはデータベースをオブジェクトにマッピングします。特にEnterprise ObjectsフレームワークはWebObjectsの最大の武器です。
この二つのフレームワークはFoundationフレームワークに依存しています。FoundationフレームワークはWebObjectsで使うコレクションクラスやその他の機能を提供します。そのためWebObjectsでは、Java標準ライブラリのコレクションクラスをほとんど使いません。一見デメリットに思われるかもしれませんが、これらのコレクションクラスは標準ライブラリに比べればずっとシンプルです。すぐに使いこなせるようになるでしょう。
WebObjectsの統合開発環境(IDE)です。Mac OS Xの開発環境でもあります。ソースコードの編集やプロジェクトのコンパイルを行います。
このチュートリアルでは扱いませんが、オープンソースの統合開発環境であるEclipseとWOLipsプラグインを使うと、Xcodeを使わずにWebObjectsアプリケーションの開発ができます。
コンポーネント(HTMLファイルとWODファイル)を編集するツールです。ただ、どちらも単純なテキストファイルなので、必ずしもWebObjects Builderを使わなければいけないということはありません。エレメントだけWebObjects Builderで配置して、残りのデザインを他のWebオーサリングツールで編集しても構いません。
データベースとオブジェクトのマッピングに使うモデルを編集するツールです。モデルからスキーマを作成するSQL文を生成できるほか、既存のスキーマからモデルを抽出することもできます。
Xcode以前はモデルファイルを編集するのにEOModelerを使っていましたが、現在はXcodeでも編集できるようになっているので、このチュートリアルではモデルファイルの編集にXcodeを使っています。ただし、まだXcodeはWebObjectsを完全に統合できてはおらず、EOModelerでないとできない作業もあります。
オープンソースの統合開発環境であるEclipseとWOLipsプラグインを組み合わせると、前述した標準の開発ツールを使わなくてもアプリケーションを開発できます。WOLipsについてはWOProject/WOLips和訳ドキュメントを参照してください。
アップルはMac OS X Serverをインストールしたマシンでの運用をサポートしており、マシン1台ごとに1ライセンスが必要です。運用ライセンスはMac OS X Serverに含まれているので、WebObjectsを運用するマシンごとにMac OS X Serverのライセンスを購入する必要があります。運用するマシンの処理速度やプロセッサ数、トランザクション数の制限はありません。
基本的にはJavaがインストールされていればどのプラットフォームでも動作しますが、Mac OS X/Mac OS X Server以外のプラットフォームで運用する場合のライセンスは、個別にアップルに問い合わせてください。
ライセンスに関するファイル・リンクを紹介しておきます。
ライセンスキーは/System/Library/Frameworks/JavaWebObjects.framework/Resources/License.keyに保存されています。
WebObjectsアプリケーションを運用する方法は二種類あります。
一つはMonitorやwotaskdを含むWebObjects専用の運用ツールを使う方法です。MonitorもWebObjectsで開発されており、ブラウザからWebObjectsアプリケーションの運用管理を行うことができます。この方法はマルチインスタンスや負荷分散をサポートし、スケールアウトしやすい柔軟な構成で運用が可能です。
もう一つは、WebObjectsアプリケーションをJavaサーブレットコンテナで運用する方法です。この方法ではwotaskdの恩恵を受けることはできなくなりますが、WebObjectsアプリケーションをMac OS X以外のプラットフォームでも動かせるのが大きなメリットです。ただし、WebObjectsの他プラットフォーム向けインストーラが用意されていない以上、プラットフォームを越えた運用は難しいでしょう。