GlassFish

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索
GlassFish
開発元 オラクルサン・マイクロシステムズ
初版 2006年5月4日(8年前) (2006-05-04
最新版 4.0 / 2013年6月11日(17か月前) (2013-06-11
対応OS クロスプラットフォーム
種別 アプリケーションサーバ
ライセンス Common Development and Distribution License & GNU General Public License
公式サイト http://glassfish.java.net/
テンプレートを表示

GlassFishは、サンを中心としたオープンソース・コミュニティと、同コミュニティで開発されたJava EE準拠のアプリケーションサーバの名称である。現在はサンを買収したオラクルによってコミュニティが継続されている。本項では以降、特別な断りのない限りアプリケーションサーバのことを指すものとし、コミュニティについてはGlassFishコミュニティと呼称する。

GlassFishは設計・開発・テストのすべてをオープンソース・コミュニティ上で行っている。かつては、オラクル(サン)による商用サポート(商用版にはロードバランサなどオープンソースではないコンポーネントが追加されている)も同時に行われていたが、GlassFish 4.0を機に廃止され、開発者向けのJava EEの参照実装としての位置づけが強くなっている[1]。GlassFishはCommon Development and Distribution License (CDDL) と、クラスパス例外を含むGNU General Public License (GPL) の二重ライセンスである。

歴史[編集]

GlassFish v1[編集]

GlassFishは、Sun Java System Application Server 8.xの後継製品であり、サン最初のオープンソース・アプリケーションサーバとして開発が開始された。GlassFishプロジェクトは2005年6月6日に発足し、2006年5月4日に最初のバージョン (GlassFish v1) をリリースした。GlassFish v1の概要は下記の通りである。

  • Java EE 5準拠(参照実装)である。
  • オープンソースである(ライセンスはCDDLGPL)。
  • 他のグループから多数の優れたコンポーネントを採用している。例えばMetro (JAX-WS英語版) やJAXBなど。この中にはオラクルから提供を受けたTopLink Essentials英語版も含まれる。
  • 年間330万ダウンロード以上を目標とする。
  • Sun Java System Application Server 9.0として、サンによる商用サポートを提供する。

GlassFish v1は1回のアップデートリリース(無償)と5回のパッチリリース(サンの有償サポートによる)がリリースされた[2]

GlassFish v2[編集]

GlassFish v1はJava EE 5の参照実装としての色合いが強く、単一インスタンスに特化していた。2つめのメジャーリリース (GlassFish v2) ではその点を大幅に改善したものとなった。GlassFish v2の新機能は以下の通りである[3]

  • クラスタリングおよびHADBの提供。JXTAベースのインメモリ・レプリケーション・メカニズムが含まれる。
  • 商用レベルの管理・監視機能の提供。これには管理コンソール(Webベース)、ドキュメント、CLIの監視機能が含まれる。
  • オールインワン。SJS AS 8.xには複数のエディションがあったが、GlassFish v2ではそれらが統合された。
  • Metro Webサービスフレームワークとマイクロソフト製品 (.NET Framework 3.0) との相互接続性の保証。
  • パフォーマンスの向上。オープンソース・アプリケーションサーバで唯一SPECjAppServer 2004ベンチマークを実施し、BEA WebLogicとIBM WebSphereを凌ぐ結果を出した。

GlassFish v2の最初のリリースは2007年9月17日に行われた。このバージョンのサンにおける名称はSun Java System Application Server 9.1である。 GlassFish v2は2011年1月時点で4回のアップデートリリース(無償)と21回のパッチリリース(サン/オラクルの有償サポートによる)がリリースされており、今後もパッチリリースが予定されている。 [4] なお、GlassFish v2.1において、サンにおける名称がSun GlassFish Enterprise Server 2.1に変更され、以降バージョン番号がコミュニティ版と商用版で統一された。

SailFin[編集]

サンとエリクソンによる「Communication Application Server」を構築するプロジェクトで、2007年5月8日にGlassFishのサブプロジェクトSailFinとしてJava Oneで発表された。SailFinは、エリクソンから提供されたSIP Servlet [5]をGlassFish v2.1へ統合したものである。SailFin 1.0はGlassFish v2.1と同時の2009年1月26日にリリースされた。サンによる商用版はSun Java System Communication Application Serverである。

GlassFish v3[編集]

その次のメジャーリリースとなるGlassFish v3は、Java EE 6の参照実装であると同時に、アーキテクチャを抜本的に見直し、OSGiモジュールサブシステムに対応した。機能を使われるときに初期化することで非常に高速な起動を実現し、また再起動の待ち時間を大幅に減少させることに成功している。この新しいアーキテクチャはGlassFish v3 Preludeとして先行してリリースされている。また、GlassFish v3ではJava EE以外のスクリプト言語にも本格的に対応しており、GlassFish上で動作するスクリプト言語実装も増加している。

GlassFish v3 Prelude[編集]

2008年11月6日にリリースされた最初のv3系がGlassFish v3 Preludeである。この製品はJava EE 5のサブセットを提供し、一部Java EE 6の機能を取り込んだものであった。Java EEには準拠していないが、サンによる商用サポートが提供されていた。

GlassFish v3[編集]

2009年12月10日、GlassFish v3がリリースされた。これはJava EE 6に準拠した最初のアプリケーションサーバである。当初予定していたクラスタ機能がGlassFish v3.1へ先送りとなったが、サンによる商用サポートは引き続き提供された。GlassFish v3の主な機能は以下の通りである。

  • Java EE 6の参照実装の提供。
  • OSGiモジュール化サブシステムに対応(Apache Felix英語版を採用)[6]
  • Metro Webサービスフレームワークとマイクロソフト製品 (.NET Framework 3.5) との相互接続性の保証。
  • 非同期I/O (Comet) に対応
  • 従来からの管理コンソール、CLIの管理ツールに加え、RESTful管理チャネルが追加された。これにより、JAX-RSアプリケーションからサーバの管理・監視ができるようになった。
  • インストーラ版に加え、ZIPアーカイブ版による配布が開始された。ZIPアーカイブ版はあらかじめデフォルトでサーバが構成された状態で配布されるため、アーカイブを展開してすぐに利用可能である。

2010年1月27日にオラクルによるサンの買収が完了すると、GlassFishのサポートはオラクルに引き継がれた。2010年6月18日、GlassFishバージョン3.0.1がリリースされた。このリリースでは100のバグの修正と多言語化が実施されると同時に、ブランドがサンからオラクルに移行したのに伴い、オープンソース版がGlassFish Server Open Source Edition、オラクル製品版がOracle GlassFish Serverへと名称変更となった。またこのリリースからOracle JRockit英語版が正式サポートされるようになった。2010年10月8日には製品版のパッチリリースが行われた。

GlassFish v3.1[編集]

GlassFish v3リリースで先送りされたクラスタなどの高可用性機能を実装したものがGlassFish v3.1である。このバージョンにより前メジャーバージョンで提供されていた機能が一通り揃うことになった。GlassFish v3.1は2011年2月28日にリリースされた。 GlassFish v3.1の主な機能は以下の通りである。

  • クラスタ対応。方式としてGlassFish v2に存在していたNode Agentを廃止し、新たにSSHプロビジョニングを採用する。SSHプロビジョニング方式では、クラスタノード側でSSHのサーバプロセス(デーモン)を起動しておくだけで、ドメイン管理サーバがシステムの初期化とドメイン管理サーバへの登録を行う。ノード側ではGlassFishをインストールする必要もなく、ドメイン管理サーバが自らのインスタンスをアーカイブしてノードに転送しリモートインストールを実行する。v3.1.2以降、Windowsプラットフォームに限りSSHの代替としてDCOMRPCを使用することが可能となっている。
  • アプリケーションのバージョニング対応。サーバ上に同じアプリケーションの複数のバージョン(例えば開発版、リリース候補版、製品版など)を同時に配備しておき、その中から1つのバージョンを選んで稼働させることができる。配備できるアプリケーション数とバージョン数は事実上無制限である。
  • ドメイン管理サーバの高可用性
  • HTML5 WebSocket対応
  • 管理・監視機能の強化。DTraceによるモニタリングが正式サポートされる。
  • WebLogicとの互換性の提供(WebLogicのデプロイメント記述子をサポートする)。

2011年7月28日にはバージョン3.1.1がリリースされた。主な変更点はJDK7対応、AIXサポートの追加およびバグフィックスである。2012年2月にリリースされたバージョン3.1.2ではバグフィックスに加え、開発中止となったバージョン3.2の一部機能(DCOMプロビジョニングによるクラスタ構成など)が追加されている。 バージョン3.1.x系列の最新版は2012年7月15日にリリースされた3.1.2.2である。

GlassFish 3.2[編集]

GlassFish 3.1のアップデート版としてGlassFish 4と並行して開発が進められていた。GlassFish 4までの橋渡しとしていくつかの新機能を実装するプラットフォームとなる予定だったが、GlassFish 4に注力するため開発は中止された。実装予定の新機能の多くはGlassFish 4で実現されたが、既に完成していた機能についてはバージョン3.1.2にバックポートされる形で取り込まれた。

GlassFish 4.0[編集]

GlassFish 4.0は2013年6月11日にリリースされたメジャーバージョンであり、Java EE 7の参照実装でもある。GlassFish 3.xのアーキテクチャをベースとしている。開発段階ではPaaS型のクラウドへの対応を予定しており[7]、従来の管理コンソールに加え、PaaS環境の管理・監視を行うためのPaaSコンソールを有していた。この機能はPaaS対応がJava EE 8へ延期となったことからリリースからは除外されている。このバージョンはJava EE 7の参照実装としての位置づけであり、Oracleによるサポート対象からは除外されている。なお、コミュニティベースのメンテナンスリリースとしてGlassFish 4.0.1の開発が進められている(2013年8月現在、リリース時期未定)。

GlassFish 4.1[編集]

GlassFish 4.1は2014年にリリースを予定しているGlassFish 4系列のマイナーアップグレードバージョンである。4.x系列では当初このバージョンからOracleによるサポートが予定されていたが、2013年11月になりOracleは今後GlassFishの商用版をリリースしないことを発表。4.1のリリースは行われるものの、オープンソース版のみという扱いとなった。GlassFishの開発は継続されるものの再び開発者向けのJava EEの参照実装であると位置づけられており、Oracleでは商用サポートが必要な場合は同社の別のアプリケーションサーバーであるWebLogic英語版に移行するよう呼びかけている。[1]

GlassFish 5.0[編集]

2013年現在、Java EE 8の参照実装として計画が進められている。[1]

技術[編集]

モジュールサブシステム (GlassFish v3)[編集]

GlassFish v3はGlassFish OSGiランタイムとGlassFish Kernel (HK2: Hundred-Kilobyte Kernel) の2つのモジュールサブシステムによりサーバ全体をモジュール化している。GlassFish OSGiランタイムはOSGi Release 4に準拠したランタイムを利用可能で、組み込みのランタイムとしてApache Felix英語版が採用されている(ただし、Knopflerfish英語版Equinox英語版なども利用可能である)。
GlassFish KernelはHK2と略される、JSR-277ベースのモジュールサブシステムである。[8] HK2はOSGiランタイムだけでは補えないモジュール管理機能を担当している。OSGi対応前はすべての機能をHK2のモジュールとして作成していたため、今でもGlassFishのモジュール(OSGiバンドル)の実装にはHK2のAPIが使用される。
GlassFish上では任意のOSGiバンドルを利用可能なため、例えばSpring DMとJava EEを連携させるような運用も可能である。

Nucleus[編集]

GlassFish v3のカーネルと主要部分はNucleusと呼ばれている。構成は以下の通り。

  • Config Framework - 設定情報ファイル (domain.xml) とそれを管理するフレームワーク
  • CLI Framework - コマンドライン・インタフェース
  • Grizzly - リクエスト・ディスパッチャ(後述)
  • Monitoring Framework - 監視フレームワーク
  • Security Service - SSL等のサポート
  • REST Backend - REST管理チャネル

IPS[編集]

IPS (Image Packaging System英語版: pkg(5)) は、OpenSolarisプロジェクトで開発されたパッケージのインストール、アップグレード、削除などのソフトウェアのライフサイクル管理のために提供されるフレームワークである。[9] IPSはOpenMQをGlassFish 2.1.1に統合する際にGlassFish v2に追加され、GlassFish v3以降は標準の更新ツールとして採用されている。GlassFish v3のオープンソース版と商用版のライセンス切り替えに伴う実装の変更は、IPSのコマンドにより比較的容易に実施できる。

Grizzly[編集]

GlassFishで採用されているハイパフォーマンスなリクエストディスパッチャがGrizzlyである。GrizzlyはGlassFishのHTTPサーバ実装プロジェクトとして2004年から開発が始められ、現在ではマルチプロトコル対応のネットワークサーバエンジンとなっている。Grizzlyは当初、サンのアプリケーションサーバで使用していたApache TomcatのCoyoteエンジンではGlassFishの要求性能を満たせなかったことから、Java NIOを用いて試験的に実装されたものであった。その後、TCP/UDP/SSLなどのマルチプロトコルに対応できる汎用性が注目され、GlassFish v2.1向け実装 (Gryzzly 1.0.x) からアーキテクチャを大幅に変更し、SailFinのSIPにも容易に対応している。
GrizzlyはJava NIOによる非ブロッキングI/Oを活用することで、1リクエスト当たりのスレッド生成数を抑えることに成功している。[10] GlassFish v3ではOSGiバンドルとして再実装されたGrizzly 1.9.18以降、v4ではさらに性能が向上したGrizzly 2.3.3以降が採用されている。
GlassFishでは、サーブレットコンテナとしてもGrizzlyが用いられているが、一部の処理にはTomcat 5.5に由来するコードが使用されている。[11]

CLI Framework[編集]

Monitoring Framework[編集]

REST Backend[編集]

高可用性[編集]

Java EE参照実装(サブプロジェクト)[編集]

Java EE参照実装は、サブプロジェクトであるMetro (JAX-WS英語版)、Jersey (JAX-RS英語版)、Mojarra (JSF)、OpenMQ (JMS)、Tyrus (WebSocket API)、JSON Processing でそれぞれ開発されている。また、Weld (CDI)、Hibernate Validator (Bean Validation)、EclipseLink (JPA)、JBatchなど外部の有力な参照実装を採用している。

Metro[編集]

JAX-WSの参照実装であり、Apache Axis2より90%高速である。[12] SOAP通信において、Microsoft .NET Framework 3.0および3.5との相互接続性が保証されている。

Jersey[編集]

JAX-RSの参照実装である。 GlassFish v3ではREST Backendの基盤でありNucleusに含まれている。そのため他のJava EEサーバと異なり、GlassFish v3ではJAX-RS実装であるJerseyをサーバ本体から切り離すことができない。

Mojarra[編集]

OpenMQ[編集]

Tyrus[編集]

JSON Processing[編集]

多国語版[編集]

GlassFish v2より英語の他、日本語、簡体字中国語、繁体字中国語、ハングル、スペイン語、フランス語、ドイツ語を含む多国語版リリースが行われている。[13]

脚注[編集]

  1. ^ a b c GlassFish Commercial Editionの提供が終了”. InfoQ (2013年11月18日). 2014年2月24日閲覧。
  2. ^ http://blogs.sun.com/GlassFishForBusiness/entry/sjs_as_9_0_gf1
  3. ^ http://blogs.sun.com/pelegri/entry/overview_of_glassfish_v2
  4. ^ http://blogs.sun.com/GlassFishForBusiness/entry/overview_of_sjs_as_9
  5. ^ http://jcp.org/en/jsr/detail?id=289、当初はhttp://jcp.org/en/jsr/detail?id=116
  6. ^ これに伴い、ディレクトリ構造がGlassFish v2から大幅に変更されている。
  7. ^ http://glassfish.java.net/javaone2011/index.html
  8. ^ 当初、JSR-277はJava SE 7へ組まれる予定だったため、Java SE 7対応としてHK2を実装したものの、Java SE 7でJSR-277は不採用となった。
  9. ^ http://dlc.sun.com/osol/g11n/content/2009.06/IMGPACKAGESYS/ja/
  10. ^ Grizzlyの開発者の1人であるJean-Francoisによると、Grizzlyはわずか30スレッドで10,000接続を処理することができるとしている。
  11. ^ 大幅な改修が加えられているものの、コピーライトやクラス構成にその名残がある。なお、JSPエンジンはTomcatのJasperを拡張したものである。
  12. ^ http://blogs.sun.com/theaquarium_ja/entry/metro_90_better_performing_than
  13. ^ GlassFish v3のリリース当初は他言語版の配布がなく更新ツールによる対応であった。

関連項目[編集]

外部リンク[編集]