GlassFish コミュニティー Java EE Application Server の提供

!!
!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
GlassFish コミュニティー
Java EE Application Server の提供
!"#
()#
Eduardo Pelegri-Llopart
$%&'
Alexis Moussine-Pouchkine
Sun Microsystems, Inc.
$%&*+
,-./0123456789:;
!!
!"
GlassFish <=..................................................................2
Java >?@ABCD6<E>FGD3H-,DID.......................................2
GlassFish E>FGD3H-,DID...............................................................3
Java >?@ABCD6....................................................................................3
JD>-KD4<&GlassFish........................................................................4
GlassFish <&Java EE 5 LMN...........................................................................4
Java EE 5 LOP...............................................................6
GlassFish LFFD4.......................................................................................7
GlassFish v1.................................................................................................7
GlassFish v2.................................................................................................7
GlassFish v3.................................................................................................8
GlassFish v2 LQR..........................................................9
QROP........................................................................................................9
Web SL&Java TU.....................................................................................9
VBCD/-4LWX..............................................................................10
YZ[\B]D6^D1<L_`a..........................................................10
AJAX ,bDA...........................................................................................11
Phobos LEDc51deD......................................................................12
Grizzly.......................................................................................................12
>]f-5D3H-SLghi................................................................13
Web ,Dj4&k&Metro..............................................................................13
WSIT <&Project Tango................................................................................15
XML lm...................................................................................................16
XML nDoI0-np-q.......................................................................16
Java EE 5 rstuvwx<........................................................................17
GlassFish Lyz51{2|...........................................................................17
TopLink Essentials <&JPA............................................................................17
CORBA.......................................................................................................18
OpenMQ }@~D|-q...........................................................................18
Java Business Integration............................................................................19
1?4o•<€•]>FGD3H-&............................................................19
‚Dƒ..........................................................................................................20
„m..............................................................................................................21
0-4ADƒ............................................................................................21
Update Center............................................................................................22
…†‡ˆ‰L&GlassFish.................................................23
GlassFish LŠ‹.............................................................23
Œ•LŽWa................................................................................................23
Jersey – RESTful Web ,Dj4........................................................................24
Sailfin – GlassFish L••L&SIP ,D‘]@A51{2|...............................25
’“”•.......................................................................25
–—˜...........................................................................26
1
Project GlassFish
Sun は 2005 年 6 月の JavaOne 期間中
に、Java EE 5 および Sun のアプリケー
ションサーバーのリファレンス実装を
オープンソース化するための Project
GlassFish を立ち上げました。
それから 1 年も経たない 2006 年 5 月の
JavaOne 2006 で、バージョン 1 のリリー
スが発表されました。
バージョン 2 は 2007 年 9 月にリリース
されました。
現在の開発の中心は、モジュール型の軽
量アプリケーションサーバーである
GlassFish v3 (HK2 を参照) です。
Copyright © 2007, Sun Microsystems, Inc
はじめに
Sun は 2005 年のJavaOne で、自社のアプリケーションサーバーおよび Java EE リ
ファレンス実装をオープンソース化するための取り組みである Project GlassFish を
発表しました (傍注「Project GlassFish」を参照)。これはすべての Java プラット
フォームをオープンソース化する最初のステップでしたが、別の効果もありまし
た。Project GlassFish は Java EE 5 の普及を加速し、オープンソースコミュニティー
で利用可能な選択肢に新しいエンタープライズ品質のアプリケーションサーバー
を加えました。そして、さらにはより優れた製品を生み出す過程で Sun のアプリ
ケーションサーバーを開発、テスト、公開、および拡張していく手法の変化につ
ながっていったのです。
GlassFish コミュニティーは既にバージョン 2 をリリースしており、現在はバー
ジョン 3 の開発が進められています。この記事では、GlassFish コミュニティーお
よび GlassFish アプリケーションサーバーの概要をあらゆる側面から解説しま
す。
2
Copyright © 2007, Sun Microsystems, Inc
GlassFish とは
GlassFish は「コミュニティー」であり「アプリケーションサーバー」です。コ
ミュニティーの主な成果物は、Java EE 5 互換のアプリケーションサーバーである
GlassFish アプリケーションサーバーと、Java Persistence API のリファレンス実装
である TopLink Essentials です。
• JAXB (Java API for XML Binding)
• JAX-WS (Java API for Web Services)
• JAXP (Java API for XML Processing)
• StAX (Streaming API for XML)
• JSP (JavaServer Pages)
• JSF (JavaServer Faces)
GlassFish コミュニティーでは、Java EE 5 に含まれる
JAXB、JAX-WS、JAXP、StAX、JSP、 JSF などの JCPで規定された技術のための再利用
可能モジュールを含む、その他多数の有用なコンポーネントの開発も行っていま
す。jMaki、Phobos、DynaFaces などの広く知られた次世代 Web プロジェクト、継
続的な統合を行う Hudson をはじめとする多数のツール、そしてNIO ベースの
サーバーフレームワーク Grizzly のような有用なインフラストラクチャーも
GlassFish に含まれます。GlassFish コミュニティーでは、これらすべてのコンポー
ネントの Maven リポジトリの保守も行っています。
• JCP (Java Community Process)
Java プラットフォームとアプリケーションサーバー
リファレンス実装 (RI) とは
Java Community Process (JCP) で策定され
る仕様はエキスパートグループ (Expert
Group、EG) の成果であり、エキスパート
グループリーダー (EG Lead) が調整を担
当します。
エキスパートグループは次のものを提供
します。
• 仕様文書
• テクノロジ互換性キット (Technology
Compatibility Kit、TCK)
• リファレンス実装 (Reference
Implementation、RI)
RI は仕様を実装し、TCK の検査を通過し
たものです。
Sun は 1995 年に Java をリリースし、翌年の第 1 回 JavaOneカンファレンスの期間
中に Java Servlet API を発表しました。1999 年には、Java Server Pages (JSP) と
Enterprise JavaBeans (EJB) が、 Java サーブレットと共に、最初のエンタープライズ
Java プラットフォームである J2EE 1.2 で提供されました。このバージョン番号
は、付随する J2SE に合わせて選ばれたものです。2001 年には J2EE 1.3、2003 年に
は J2EE 1.4 がリリースされ、2006 年には名称が変更され、Java EE 5 がリリースさ
れました。
Java EE 仕様はベンダーおよび企業の両方に広く受け入れられ、Sun を含む多くの
ソフトウェアベンダーが自社のアプリケーションサーバーにその仕様を実装しま
した。Sun は長年にわたって、アプリケーションサーバーのリファレンス実装
(傍注「リファレンス実装 (RI) とは」を参照) と、異なるいくつかのブランドで販
売された商用アプリケーションサーバーの両方を提供してきました。
これら 2 種類のアプリケーションサーバーは特性が異なっていました。RI の主な
用途は開発と仕様の普及であり、開発用途の場合は無償でしたが本番環境への配
備には使用できませんでした。一方、商用製品は収益目的であり、デプロイヤが
主なターゲットでした。その後、リリース 7.0 からこれら 2 種類のアプリケー
ションサーバーは統合されました。これは、当時 Sun ONE というブランドを冠し
ていた商用製品に J2EE 1.3 SDK の機能を初めて取り込む形で行われ、Sun Java™
RI の品質には、概念実証 (PoC)レベルか
System にブランドを変えた 8.x および 9.x リリースでもこの流れを継承していま
す (傍注「Sun のアプリケーションサーバー」を参照)。
準拠のアプリケーションサーバーです。
J2EE 1.4 の時点で、RI は Sun Java System Application Server (SJS AS) 8.0 Platform
Edition と同一であり、開発および配備用途には無償であり、J2EE 1.4 SDK などの
広範な配布リリースに含まれていました。
ら本番品質の実装まで幅があります。
GlassFish は本番品質を備えた Java EE 5
Java EE 5 RI は厳密には、そのようなもの
として宣言された GlassFish コードベー
スの特定のスナップショットです。
3
Sun のアプリケーションサーバー
Sun は自社のアプリケーションサーバー
に複数のブランドを使用してきました。
最新のリリースは次のとおりです。
• iPlanet™ Application Server 6.0 –
Netscape (Netscape AS) からの派生。
J2EE 1.2 互換
• Sun™ ONE Application Server 7.0 – J2EE
1.3 RI を含む最初のリリース
• Sun Java™ System Application Server 8.0
– J2EE 1.4 互換
• Sun Java System Application Server 9.0 –
Java EE 5 互換。GlassFish v1
• Sun Java System Application Server 9.1 –
Java EE 5 互換。GlassFish v2
Copyright © 2007, Sun Microsystems, Inc
SJS AS 8.x 製品には引き続き、RI と同一のプラットフォーム版 (Platform
Edition、PE)、クラスタ化やフェイルオーバーなどのエンタープライズ品質機能の
一部を搭載したスタンダード版 (Standard Edition 、SE)、および、高可用性
(99.999% の可用性) 市場をターゲットとした エンタープライズ版 (Enterprise
Edition、EE) の 3 つのバージョンが存在していました。9.x リリース以降、これら
の機能はすべて、GlassFish コミュニティーによってオープンソースライセンスの
もとで透明性をもって開発されている単一のバージョンに取り込まれています。
ユーザーはdeveloper、cluster、enterpriseの各プロファイルを使用して GlassFish
を自由に構成できます。
GlassFish アプリケーションサーバー
Sun は 2005 年 6 月の JavaOne 2005 の期間中に Project GlassFish を発表しました。
それから 1 年も経たないうちに、2006 年 5 月の次の JavaOne で最初のリリースが
一般公開され、Java EE 5 の最終仕様が確定しました。このアプリケーションサー
バーは、Sun のダウンロードサイトでは Sun Java System Application Server 9.0
PE(Platform Edition) の名称で、コミュニティーサイトでは GlassFish v1 の名称で公
開されましたが、これらはインストーラの違いを除いて同一のものです。
GlassFish v1 は Java EE 5 仕様の実装に重点を置き、一部のエンタープライズレベ
ル機能は最初のリリースに含まれていませんでした。このことを反映し、Sun の
配布ではこのアプリケーションサーバーに PE というラベルを付けました。
GlassFish v2 では、省略されたこれらの機能がすべて追加し直され、と同時に機
能が完全に統合されたことにより PE というラベルが削除されています。同じ実
行可能ファイルを、開発者側でも、エンタープライズ側でも、またはクラスタプ
ロファイル用にも、意図した用途に応じてインストールすることができます。
GlassFish v2 は、Sun のサイトでは Sun Java System Application Server 9.1 の名称で
公開されています。このバージョンは 2007 年 9 月にリリースされました。
Java プラットフォーム
Java EE 仕様は、対応する Java SE 仕様をベースとし (例: Java EE 5 には Java SE 5 が
必要)、他の JCP 仕様を数多く含んでいる包括仕様です。GlassFish コミュニティー
はこのことを反映し、これらの仕様のほとんどに対する正式なリファレンス実装
である多数のサブプロジェクトを組み入れています。個別のサブプロジェクトの
使用には、ほかのグループやプロジェクトによる実装の再利用が容易になるな
ど、いくつかの利点があります。たとえば JAXB 実装は、ほとんどが Sun と関係
のない多くのプロジェクトで利用されます。
Java 標準 API は Java Community Process のエキスパートグループで開発され、エキ
スパートグループのリーダーの多くは GlassFish コミュニティーのメンバーです。
GlassFish コミュニティーはこれらの仕様を実装するだけでなく、レビュープロセ
スの中でフィードバックを行い、将来のリリースに向けた要求を提出します。
4
オープンソースライセンス
Open Source Initiative (OSI) では、さまざ
まなライセンス集合を承認しています。
ライセンスは多くの場合、その系統上の
ライセンスからいくつかの特性を継承し
ています。
ASL ライセンスは BSD および MIT ライセ
ンスの系統です。ASL は用途面できわめ
て柔軟です。
GPL、LGPL、GPLv2、および GPL+CPE はす
べて GNU ライセンスです。GNU ライセ
ンスはコードベースの「自由」の保護を
強調しています。GPL ライセンスはプロ
ジェクトベースです。
CDDL ライセンスはモジラパブリックラ
イセンス (Mozilla Public License、MPL) か
らの派生物です。GPL ライセンスと異な
り、これらのライセンスはファイルベー
スです。
ては、OSI の Web サイト
(opensource.org) を参照してください。
Copyright © 2007, Sun Microsystems, Inc
Java EE 6 に関する作業は、EJB 3.1、JPA 2.0 などの仕様などをひとまとめにグルー
プ化する包括的プロジェクトである JSR 316 から始まりました。GlassFish v3 は
Java EE 6 を実装する予定です。
オープンソースと GlassFish
サーバーサイドの Java プロジェクトのうち、最初に広く受け入れられた 1 つは
Tomcat でしょう。Tomcat は、Sun および JServ の開発者を含むグループによって
Apache で開始され、Java サーブレットおよび Java Server Pages (JSP) 仕様の初期
バージョンのリファレンス実装になりました (最新仕様の RI は GlassFish)。Tomcat
はサーバーサイド Java の初期の普及に重要な役割を果たし、オープンソースライ
センスのもとで公開され、企業の組織内でのオープンソースソフトウェアの普及
に貢献しました。
多くの種類のライセンスが存在しますが (傍注「オープンソースライセンス」を
参照)、この記事では各ライセンスの特徴を詳しく説明することはしません。そ
れぞれのライセンスは異なった特性を持ち、それぞれのコミュニティーに合った
ライセンスも異なります。あるライセンスに関してあるコミュニティーが利点と
考える点が、別のコミュニティーには欠点とみなされる場合があります。たとえ
ば、Apache コミュニティーでは ASL ライセンスが使用される一方で、GNU コミュ
ニティーでは GPL ライセンスが使用されています。
GlassFish ではその発足当初、Common Development and Distribution License (CDDL)
のみを使用していました。しかし、2006 年 11 月の Java SE および Java ME のオー
プンソース化に際して、Sun は各コミュニティーの要求を再検討し、Java ME には
GPLv2 ライセンスを、Java SE にはクラスパス例外条項付き GPLv2 (GPLv2+CPE) を適
用することを決定しました。GPL ライセンスの採用により、GNU ClassPath コミュ
ニティーおよび Kaffe コミュニティーとのさらなる相乗作用がもたらされ、CPE
により非 GPL 成果物に対するリンクが可能になっています。その時点で、
GlassFish コミュニティーは CDDL に GPLv2+CPE を追加し、デュアルライセンス形
態となりました。デュアルライセンスは、どちらのライセンスも使用できること
を意味します。したがって、CDDL が GlassFish 商用パートナーにもたらすメリッ
トを維持したまま、GNU、Java SE、および Java ME の各コミュニティーとの相乗
作用を付加することができます。どのような場合でも、GlassFish 配布にはバイナ
リライセンスはありません。
GlassFish と Java EE 5 の普及
本番品質を備えたオープンソースの Java EE 5 実装の登場は、需要の創出とそれに
応える供給によって Java EE 5 プラットフォームの普及を加速しました。
この記事の執筆時点 (訳注:2007年 9 月現在) で GlassFish のダウンロード数は 350
万を超えており、これらの開発者およびデプロイヤ (傍注「本番環境への移行」
を参照) は Java EE 5 の利点を実感し、Java EE 5 のサポートに対する需要も高まり
5
Java EE 5 の Web サービスエンドポ
イント
次のコードスニペットは、Web サービ
スのエンドポイントを示します。
import javax.jws.WebService;
@WebService
public class MySimpleWS {
public String sayHello(String s) {
return “Hello” +s;
}
}
これは、次のような (トランザクション
型) ステートレスセッション Bean に変
換できます。
import javax.jws.WebService;
import javax.ejb.Stateless;
@WebService
@Stateless
public class MySimpleWS {
public String sayHello(String s) {
return “Hello” +s;
}
}
Copyright © 2007, Sun Microsystems, Inc
ました。GlassFish アプリケーションサーバーはその需要の一部を満たしただけで
なく、Java EE 5 準拠の実装をより迅速に、より低コストで完成させるために
GlassFish の本番品質のコンポーネントを利用できるという点で、ほかの Java ベ
ンダーもその恩恵を受けました。
TmaxSoft、Oracle、BEA、JBoss、Jetty、Geronimo などのベンダーが GlassFish を利
用しています。TmaxSoft は韓国における主要な Java EE ライセンシであり、同社
の最新リリース JEUS 6 では、GlassFish コミュニティーへの同社の参加を通じて
JAXB、JAX-WS、Fast Infoset、JSP、JSF、および TopLink Essentials を利用していま
す。TmaxSoft は早期の評価を通じて、多くのコンポーネントが自社のニーズに適
合していることを確認しました。このような経緯で、TmaxSoft の JEUS 6 は、Sun
独自のアプリケーションサーバーに続いて Java EE 5 認定を受けた最初のアプリ
ケーションサーバーになりました。
Oracle は自身も Java EE 5準拠の アプリケーションサーバーをリリースしています
が、同社は GlassFish コミュニティーの TopLink Essentials プロジェクトの主要コン
トリビュータです。前出のベンダーのうち、BEA は JAXB と JAX-WS を、JBoss は
JAXB と JSF を、Jetty は JSP と Grizzly を、Geronimo は JAXB をそれぞれ利用してい
ます。
なお、Java EE 5認定を受けたアプリケーションサーバ製品の一覧は次のサイトで
確認することができます。
http://java.sun.com/javaee/overview/compatibility.jsp
6
リソース注入
J2EE 1.4 では、かなりの量のテンプレー
トコードが必要になります。次に示すの
は、一般的な EJB 参照の例です。
Context initial = new InitialContext();
Context myEnv = (Context)initial....
Object objref = myEnv.lookup(“...”);
ConverterHome home = (ConverterHome)
PortableRemoteObject.narrow(...);
Converter currentConverter =
home.create();
Java EE 5 では、規約およびリソース注入
によって次のようにコードを簡素化でき
ます。
@EJB Converter currencyConverter;
Copyright © 2007, Sun Microsystems, Inc
Java EE 5 の概要
Java EE 5 のメインテーマは「開発の容易性」であり、これを達成するための主な
手段は、Java SE 5 のアノテーション (注釈) を使用して POJO (Plain Old Java Object)
ベースのプログラミングを可能にすることです。アノテーションは、メソッドお
よびクラスのプロパティーの指定 (傍注「Java EE 5 のWebサービス エンドポイン
ト」を参照)、リソース注入 (傍注「リソース注入」を参照)、移植性のある動作の
記述 (傍注「アノテーションはデフォルト」を参照) などのさまざまな用途に使用
されます。
主な Java EE 5 仕様には次のものがあります。
!
JAX-WS 2.0 と JAXB 2.0
!
EJB 3.0 と Java Persistence API
!
JSF 1.2 と JSP 2.1
!
StAX
JAXP やサーブレットなどのその他の多くの仕様にも、比較的小規模な、保守目的
のリリースが存在します。これらすべての変更が開発者の経験に及ぼす全体的な
影響はきわめて大きなものでした。
アノテーションはデフォルト
次に示すのは、JAXB 2.0 で生成される一
般的なコードです。
@XmlAccessorType(FIELD)
@XmlType(name=””,propOrder={“x”,”y”})
@XmlRootElement(name=”point”)
public class Point {
protected float x, y;
public float getX() {return x; }
public setX(float value){ this.x = value; }
public float getY() {return y; }
public void setY(float value) { this.y =
value;}
}
Java EE 5 と GlassFish の間には、Java EE 5 仕様の長所が GlassFish の価値を高め、
GlassFish の存在が Java EE 5 の検証に寄与しているという、きわめて共生的な関係
を続けてきました。実装の早期実現によりコミュニティーは早い段階から仕様を
検証でき、仕様そのものの発展過程でさらに効果的なフィードバックループがな
されるという点から、Java EE プラットフォームの将来のバージョンでもこのよう
な関係が持続することが期待されています。
アノテーションの利用方法についてはまだ学習が始まったばかりです。たとえ
ば、JAXB 2.0 仕様は 2 つの部分で構成されます。一方の部分では XML スキーマか
らアノテーションへのマッピング方法について、もう一方ではそれらのアノテー
ションのセマンティクスについて定義しています。これが意味するのは、生成さ
れるコードの変更が可能であり、そのコードは引き続き、仕様に準拠したすべて
のアプリケーションサーバーで問題なく動作するということです。傍注中のコー
ドを例にとると、設定メソッドおよび取得メソッドに対する副次的作用を実行す
るコードを追加しても、コードの移植性は保たれます。
7
Copyright © 2007, Sun Microsystems, Inc
GlassFish のリリース
GlassFish には v1、v2、および v3 の 3 つのバージョンがあり、それぞれ開発の
フェーズが異なります。コミュニティーはまだ初期段階であり、プロセスはいま
だ作成途中であるという点を断った上で、現時点での GlassFish リリースのサイク
ルを示すと次のようになります。
!
概念形成 – 主な機能の収集、大まかな時間枠、プロトタイプ作成
!
アクティブ開発 – 使用可能なマイルストーンおよび最終リリースにつな
がる実装
!
保守 – 最終リリースのバグ修正、更新リリースの作成
GlassFish v1 は保守モードであり、GlassFish v2 はごく最近にリリースされ、保守
モードに入りました。GlassFish v3 は現在、概念形成の作成フェーズからアクティ
ブな開発に移行しています。GlassFish v3 ではモジュール型のアプローチを採用し
ていることから、最も可能性が高いのは段階的なリリースです。
GlassFish v1
GlassFish v1 は保守モードです。最終の v1 リリースは JavaOne 2006 直前の 2006 年
5 月でした。バグ修正の v1 UR1 は 2006 年 10 月に、より小規模な 2 回目の修正で
ある v1 UR1p1 は 2006 年 12 月に、それぞれリリースされました。開発が v2 に移
行したことから、現時点でこれ以上の保守リリースは予定されていません。
このよく知られている GlassFish v1 リリースは、公式に Java EE 5 RI となりまし
た。
GlassFish v1 は Sun Java System Application Server 9.0 PE という名称で Sun からも配
布されており、Java EE SDK、Java Application Platform SDK、NetBeans 5.5 Tools
Bundle などの、Sun が配布する多数のダウンロードに含まれています。GlassFish
v1 と SJS AS 9.0 PE の唯一の違いはインストーラです。Sun は最終バージョンの
GlassFish v1 (および SJS AS 9.0 PE) に対してさまざまなレベルの商用サポートを提
供しており、コミュニティーもベストエフォートながら質の高いサポートを提供
します。
GlassFish v2
GlassFish v2 は 2007 年 9 月にリリースされました。このリリースの主要かつ最も
重要な機能はクラスタ化 (グループ化、負荷分散、データレプリケーション) で
す。
GlassFish v2 には SJS AS 8.2 SE/EE のエンタープライズ品質機能がすべて含まれてお
り、Java Enterprise System のすべてのミドルウェア製品に対してテストが行われ
る予定です。GlassFish v2 はプロファイルの概念をサポートし、同じ実行可能ファ
イルを開発者、エンタープライズ、またはクラスタの各プロファイルで設定でき
8
Copyright © 2007, Sun Microsystems, Inc
ます。エンタープライズプロファイルでは、きわめて高い可用性 (99.999%) のた
めに高可用性データベース (High Availability Data Base、HADB) を使用する構成も
可能です。
GlassFish v2 も Sun Java System Application Server 9.1 のブランドで Sun から配布さ
れ、Java ES 5.1 などの多数のバンドルに含まれています。コミュニティーによる
サポートと商用サポートが提供されます。
GlassFish v3
GlassFish v3 は JavaOne 2007 で発表され、きわめて高い関心を呼びました。その
アーキテクチャーはデフォルトでモジュール型であり、カーネルはきわめて小さ
く (100Kb 未満で、デスクトップだけでなくモバイル用途にも適する)、起動時間
は 1 秒未満です。モジュール型のカーネルは複数のコンテナをサポートし、現時
点で Java Web、PHP (Caucho Quercus 経由)、jRuby on Rails、Phobos JavaScript が統
合されています。サポートはさらに追加される予定であり、独自のコンテナを記
述することもできます。
GlassFish v3 のプレビューバージョンは http://glassfish.java.netから、ドキュメン
トは http://wiki.glassfish.java.net および http://hk2.dev.java.netからそれぞれ入手
可能です。
GlassFish v3 のアクティブ開発はこれから開始しようとしている段階です。計画は
まだ進行中ですが、モジュール形式の開発により、高可用性 Java EE 6 製品の完全
版に向けた段階的なリリースが可能になると見込まれています。
Copyright © 2007-2008 Sun Microsystems, Inc.
9
Copyright © 2007, Sun Microsystems, Inc
GlassFish v2 の機能
機能概要
このセクションでは、この文書の公開時点までにベータ版のリリースが予定され
ている GlassFish v2 の機能について説明します。多数の機能があるため、ここで
は各機能の概要のみを示します。
Web 層はほとんどのエンタープライズアプリケーションの基盤であり、GlassFish
はきわめて豊富な Web 層サポートを提供します。
Web 層の Java 仕様
GlassFish には、JSP 2.1、JSF 1.2、Servlet 2.5、JSTL 1.2 といった最新の JCP 仕様のサ
ポートが含まれています。
次世代の標準ベース MVC フレームワークである Java Server Faces (JSF) は、Java EE
5 でプラットフォームに追加され、Java プレゼンテーション層のコンポーネント
モデルを提供します。JSF は JavaServer Pages (JSP) とともに、または Facelets など
のその他のテクノロジとともに使用できます。JSF 1.2 はそれ以前のリリースから
多くの改良がなされており、最も顕著なものは、統一された式言語 (unified
expression language) が JSF と JSP の間で共有されるようになったことです。JSF
1.2 では、AJAX サポートの強化など、要求サイクルをターゲットにしたいくつか
の改良も行われています。
JSP 2.1 の主な変更点は統一された式言語です。Servlet 2.5 および JSTL 1.2 にもい
くつかの変更点がありますが、それほど大きなものではありません。
GlassFish では、仕様の変更にとどまらない本質的な改良も数多く行われていま
す。JSF 実装はパフォーマンスが大幅に向上し、いくつかの重要なバグに対する
修正が行われました。JSF 実装は JBoss およびその他少数のグループにも採用され
ています。サーブレットコンテナが Tomcat をベースとしている点は変わってい
ませんが、安定性とパフォーマンスのために保守が分離されました。
GlassFish のもう 1 つの注目すべき変更点は、Java コンパイラの Jasper が Java SE 6
のコンパイラ API (JSR-199) を利用できるようになり、ファイル IO の回避とコンパ
イル速度の大幅な向上 (非公式の計測では約 10 倍の高速化) が実現されたことで
す。JSR-199 を使用する場合ほど高速ではありませんが、Eclipse JDT コンパイラを
使用するように Jasper を構成することもできます。残念なことに今は手元にベン
チマーク結果がないのですが、JSF 実装も大幅に改善されました。
GlassFish では最近、Project Woodstock の高品質 JSF コンポーネントの利用も開始
しました。これは、多くの開発者にとって自身の利益ともなる興味深い事項と思
われます。コンポーネントはオープンソースであり、
http://woodstock.dev.java.netで公開されています。
10
Copyright © 2007, Sun Microsystems, Inc
パフォーマンスの向上
GlassFish v2 では、多くの領域でパフォーマンスが向上しています。その一部とし
て、Web 層では JSF、JSP、Grizzly、Web サービスでは JAXB と JAX-WS、さらには
CORBA と EJB のパフォーマンスが向上しています。
免責事項
SPEC およびベンチマーク名称
SPECjAppServer 2004 は、Standard
Performance Evaluation Corporation の登
録商標です。Sun Fire T2000 (1 チップ、8
コア) 1.4GHz 883.66 SPECjAppServer2004
JOPS@Standard。前出のベンチマーク比
較結果は、2007 年 7 月 10 日時点で
www.spec.org 上で公表されている結果に
基づくものです。最新の SPECjAppServer
2004 ベンチマーク結果については、
http://www.spec.org/を参照してくださ
い。
これらすべての取り組みが結実した成果、SPECjAppServer 2004 ベンチマークで世
界記録を出しました。Sun は 2007 年 7 月に、T2000 マシン上での第 1 位の結果
(883.66 JOPS@Standard) を公表しました。この結果は、GlassFish v1/SJS AS 9.0 と比
べて 60%、BEA WebLogic と比べて 10%、IBM WebSphere 6.1 と比べて 30% より高
速です。別のベンチマーク結果 (PostgreSQL データベース使用時の 813.73
JOPS@Standard) は、HP マシン上の Oracle のスコアと比較して 3 倍の価格性能比
を示しています。
オープンソースとエンタープライズ機能のどちらを選ぶかという選択が過去のも
のであることは明白であり、現在ではその両立が可能です。
起動時のパフォーマンスを改善するための独自の取り組みがなされました。起動
とシャットダウンのアーキテクチャーは大幅に簡素化されています。また、不必
要なサービスの初期化を最小化するために、起動時の依存関係がすべて分析され
ました。結果として、単一インスタンスとクラスタ全体の両方で、起動および
シャットダウンの時間が大幅に短縮されました。
一般的なフレームワークとの互換性
長年にわたって形成されてきた Java コミュニティーの中心的な強みの 1 つはその
多様性であり、この多様性は Web 層において、多数のフレームワークが存在す
るという形で特に顕著に現れています。これらのフレームワークは開発者の生産
性を大幅に改善します。特に設定を行わなくても、これらのフレームワークが
GlassFish の各リリースで問題なく機能することを確実にすることが、GlassFish コ
ミュニティーの明確な目標の 1 つでした。一般的なアプリケーションに対しても
同様のアプローチがとられています。
フレームワークの種類は膨大であり、日々増加しています。
AppFuse、DWR、Facelets、IBATIS、JBoss Seam、Shale、Spring、Struts、Tapestry、
WebWork、Wicket などはほんの一例に過ぎません。
11
Copyright © 2007, Sun Microsystems, Inc
AJAX サポート
GlassFish コミュニティーは、AJAX の分野で多くのプロジェクトを追跡していま
す。これらのほとんどの場合で、プロジェクトは GlassFish 固有のものではあり
ませんが、一部のプロジェクトは GlassFish に固有の拡張機能に依存する場合が
あります。
jMaki
(ajax.dev.java.net) は、Java、PHP、および Phobos を使用して、JavaScript を核とし
た AJAX 対応 Web アプリケーションを作成するための軽量なモデルを提供するフ
レームワークです。このモデルは JavaScript、HTML、CSS をベースとしており、容
易に変更が可能です。jMaki は Dojo、Yahoo、Scriptaculous、Google、Spry などの
多数の AJAX ウィジェットライブラリと連携し、新しいライブラリの追加もきわ
めて容易です。jMaki はサーバーモデルに対する依存度が低く、導入や Web アプ
リケーションへの組み込みが容易です。
Phobos (phobos.dev.java.net) はスクリプティングと相性の良い軽量の Web アプリ
ケーション環境であり、Java プラットフォーム上で動作します。次々に浮上する
開発者の要求に対応することを狙いとしています。Phobos の開発当初は
JavaScript のみを対象にしていましたが、設計上は他の動的言語の使用もサポー
トされるようになりました。Phobos は jMaki よりも野心的なプロジェクトであ
り、まだ開発の初期段階ですが、興味深い相乗作用を示しています。サーバー側
およびクライアント側の両方で JavaScript を使用することは、一部のコードの再
利用に加えて、JSON 経由のコンテンツ転送を簡素化します。Java スクリプティン
グエンジン Rhino もきわめて安定しており、E4X やバイトコードコンパイルなど
の拡張機能も利用できます。
12
Copyright © 2007, Sun Microsystems, Inc
Phobos のアーキテクチャー
GlassFish には、次に挙げる AJAX に関連するいくつかの JSF 固有プロジェクトも存
在します。Woodstock は AJAX コンポーネントを含む JSF コンポーネントのコレク
ションです。Dynamic Faces は、AJAX を JSF に高い品質で統合することを目指して
います。AJAX は DWR や AJAX4JSF などのプロジェクトを通じてもサポートされま
す。
Grizzly
GlassFish における Web 層の下位層は、Grizzly Framework (grizzly.dev.java.net)を通
じて実装されます。このフレームワークは Java で記述され、NIO API (スケーラブ
ルなネットワークおよびファイル I/O) を利用してスケーラビリティーを提供して
います。また、高度なカスタマイズが可能であり、高い汎用性を持ちます。
Grizzly HTTP コネクタの役割は、Tomcat で使用される Java ベースの Coyote コネク
タの役割と、C ベースの Apache Portable Runtime (APR) の役割に似ています。非公
式の初期テストでは、きわめて高いスケーラビリティーが示されました。
NIO の利用をきわめて容易にするという点で、Grizzly は高い関心を呼びました。
たとえば、AsyncWeb と Jetty の両方で、Grizzly との統合のプロトタイプが作成さ
れました。Grizzly は、機能を充実させるために、そして GlassFish コミュニティー
内外の他のグループのニーズにさらに応えるために、さらなる一般化を図るプロ
セスの途上にあります。
Grizzly は GlassFish から独立した形で使用できます。Phobos および Ruby 用の
NetBeans プラグインはそのような使用形態の例です。Grizzly の柔軟性は、「長時
間の HTTP 接続」の効率的なサポートを提供する目的に使用できます。このサ
ポートは Comet とも呼ばれ、チャット、オンラインカレンダーの使用、またはド
キュメント共有、継続的なコンテンツ更新などのアプリケーションで使用できま
す。
13
Copyright © 2007, Sun Microsystems, Inc
プレゼンテーション層の選択肢
GlassFish コミュニティーの一般的なテーマは多様性の受容です。その理由は、
「競争は品質を高める」、「1 つのサイズがすべてに適合するとは限らない」、
「革新はどこでも起きる」などさまざまです。このことが特に当てはまるのはプ
レゼンテーション層です。GlassFish はこの層で、Java プラットフォームに基づく
一般的なフレームワークに加えて、より新しいいくつかの選択肢を実現します。
これらの選択肢は、GlassFish アプリケーションサーバー上に直接層を形成する場
合もあれば、それと並行する形で共存する場合もあります。
すでに述べたように、サーバーサイド JavaScript は Phobos プロジェクトを通じて
サポートされます。この場合、サーバーサイドの JavaScript コードは Rhino イン
タプリタを使用して GlassFish 上で実行されます。
Ruby ベースのアプリケーション (最も有名な例は Rails) は、2 つの異なるアプ
ローチで実行できます。一方のアプローチでは、Rails は Java プラットフォーム
の上層の jRuby 上で実行されます。もう一方のアプローチでは、CGI インタ
フェースを通じて GlassFish と通信するネイティブ Ruby インタプリタ上で Rails
が実行されます。GlassFish 上で動作する Rails は特に魅力的な構成で、積極的に
研究されており、将来の開発は注目に値します。
PHP も GlassFish 上で、Caucho が Java で開発した Quercus PHP 5 実装とともに使
用できます。Caucho と GlassFish の両コミュニティーは、GlassFish 上で Quercus
を動作可能にするために協力して取り組んでいます。
Web サービス – Metro
GlassFish の Web サービススタックは Metro と呼ばれます。GlassFish v1 は、新し
い JAX-WS 2.0 API (jax-ws.dev.java.net) を通じて、開発の容易性に大きな向上をもた
らしました。GlassFish v2 では、この API は JAX-WS 2.1 へのわずかな進化にとど
まっていますが、数年にわたる進化と数回の再設計の結果として、実装には大き
な変化が生じています。Metro 実装はきわめて洗練されており、十分な機能と高
いパフォーマンスを備えています。そのパフォーマンスは、業界最先端のテクノ
ロジと考えられている AXIS 2 スタックとの比較で 30 ∼ 100% のパフォーマンス
向上 (次の図を参照) という Sun のベンチマーク結果で実証されています。JAX-WS
2.0 は Sun の Java SE 6 RI でも利用可能であり、JAX-WS 2.1 へのアップグレードが
可能です。
SJS AS 8.2 は JAX-RPC 1.1 の実装を備えていました。GlassFish v1 で使用されていた
JAX-WS 2.0 の最初の実装はおおむね JAX-RPC 1.1 をベースとしていましたが、その
とき以来、2回ほど JAX-WS にとっては大きな挑戦となる 2 つの課題に対応する変
更が行われています。最初の課題は新しい仕様に起因しています。JAX-RPC 1.1 と
異なり、JAX-WS 2.0 はデータバインディングに関するすべての決定を JAXB 2.0 に
委譲し、HTTP 以外のプロトコルをもっと慎重に扱うようにも変更されました。
これに加えて、Sun はしばらく前から XML テキストエンコーディングのパフォー
14
Fast Infoset
XML 文書はきわめて冗長になる可能性が
あり、一部の領域では、サイズに加えて
伝送コストがその適用可能性を阻害する
要因となります。Gzip のようなエンコー
ディングはサイズを縮小しますが、それ
にはエンコーディング時間の犠牲が伴い
ます。ANSI/ISO 標準の Fast Infoset は、
Copyright © 2007, Sun Microsystems, Inc
マンスコストを認識し、効率的な XML エンコーディングを行うためのさまざま
な標準化団体に参加してきました (傍注「Fast Infoset」を参照)。
その結果、トランスポート、エンコーディング、およびデータバインディングを
明確に分離するために、JAX-WS 実装の再構築することになりました。この新し
い Metro アーキテクチャーは GlassFish v2 に統合され、次のものをサポートしま
す。
!
複数のトランスポート – HTTP、JMS、および TCP/IP が実装され、SMTP
が設計されました。
つの異なる商用実装がありますが、ほか
!
複数のエンコーディング – テキスト XML、MTOM、および Fast Infoset が
サポートされます。
の領域の研究を進めています)、GlassFish
の Web Services スタックは複数のエン
!
データバインディング – データバインディングは JAXB によって扱われ、
データの受け渡しはいろいろなところでコピーを作らないようきわめて
慎重に行われます。
より優れた全体的なトレードオフを提供
します。
この記事の執筆時点で Fast Infoset には 4
の標準が主導権を握る可能性もあるため
(たとえば、W3C EXI Working Group もこ
コーディングをサポートするように設計
されています。このスタックは現在、テ
キストエンコーディングに加えて MTOM
および Fast Infoset の各エンコーディン
グをサポートしますが、ほかの標準につ
いても登場次第サポートする予定です。
このアーキテクチャーは、データのコピーを招かないように、複数のスタック可
能な処理エンティティー (それぞれが WS-* 仕様の 1 つを実装している) をサポー
トするように設計されています。次の図にその構造を示します。
Fast Infoset は WSIT とともに使用できま
す。Windows Communication Foundation
(WCF) もエンコーディング分離を提供
し、一部のベンダーは FI サポートのた
めにそれを利用します。
パフォーマンスは変動する目標です。従来の JAX-RPC 1.1 スタックもかつては高い
パフォーマンスを誇り競争力がありましたが、新しい JAX-WS 2.0 の実装ではほぼ
2 倍のパフォーマンスが達成されています。Axis 2 と比較した最近の Metro (JAXWS 2.1) スタックのパフォーマンス結果には、業界で最高のスタックを提供する
という GlassFish チームの意志が現れています。
15
Copyright © 2007, Sun Microsystems, Inc
スループットだけがパフォーマンスを測る重要な基準ではありません。状況に
よってはスケーラビリティーのほうが重要です。Business Integration グループの
ニーズは、何千ものトランザクションを処理でき、しかもそれらのトランザク
ションの一部はかなり長期にわたって存続するというものでした。JAX-WS 2.0 の
実装では、複数のタスクが実行スレッドの 1 つのプールを共有し、きわめて多数
のトランザクションを効率的に実行するために必要なスレッド数を非常に少なく
抑える、という実行モデルでこれを実現しています。
WSIT と Project Tango
Web サービスの有効な用途の 1 つは、Java と Microsoft プラットフォームの間で
相互運用性を実現するための手段としての利用です。Project Tango はその相互運
用性を提供している GlassFish コミュニティー内部のイニシアチブであり、Web
Services Interoperability Technologies (WSIT) が正式名称です (wsit.dev.java.net)。こ
れは Metro (metro.dev.java.net) のサブセットです。
Metro における Project Tango 機能の詳細な説明は、
http://wsit.dev.java.net/docs/tango-overview.pdfの全体の概要記事を参照してくだ
さい。
WSIT は GlassFish v2 の新しい WS アーキテクチャーを利用し、各種の WS-* 標準
は WS パイプライン内の要素によって処理されます。WSIT は透過的に機能しま
す。開発者は標準の JAX-WS 開発モデルを利用でき、NetBeans (NetBeans のプラグ
インを含む) を使用して WS-* 属性を宣言的に追加できます。この標準の目的は、
ほかのベンダー、特に Microsoft との相互運用性を保証することです。相互運用
性は何回もの WS Plugfest でテストされてきました。
現在、次の標準がサポートされています。
!
ブートストラップ: WS-MetadataExchange、WSDL、WS-Transfer
!
高信頼性メッセージング: WS-ReliableMessaging、WS-ReliableMessaging
Policy
!
不可分なトランザクション: WS-Coordination、WS-Atomic Transaction
!
セキュリティー: WSSecurity、WS-SecurityPolicy、WS-Trust、WS-SecureConversation
!
ポリシー: WS-Policy、WS-PolicyAttachment
16
Copyright © 2007, Sun Microsystems, Inc
XML 処理
GlassFish には、XML 処理のための JAXP API および StAX API のサポートが含まれて
います。
Streaming API for XML (StAX) は BEA が主導した新しい XML 解析 API であり、Java
プラットフォームへ新しく追加されたものです。この API は Java EE 5 および Java
SE 6 の各プラットフォームに含まれています。StAX は SAX および DOM の代替と
して使用でき、異なるパフォーマンス特性および API 特性を持ちます。DOM はイ
ンメモリー型のドキュメント中心 API です。ドキュメント解析の結果はオブジェ
クトの集合となり、どのような順序でも操作可能になりますが、この柔軟性は、
メモリー消費と解析パフォーマンスの両面でパフォーマンスにかなりの影響を及
ぼします。SAX はイベント駆動型 API であり、XML 文書内の新しい要素が解析さ
れるたびにコールバックを呼び出すことができます。SAX は DOM よりも優れた
パフォーマンス特性を持ちますが、イベントの応答中に状態を更新しなければな
らない「制御の反転」に結び付きます。
プル (pull) パーサーは SAX のパフォーマンス特性を持ちますが、必要な時にイベ
ントを引き出す (pull する) という構造により、メインコードの制御は保たれま
す。最近の GlassFish 開発には、Woodstox コミュニティー (Codehaus.org の高度に
最適化された StAX 実装) との共同作業が含まれています。
最新の JAXP 仕様は JAXP 1.4 です。JAXP 1.4 は JAXP 1.3 からの保守リリースです。
JAXP 1.4 では多くの改良および修正がなされていますが、大きな変更点は、参照
により StAX を取り込むというものです。J2SE 5.0 には JAXP 1.3 しか含まれていま
せんが、Java SE 6 には JAXP 1.4 が含まれています。GlassFish は J2SE 5 または Java
SE 6 とともに使用できます。
JAXP 1.4 実装は JAXP 1.4 および StAX の両方を提供しますが、StAX 実装は別途入手
が可能です。すべての実装は GlassFish コミュニティー内で行われ、それぞれ異な
るリリースサイクルを通って配布されます。
XML データバインディング
Java EE での XML データバインディングは JAXB API を通じて行われます。Java EE 5
に必要なバージョンは JAXB 2.0 (jaxb.dev.java.net) です。JAXB 2.0 は JAX-WS と同様
に、対応する J2EE 1.4 仕様と比較して多くの面で改良がなされています。この改
良は Java コミュニティーで高く評価されており、新しい仕様への移行がきわめて
急速に進んでいます。
JAXB 2.0 実装は非常に高品質で、高速で、十分な機能を備えています。JAXB の開
発者はほかのコミュニティーに対して非常に受容的な姿勢を保ち、その結果とし
て、JBoss、Apache Axis、Apache XFire、TmaxSoft、ServiceMix、ActiveSOAP などの
多くのグループが JAXB 仕様を利用しています。
17
Copyright © 2007, Sun Microsystems, Inc
Java EE 5 よりも新しいこと
Java EE 5 仕様は JAXB 2.0 および JAX-WS 2.0 を要求しますが、これらは GlassFish v1
および Java SE 6 により実装される仕様です。Microsoft の Windows Communication
Framework との Web サービス相互運用性など、複数のユースケースにおけるこれ
らの実装の経験は、JAXB 2.1 および JAX-WS 2.1.x の形で、これらの仕様に対する
互換性の改良に結び付きました。これらは GlassFish v2 によって実装される仕様
です。
GlassFish の統合テクノロジ
TopLink Essentials と JPA
Java EE 5 仕様での大きな機能面の向上の 1 つは、Java Persistence API (JPA) と、
Enterprise JavaBeans Specification の新しいバージョン (EJB 3.0) の追加です。これら
の API はそれ以前の EJB 2.1 から発展したものですが、Java アノテーションなどの
新しい Java 言語機能を利用し、Hibernate、Oracle TopLink、JDO などのコミュニ
ティーからの経験を取り入れています。
2 つの API は別々に使用できます。JPA はエンティティー持続性のための単純なプ
ログラミングモデルを提供し、Java EE 5 とは別に入手可能であり、J2EE 1.4、さら
には Java SE と組み合わせて使用することもできます。JPA には、各種の持続性プ
ロバイダをプラグインするための API も含まれています。EJB 仕様の残りの部分も
広範囲にわたるクリーンアップや簡素化が行われており、JPA を利用します。ど
ちらの仕様も高い評価を受け、広く普及しています。
TopLink Essentials (TLE) は GlassFish コミュニティーにおける JPA 実装です。このプ
ロジェクトは Oracle Corporation の多大な支援を得て開始され、TopLink 製品に関
する同社の長年の経験がベースになっており、発足以来 Sun との合同プロジェク
トとして進められてきました。GlassFish v1 などの初期の TLE 実装では仕様の遵守
が重視されていましたが、TLE の目標は十全な機能を備えた実装を実現すること
であり、Oracle の計画は、TopLink の特徴を取り入れ、より広範なコミュニ
ティーからの協力を得て TLE の機能を継続的に強化していく、というものです。
TopLink Essentials は、Oracle のアプリケーションサーバーを含むの多数の Oracle
商用製品、Sun の GlassFish 配布、NetBeans に加えて、Apache Tomcat、TmaxSoft
JEUS、Spring 2.0、EasyBeans を含むその他多数のコンテナで利用されています。
また、プラグインを可能にする機能により、ほかの JPA 実装の利用と、GlassFish
アプリケーションサーバーへのそれらの実装のプラグインがきわめて容易に行え
ます。これは Apache OpenJPA および Hibernate で問題なく行われており、きわめ
て一般的です。
18
Copyright © 2007, Sun Microsystems, Inc
CORBA
GlassFish には、十分な機能を備えた CORBA 実装が含まれています。この実装は
何年にもわたり着実に改良が続けられています。たとえば GlassFish v2 では、こ
の実装はスタブおよびスケルトンを動的に生成するようになり、NIO フレーム
ワークを活用しています。GlassFish v2 には、多くの重要なパフォーマンス向上も
含まれる予定です。
OpenMQ メッセージング
GlassFish には、次のものを提供する本番品質の Message Queue 実装
(mq.dev.java.net) が含まれています。
!
エンタープライズシステムコンポーネント間のメッセージバッファリン
グ
!
メッセージサーバーのスケーラブルな分散 (ブローカクラスタ化)
!
統合型の SOAP/HTTP メッセージング
!
Java および C クライアント API
!
スケーラブルな JCA 1.5 準拠のリソースアダプタ
!
エンタープライズ管理機能
!
広範囲な JMX サポート
GlassFish には、Tibco、WebSphere MQ 6、Active MQ、JBoss Messaging などの各種
メッセージングソリューションで使用できる JMS 用の汎用リソースアダプタも含
まれています。
19
Copyright © 2007, Sun Microsystems, Inc
Java Business Integration
GlassFish v2 には、Java Business Integration (JBI) API のサポートも含まれています。
この JCP 仕様 (JSR-208) は、サービス指向の統合バスのコア部分と、統合のための
コンポーネントアーキテクチャーを定義します。JBI は、共通のメッセージルー
ティングアーキテクチャー、サービスエンジンとバインディングのためのプラグ
インインタフェース、そして、複数のサービスを実行と監査が可能な単一の作業
単位に結合するための機構を標準化します。
GlassFish v2 に含まれる実装は Project OpenESB の成果物であり、この実装は Sun
のその他のエンタープライズレベルの製品で使用されています。OpenESB は
JavaEE Service Engine を経由して GlassFish に統合し、この同じインタフェースを
使って ServiceMix などの他の実装も利用できます。また、NetBeans の Enterprise
Pack によって提供される最上のツール群 (Service Assembly エディタ、グラフィカ
ル WSDL および XSLT エディタ、Intelligent Event Processor) も存在します。
クラスタ化と状態レプリケーション
GlassFish v2 には、動的クラスタ化およびメモリーレプリケーションを伴うクラス
タ化サポートが含まれています。動的クラスタ化は汎用フレームワークの Project
Shoal (shoal.dev.java.net) を通じて提供されます。このフレームワークは、JXTA を
利用してアプリケーションを動的に定義済みクラスタのメンバーにし、メンバー
になったアプリケーションに次のようなクラスタイベントを受け取れるようにし
ます。
!
メンバーの加入、計画的なシャットダウン、障害
!
復旧メンバー選択
!
自動での委譲復旧の開始
20
Copyright © 2007, Sun Microsystems, Inc
GlassFish v2 はインメモリーレプリケーション機能も提供し、HTTP セッション持
続性および Stateful (EJB) Session Bean 持続性のための軽量で低コストなソリュー
ションを実現します。これはほとんどのアプリケーションにとって十分ですが、
99.999% の可用性を要求するアプリケーションについては、高可用性データベー
ス (HADB) 持続性ソリューションも使用できます。
ツール
GlassFish は Java EE 5 仕様の開発と実装を通じて NetBeans コミュニティーと協力
して作業しており、NetBeans は GlassFish をサポートする最初の IDE となりまし
た。発足以来、IntelliJ、JBuilder、および MyEclipse にも GlassFish のサポートが追
加されました。より最近になって、Eclipse 3.3 (Europa) 用のプラグインもリリース
されました。
観点を変えると、GlassFish コミュニティーには多数のツールが含まれており、そ
のうちのいくつかは、ツール自体の魅力によりきわめて一般的なものになりまし
た。
ここで言及する価値がある 1 つのツールは Hudson です。これは、ビルドの実行
やテストの実施などの目的で使用されている継続的統合 (Continuous Integration)
ツールです。Hudson は簡単にセットアップでき、複数のスレーブマシンをサ
ポートし、機能を拡張するためのプラグインアーキテクチャーを備えています。
21
Copyright © 2007, Sun Microsystems, Inc
管理
GlassFish v2 の強みの 1 つはその管理です。GlassFish v2 には、十分な機能を備え
たタスク駆動型の GUI 管理に加えて、完全な TCL インタプリタと、入力ミスを修
正するための do what I mean 機構のような精密さを備えるコマンド行インタ
フェースが含まれています。GlassFish には、クラスタおよび負荷分散の管理に加
えて、JMX ベースの管理も含まれています。
インストール
すでに述べたように、GlassFish v2 が備える単一のインストーラで、開発者、クラ
スタ、エンタープライズという 3 種の異なるユーザープロファイルの任意のプロ
ファイルでインストールが可能です。http://glassfish.java.netから入手したファイ
ルを使用するインストールのプロセスは、2 ステップ (インストールと設定) の簡
単なコマンド行を実行するだけです。開発者プロファイルからクラスタプロファ
イルへのアップグレードが可能な点に注意してください。
Pack200 圧縮テクノロジ (Java SE 6 インストールバンドルでも使用されています)
の利用により、ファイルサイズそのものは以前のものに比べて非常に小さく抑え
られています (約 55MB) 。
Sun Java System Application Server での実装では、インストーラはもう少し洗練さ
れていてグラフィカルです。
Ubuntu では、予想されるとおりに apt-get を使用してインストールを実行できま
す。
Sun Java System Application Server 9.1 も利用可能であり、Java Enterprise System 5
Update 1 の一部としてサポートされます。
22
Copyright © 2007, Sun Microsystems, Inc
Update Center
Update Center では、GlassFish のアドオンコンポーネントや更新ファイルを配布し
ています。また、コミュニティーへの貢献を行うための手段も提供します。現
在、さまざまなアドオンコンポーネントが Update Center を通じて配布されてい
ます。
GlassFish Update Center は、http://updatecenter.dev.java.net上でホストされている
オープンソースプロジェクトです。GlassFish v2 の初期リリースでは、GlassFish 用
の追加アプリケーションを簡単にダウンロードおよびインストールするための手
段の提供に重点を置いています。
GlassFish における Update Center の機能は 2 つの層にまたがって実装されていま
す。サーバー側には Update Center モジュールと対応するカタログ XML ファイル
が配置されます。クライアント側は GlassFish v2 インストールの一部です。
Update Center クライアント (GlassFish 配布の /updatecenter ディレクトリに置か
れています) を起動すると、定義済みの Update Center サーバー URL に接続しま
す。クライアントはその後、利用可能なカタログファイルをダウンロードし、そ
の内容をローカルにインストールされたコンポーネントレジストリと比較し、カ
タログ情報を使用してインストールまたは更新が可能なコンポーネントを表示し
ます。その後、ユーザーの選択に基づいてコンポーネントがダウンロードおよび
インストールされます。
23
Copyright © 2007, Sun Microsystems, Inc
この機構を利用して、GlassFish の新しい機能、フレームワークライブラリ、さら
には Web アプリケーション全体を配備することができます。独自の Update
Center アドオンモジュールを作成してパッケージ化し、テストを行い、クライア
ントソフトウェアに追加の Update Center 定義を追加するだけでそのモジュール
を公開できます。
本番環境での GlassFish
オープンソースプロジェクトに共通する特性は、普及サイクルの迅速化です。こ
れは、テクノロジを利用するタイミングを、そのテクノロジの準備度と、ユー
ザー自身の機能/リスク状況の評価に基づいて決定できることによって実現され
ます。GlassFish の場合には、GlassFish v1、さらには GlassFish v2 に関しても、こ
のことが普及を加速したものと理解しています。配備事例は GlassFish の成功に
不可欠なフィードバックループの最終段階に過ぎません。
http://blogs.sun.com/storiesではそれらの事例をまとめて紹介しています。
ここで紹介する導入例は Peerflix (peerflix.com) です。これはメディアを共有する
コミュニティーですが、最近その組織のインフラストラクチャーを再構築し、
Microsoft インフラストラクチャーから GlassFish v1 に切り替えました。新しいサ
イトでは、プレゼンテーション層に Facelets を使用した JSF および Apache Shale
を、MySQL データベース上での持続性のために Kodo JDO を使用しており、これ
らはすべて Solaris 10 上で動作しています。サイトの当初の運用状況はきわめて
良好なものでした。もう 1 つの重要な例は、JBoss ではなく GlassFish を選択し
た、オーストラリアで第 3 位の規模を誇る商用 Web サイトの wotif.com です。
GlassFish の開発
GlassFish の開発は、コミュニティーの参加とほかのコミュニティーとの協力を通
じて透明度の高い方法で進められています。コミュニティーおよび開発プロセス
は成果物に大きな影響を及ぼしました。このようなプロセスを経て作り出される
製品には、従来の開発プロセスで作り出された製品と比べて、より顧客のニーズ
に適しており、より迅速で正確なフィードバックループのおかげで品質が向上
し、開発サイクルはより迅速で機敏なものになる、という特徴があります。
その効果は予想以上でした。たとえば、Web サイト、ブログ、メーリングリスト
といった外部のコミュニケーション手段を利用することで、外部検索エンジン、
ブログリーダー、メーリングリストアーカイブなどのツールの活用が可能にな
り、Web 上のユーザーの活動を幅広くしました。その結果、グループが地理的に
分散していたり、タイムゾーンにまたがるような企業の場合でも、異種混合の
GlassFish コミュニティーの方が、1 つの企業内の均一質のグループの場合よりも
スムーズに情報が流れることになりました。
24
Copyright © 2007, Sun Microsystems, Inc
将来の方向性
GlassFish は進行中の作業です。Sun は、コミュニティーおよび製品が発展し続け
ることを願っています。コミュニティーではその運営体制の整備を進めており、
この記事の公開時点までに暫定の運営委員会が公表される予定です。コミュニ
ティーの拡充も継続されます。また、JavaOne 2007 に先立って開催された
GlassFish Day のようなイベントなど、複数の手段でコミュニティーの構造が継続
的に強化されていくことを期待しており、いくつかの GlassFish ユーザーグループ
を発足させることも検討しています。Sun TechDays カンファレンス
(http://developers.sun.com/events/techdays/)のようなイベントが読者の皆様の地
域で開催される予定であれば、GlassFish Day も同時に開催される可能性がありま
す。
高品質なバージョン 2 の機能を完成させた今、コミュニティーの短期の目標は、
普及および配備を促進することです。Jersey や Sailfin などの GlassFish プロジェク
ト (以降の段落を参照) は、重要な追加プロジェクトです。今よりも多くのアプリ
ケーションやフレームワークが GlassFish と連携し、ほかのグループやコミュニ
ティーとの関係が深まることを願っています。
中期的な目標は GlassFish v3 (コードネーム: HK2) です。HK2 はモジュール性の高
いコンテナであり、起動が非常に高速で、管理対象のアプリケーションの実行に
必要なサービスのみを起動することによってリソースの消費を抑えます。そのよ
うなコンテナは、きわめて軽量な用途から高可用性用途までの幅広い環境に適し
ています。HK2 の初期ビルドは http://hk2.dev.java.netで公開されています。
JAX-RS アノテーションと POJO
次に示すのは、POJO を使用した一般的
な JAX-RS リソースです。
@UriTemplate("/helloworld")
public class HelloWorldResource {
@HttpMethod("GET")
@ProduceMime("text/plain")
public String getMessage() {
return "Hello World";
}
}
配備が完了すると、URI パス
「/helloworld」を使用してこのリソース
にアクセスできるようになります。
Jersey – RESTful Web サービス
JAX-RS は、RESTful Web サービスのための POJO ベースのプログラミングモデルを
定義する目的で、JCP (JSR 311) の内部で開発が進められている新しいテクノロジ
です。リソースは単純なアノテーション付き POJO であり、HTTP 動詞は Java メ
ソッドにマッピングされます (傍注「JAX-RS アノテーションと POJO」を参照)。コ
ンシューマアノテーションとプロデューサアノテーションにより、MIME タイプ
の操作がさらに簡略化されます。
仕様の策定作業は http://jsr311.dev.java.net/で進められており、初期のドラフト
もこのサイトで公開されています。JAX-RS は、近く登場する Java EE 6 仕様 (JSR
316) のコンポーネントの候補に挙げられています。
Jersey (http://jersey.dev.java.net)は JSR 311 のリファレンス実装であり、仕様の発
展に忠実に追従しています。Jersey ランタイムは、GlassFish サーブレットコンテ
ナ、Metro JAX-WS エンドポイント、Grizzly、Java 6 (その軽量 Web サーバーを使
用)、Tomcat などのさまざまな環境に配備できます。
Jersey は実際にはライブラリの集合であり、GlassFish では Update Center を使用し
て容易にインストールできます。NetBeans 6.0 は、POJO からのリソース作成に加
25
Copyright © 2007, Sun Microsystems, Inc
えて、JAX-RS リソース用の AJAX ベースのテストクライアントの作成をサポートす
るように設定されます。
Sailfin – GlassFish のための SIP サーブレットテクノロジ
Project SailFin (http://sailfin.dev.java.net)は、Ericsson および GlassFish v2 アプリ
ケーションサーバーの成果である、堅牢でスケーラブルな SIP Servlets Technology
をベースにしています。
Session Initiation Protocol (SIP) と SIP サーブレットは、Voice-over-IP (VoIP) 電話サー
ビス、インスタントメッセージング、在席および連絡先管理、Web 会議など、多
くの一般的なサービスを背後で支えています。次世代の電気通信サービスの構築
に際しては、SIP サーブレットがさらに大きな役割を果たすと期待されていま
す。
SIP サーブレットを Java EE と組み合わせて使用することにより、豊富なメディア
対話機能をエンタープライズアプリケーションに付加することができます。SIP
Servlet 1.1 (JSR 289) は、SIP Servlet API を更新し、SIP サーブレットと Java EE コン
ポーネントを混在させるための標準アプリケーションプログラミングモデルを定
義します。Web サービス、持続性、セキュリティー、トランザクションなどの
Java EE サービスを利用して、よりスマートなコミュニケーション対応アプリケー
ションをより迅速に開発できるようになります。Project Sailfin の目標は、その最
初のリリースで JSR 289 を実装することです。
SailFin Web サイト (http://sailfin.dev.java.net)から入手可能な日次ビルドおよびマ
イルストーンビルドは自己展開形式であり、GlassFish アプリケーションサーバー
と同じようにインストール可能です。Web サイトではサンプルアプリケーション
もドキュメント付きで公開されています。
SailFin の最初のリリースは 2008 年の中頃が予定されています。
参考資料
GlassFish コミュニティーの活動状況を追跡するのに最適な場所は TheAquarium
(blogs.sun.com/theaquarium) です (日本語訳は blogs.sun.com/theaquarium_ja で提
供されています) 。このグループブログでは毎日、コミュニティー内の最も重要
な活動にスポットを当てて紹介しています。関連ブログの Stories
(blogs.sun.com/stories) では、GlassFish の導入事例をまとめて紹介しています。
java.net 上の GlassFish コミュニティーのホームページ (glassfish.java.net) では、ド
キュメント、メーリングリスト、フォーラム、Wiki などのコンテンツが利用可能
です。すべての GlassFish ビルドもこのサイトから入手可能です。
GlassFish ビルドはいくつかの異なった形式で提供されます。毎晩 (Nightly) および
毎週 (Weekly) のビルドはソース形式の定期ビルドです。マイルストーンビルドは
安定化サイクルを経過しており、通常は新しい機能を含んでいます。個別の詳細
26
Copyright © 2007, Sun Microsystems, Inc
Eduardo Pelegri-Llopart
は Sun Microsystems
については関連のハイライトノートで説明されています。最終ビルドは最も安定
しており、配備が推奨されるビルドです。Sun はこれらの最終ビルドのサポート
を提供します。
GlassFish コミュニ
連絡先
著者について
の Distinguished
Engineer であり、
ティーの全体的な
リードをつとめています。
Eduardo は多数のオープンソースプロ
ジェクトで実績を積み、1995 年から
Java コミュニティーに参加しています。
サンフランシスコのベイエリアに在住し
ています。
Yutaka Yoshida は GlassFish のエンジニア
GlassFish コミュニティーおよび GlassFish アプリケーションサーバーのメリットを
理解する上で、この記事が読者の皆様の一助となれば幸いです。読者の皆様が実
際に GlassFish を体験し、その有用性を実感して頂くことを願っています。ま
た、皆様からのあらゆるフィードバックを常に歓迎しています。詳細については
以下をご覧ください。
http://glassfish.java.net/
です。
http://blogs.sun.com/theaquarium/
Alexis Moussine-Pouchkine は GlassFish の
(日本語サイト)
リを拠点に活動しています。
https://glassfish.dev.java.net/ja/
エバンジェリストであり、フランスのパ
http://blogs.sun.com/theaquarium_ja/