GlassFish ファミリーのご紹介

この記事はGlassFish Advent Calendar 2013の17日目として新たに書き下ろしたものです。昨日は「GlassFish v3 FCSとGlassFish 4 GAのビルド番号について」でした


今回も昨日に引き続き軽めな話題として、GlassFishとその仲間達をご紹介します。

GlassFish

言わずと知れたJava EEのリファレンス実装であり、世界でも五指に入る有力なアプリケーション・サーバーです。GlassFishとは透明感のある魚を意味し、透明なコミュニティと製品になることを願って名付けられました。

グラスフィッシュは実在する淡水熱帯魚で、東南アジアに生息するスズキ目タカサゴイシモチ科のうち小型で体が透明な魚の総称です。日本でもラージグラスフィッシュをはじめ数種類が観賞魚として入ってきています。

GlassFish v1

J2EE SDKに同梱されていたSun Java System Application Server 8の後継製品として、オープンソース・コミュニティで開発されたサーバーです。SJSAS PE(Personal Editiom)に代わりJava EE 5 SDKに同梱された、最初のJava EE 5リファレンス実装でもあります。SJSAS PEと異なり本番運用にも使用できる品質とライセンスが目標でした。商用サポートもSun Java System Application Server 9.0の製品名で行われました。

GlassFish v2

GlassFish v1の管理機能を大幅に強化したもので、機能的にはWebSphere、WebLogic、JBossなど競合製品と同レベルに達しています。引き続きJava EE 5のリファレンス実装となりました。商用サポート付きの製品は当初Sun Java System Applimcation Server 9.1の名称でリリースし、v2.1リリースにあわせてSun GlassFish Enterprise Server 2.1に改称しました。

GlassFish v3 Prelude

GlassFish v3でOSGiベースのモジュラー・アーキテクチャに変更するに当たって、新アーキテクチャを先取りする形でリリースされた製品です。GlassFish v3のアーキテクチャ上にJava EE 5のサブセット(Servlet 2.5/JSP 2.1、JSF 1.2、JPA 1.0等)とJava EE 6に含まれる予定の仕様の一部(オプションとしてEJB 3.1ドラフト、JSF 2.0ドラフト、JAX-RS 1.0)を実装しています。GlassFish v3のプロトタイプ的な位置づけであり、Java EE認定を受けたサーバーではありませんが、Sunによる商用サポートがありました。機能的には後にリリースされたGlassFish v3 Web Profileに近いものでした。

GlassFish v3

OSGiベースのモジュラー・アーキテクチャを採用したGlassFishです。カーネルを含む基盤部分はNucleusと呼ばれており、基本的にはJava EE仕様には依存しない構造になっています(例外的にJAX-RSのみNucleusの必須コンポーネントであり、Java EE 6 Web Profile実装でGlassFishのみがJAX-RSを実装していた所以です)。OSGiバンドルの遅延ロードを生かした高速動作が特長で、リリース当時はJava EEサーバーで最速を誇りました(現在はJBoss AS 7の方が高速です)。拡張性に富んだアーキテクチャで、モジュール単体でのアップデートや、Full ProfileとWeb Profileの相互切り替えなども可能です。v3のクラスタ機能は独自の発想で開発されたもので、ドメイン管理サーバーからの操作でクラスタ・ノードを構築することが可能であり、必要であればGlassFish自体のインストールも併せて行います。v3の最初のリリースではこのクラスタ機能が未完成のため搭載が見送られましたが、v3.1以後GlassFishの主要機能の1つとなっています。なお、v2が持っていたHA構成関連の機能は、クラスタ機能に置き換えられる形で廃止(文字通りコード自体を削除)されました。GlassFish 4までのつなぎとしてGlassFish 3.2もリリースされる予定でしたが、計画変更により取りやめとなり、新機能の多くはGlassFish 4へ先送りとなりました。一部機能についてはメンテナンスリリースであるGlassFish 3.1.2にバックポーとされています。v3についても商用サポートが行われ、SunがOracleに買収された後はOracleがそれを引き継ぎました。

GlassFish 4

GlassFish 3.1に続くメジャー・リリースで、Java EE 7のリファレンス実装でもあります。v3と同じNucleusベースのサーバーで、実際にv3の延長線上に当たる製品です。Java EE 7で当初予定していたクラウド機能に対応するため、クラスタ機能がさらに強化され、第2の管理コンソールである「PaaSコンソール」を用いてクラスタ構成を柔軟に変化させることが可能でした。クラウド機能がJava EE 8へ先送りとなったため現在のGlassFish 4には「PaaSコンソール」は含まれていませんが、過去の開発ビルドに「PaaSコンソール」単体のものが存在しています。最初のリリースでは商用サポートは行われず、コミュニティ版のみのアップデートであるGlassFish 4.0.1を経て、2014年リリース予定のGlassFish 4.1から商用サポートが復活する予定でしたが、Oracleの方針転換により商用サポートは取りやめとなり、サポートを必要とするユーザーをWebLogicへ誘導する方策が取られました。

GlassFishから派生した製品

オープンソースだからこそ生まれた、GlassFishのきょうだい達です。

SailFin v1/v2

Ericssonから提供されたSIP技術をもとに開発されたSIPサーバーです。GlassFish v2上にSIPサーブレットをバンドルした製品です。GrizzlyがHTTP以外の様々なプロトコルに対応できることを証明したことでも知られています。商用サポート付きの製品はSun Java System Communication Serverの名称でリリースされました。

SailFin v3

SailFin v2の後継で、GlassFish v3ベースのSIPサーバーとして開発されていた製品です。SunがOracleに買収された後の方針転換により開発は中止されました。現在もGlassFishのリポジトリに開発途中のSailfin v3が残っています(開発チームは事実上解散し、残骸のみが存在している状態です)。

Fujitsu Software Interstage Application Server

富士通のミドルウェア製品群"Interstage"のアプリケーション・サーバーは、現在GlassFishがベースになっています(最新版はGlassFish 3.1がベースになっています)。富士通はSunとSPARC黎明期からの協力関係にあり、その影響もあってか早い段階でGlassFishが採用されました。一部の機能が富士通独自の実装に変更されていますが、Java EEサーバーとしての機能はGlassFishと変わりありません。なお、富士通は法人としてGlassFishプロジェクトにコミットしており、数十名のコミッタが活動していると推測されます。

GlassFishのサブプロジェクト

GlassFishプロジェクト配下のサブプロジェクトで開発されているJava EEの個別仕様のリファレンス実装です。各サブプロジェクトの独立性は比較的高く、GlassFish以外のアプリケーション・サーバーでも採用されています。

JBoss/WildFlyではMojarraやJSON-Pなどをコンポーネントとして採用しています。一方でGlassFishではJBoss配下のWeld(CDIリファレンス実装)やHibernate Validation(BVリファレンス実装)を取り込んでいます。こうした製品の枠を超えた協力関係は、オープンソースならではのメリットと言えるでしょう。

余談ですが、Java EEの各仕様の策定とリファレンス実装の提供は、ServletとEJBのコンテナを除き、多くがGlassFishとJBoss(およびそれらのサブプロジェクト)が行っています。つまり、現在のJava EEがあるのはGlassFishとJBossのお陰であることを、心の片隅に置いておいてください。

某商用サーバーはJ2EE黎明期には仕様・実装両面で積極的貢献を果たしましたが、現在はGlassFishとJBossの成果を(悪い言い方ですが)横取りして「業界で最も早く新規格に対応」などと喧伝しているだけです。その一方で某ライバル製品がApache Foundationを支援してApacheの実装を積極的に取り入れているのとは大きな違いです。

OpenMQ

[Open MQ] Java Message Service (JMS)のリファレンス実装と、JMSベースのMessage Queue実装を含みます。Sun Java System Message Queueをオープンソース化した製品です。

Metro

[Metro - JAX-WS] Java API for XML-Based Web Services 2.0 (JAX-WS)のリファレンス実装です。SOAP Webサービスの実装としては後発ですが、高パフォーマンスと.NET Frameworkとの相互接続性が特長です。Metroは広義には後述するJAXBや他の関連仕様を含んだプロジェクトです。

JAXB RI

名前通りJava Architecture for XML Binding (JAXB)のリファレンス実装です。Hudson/Jenkins作者の川口耕介さんが主要開発者だったことでも知られています。GlassFish 4ではJAXB実装としてより高性能なEclipseLink MOXyを採用しています。

Grizzly

[Project Grizzly] GlassFishのサブプロジェクトとしては最も有名なものでしょう。GlassFishのHTTPリクエスト・ディスパッチャーであり、HTTP/S、WebSocket、SPDY、Memcachedなどの技術をサポートするWebフレームワークでもあります。NIOと高度なスレッド処理により低負荷から高負荷まで安定したリクエスト処理を実現します。GlassFishの高パフォーマンスの源であり、一時期はJettyでも採用されていました。

Mojarra

[JavaServer Faces Community] こう書いて「モハラ」と読みます(GlassFish同様に魚の名前です)。JavaServer Faces (JSF)のリファレンス実装です。当初こそApache MyFacesの陰に隠れて目立ちませんでしたが、現在ではGlassFishやJBoss AS/EAPなどが採用するメジャーな実装となりました。

Mojarraはスズキ目クロサギ科の魚を指し、南米など亜熱帯地域に生息しています。語源はスペイン語またはポルトガル語と思われますが、これは南米がスペインとポルトガルの植民地として開拓された経緯によるものと考えられます。

Jersey

[Jersey] The Java API for RESTful Web Services (JAX-RS)のリファレンス実装です。RESTEasy、Apache Winkと並ぶJAX-RSの主要実装で、多機能からRESTEasyとともに人気を二分しています。Jersey独自のMVCフレームワークには隠れたファンも多いとか。

JSON-P RI

JSR 353 : Java API for JSON Processingのリファレンス実装です。

Tyrus

JSR 356 : Java API for WebSocketのリファレンス実装です。Grizzlyまたは任意のServlet 3.1実装上で動作します。Java SE上で動作するクライアントもあります。WebSocketは多くのサーバーがドラフト段階から独自に実装しており、その時に得た技術をもとに各々がJSR 356仕様を実装したため、Tyrusは事実上GlassFishのみの実装になります。


明日はGlassFishの管理コンソールに関するトリビアを予定しています。管理コンソールがJSFで構築されていることはブラウザのURLを見れば一目瞭然ですが、そこには過去からのしがらみから逃れられなかったGlassFish v3の姿が現れています。