28
GlassFish コミュニティー Java EE Application Server の提供 !"# Eduardo Pelegri-Llopart $% ’ Alexis Moussine-Pouchkine Sun Microsystems, Inc. ()# $% *+ ,-./0123456789:;

Wp Glass Fish Overview

Embed Size (px)

Citation preview

Page 1: Wp Glass Fish Overview

!!

!

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

GlassFish コミュニティーJava EE Application Server の提供!"# Eduardo Pelegri-Llopart

$%&'Alexis Moussine-PouchkineSun Microsystems, Inc.

()# $%&*+,-./0123456789:;

Page 2: Wp Glass Fish Overview

!!

!"

GlassFish <=..................................................................2Java >?@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...............................................................6GlassFish LFFD4.......................................................................................7

GlassFish v1.................................................................................................7

GlassFish v2.................................................................................................7

GlassFish v3.................................................................................................8

GlassFish v2 LQR..........................................................9QROP........................................................................................................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.................................................23GlassFish L��.............................................................23��L�Wa................................................................................................23

Jersey – RESTful Web ,Dj4........................................................................24

Sailfin – GlassFish L��L&SIP ,D�]@A51{2|...............................25

����.......................................................................25���...........................................................................26

Page 3: Wp Glass Fish Overview

1 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 アプリケーションサーバーの概要をあらゆる側面から解説します。

Project GlassFish

Sun は 2005 年 6 月の JavaOne 期間中に、Java EE 5 および Sun のアプリケーションサーバーのリファレンス実装を

オープンソース化するための Project

GlassFish を立ち上げました。

それから 1 年も経たない 2006 年 5 月の

JavaOne 2006 で、バージョン 1 のリリースが発表されました。

バージョン 2 は 2007 年 9 月にリリースされました。

現在の開発の中心は、モジュール型の軽量アプリケーションサーバーである

GlassFish v3 (HK2 を参照) です。

Page 4: Wp Glass Fish Overview

2 Copyright © 2007, Sun Microsystems, Inc

GlassFish とはGlassFish は「コミュニティー」であり「アプリケーションサーバー」です。コミュニティーの主な成果物は、Java EE 5 互換のアプリケーションサーバーである

GlassFish アプリケーションサーバーと、Java Persistence API のリファレンス実装 である TopLink Essentials です。

GlassFish コミュニティーでは、Java EE 5 に含まれるJAXB、JAX-WS、JAXP、StAX、JSP 、 JSF などの JCPで規定された技術のための再利用可能モジュールを含む、その他多数の有用なコンポーネントの開発も行っています。jMaki、Phobos、DynaFaces などの広く知られた次世代 Web プロジェクト、継

続的な統合を行う Hudson をはじめとする多数のツール、そしてNIO ベースの サーバーフレームワーク Grizzly のような有用なインフラストラクチャーも

GlassFish に含まれます。GlassFish コミュニティーでは、これらすべてのコンポー ネントの Maven リポジトリの保守も行っています。

Java プラットフォームとアプリケーションサーバー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™

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 などの広範な配布リリースに含まれていました。

• 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)

• JCP (Java Community Process)

リファレンス実装 (RI) とはJava Community Process (JCP) で策定され

る仕様はエキスパートグループ (Expert

Group、EG) の成果であり、エキスパート グループリーダー (EG Lead) が調整を担

当します。

エキスパートグループは次のものを提供します。

• 仕様文書

• テクノロジ互換性キット (Technology

Compatibility Kit、TCK)

• リファレンス実装 (Reference

Implementation、RI)

RI は仕様を実装し、TCK の検査を通過したものです。

RI の品質には、概念実証 (PoC)レベルから本番品質の実装まで幅があります。GlassFish は本番品質を備えた Java EE 5

準拠のアプリケーションサーバーです。

Java EE 5 RI は厳密には、そのようなもの として宣言された GlassFish コードベー

スの特定のスナップショットです。

Page 5: Wp Glass Fish Overview

3 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 コミュニティーはこれらの仕様を実装するだけでなく、レビュープロセスの中でフィードバックを行い、将来のリリースに向けた要求を提出します。

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

Page 6: Wp Glass Fish Overview

4 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 のサポートに対する需要も高まり

オープンソースライセンス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) を参照してください。

Page 7: Wp Glass Fish Overview

5 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

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;

}

}

Page 8: Wp Glass Fish Overview

6 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 やサーブレットなどのその他の多くの仕様にも、比較的小規模な、保守目的のリリースが存在します。これらすべての変更が開発者の経験に及ぼす全体的な影響はきわめて大きなものでした。

Java EE 5 と GlassFish の間には、Java EE 5 仕様の長所が GlassFish の価値を高め、GlassFish の存在が Java EE 5 の検証に寄与しているという、きわめて共生的な関係を続けてきました。実装の早期実現によりコミュニティーは早い段階から仕様を検証でき、仕様そのものの発展過程でさらに効果的なフィードバックループがなされるという点から、Java EE プラットフォームの将来のバージョンでもこのような関係が持続することが期待されています。

アノテーションの利用方法についてはまだ学習が始まったばかりです。たとえば、JAXB 2.0 仕様は 2 つの部分で構成されます。一方の部分では XML スキーマからアノテーションへのマッピング方法について、もう一方ではそれらのアノテーションのセマンティクスについて定義しています。これが意味するのは、生成されるコードの変更が可能であり、そのコードは引き続き、仕様に準拠したすべてのアプリケーションサーバーで問題なく動作するということです。傍注中のコードを例にとると、設定メソッドおよび取得メソッドに対する副次的作用を実行するコードを追加しても、コードの移植性は保たれます。

リソース注入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;

アノテーションはデフォルト次に示すのは、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;}

}

Page 9: Wp Glass Fish Overview

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 はプロファイルの概念をサポートし、同じ実行可能ファイルを開発者、エンタープライズ、またはクラスタの各プロファイルで設定でき

Page 10: Wp Glass Fish Overview

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.

Page 11: Wp Glass Fish Overview

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 で公開されています。

Page 12: Wp Glass Fish Overview

10 Copyright © 2007, Sun Microsystems, Inc

パフォーマンスの向上GlassFish v2 では、多くの領域でパフォーマンスが向上しています。その一部として、Web 層では JSF、JSP、Grizzly、Web サービスでは JAXB と JAX-WS、さらには

CORBA と EJB のパフォーマンスが向上しています。

これらすべての取り組みが結実した成果、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 などはほんの一例に過ぎません。

免責事項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/ を参照してください。

Page 13: Wp Glass Fish Overview

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 やバイトコードコンパイルなどの拡張機能も利用できます。

Page 14: Wp Glass Fish Overview

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 とも呼ばれ、チャット、オンラインカレンダーの使用、またはドキュメント共有、継続的なコンテンツ更新などのアプリケーションで使用できます。

Page 15: Wp Glass Fish Overview

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 テキストエンコーディングのパフォー

Page 16: Wp Glass Fish Overview

14 Copyright © 2007, Sun Microsystems, Inc

マンスコストを認識し、効率的な XML エンコーディングを行うためのさまざま な標準化団体に参加してきました (傍注「Fast Infoset」を参照)。

その結果、トランスポート、エンコーディング、およびデータバインディングを明確に分離するために、JAX-WS 実装の再構築することになりました。この新し

い Metro アーキテクチャーは GlassFish v2 に統合され、次のものをサポートします。

! – 複数のトランスポート HTTP、JMS 、および TCP/IP が実装され、SMTP

が設計されました。! – 複数のエンコーディング テキスト XML、MTOM 、および Fast Infoset がサポートされます。

! – データバインディング データバインディングは JAXB によって扱われ、データの受け渡しはいろいろなところでコピーを作らないようきわめて慎重に行われます。

このアーキテクチャーは、データのコピーを招かないように、複数のスタック可 能な処理エンティティー ( それぞれが WS-* 仕様の 1 つを実装している) をサポー

トするように設計されています。次の図にその構造を示します。

パフォーマンスは変動する目標です。従来の JAX-RPC 1.1 スタックもかつては高い パフォーマンスを誇り競争力がありましたが、新しい JAX-WS 2.0 の実装ではほぼ

2 倍のパフォーマンスが達成されています。Axis 2 と比較した最近の Metro (JAX-

WS 2.1) スタックのパフォーマンス結果には、業界で最高のスタックを提供する という GlassFish チームの意志が現れています。

Fast Infoset

XML 文書はきわめて冗長になる可能性があり、一部の領域では、サイズに加えて伝送コストがその適用可能性を阻害する要因となります。Gzip のようなエンコーディングはサイズを縮小しますが、それにはエンコーディング時間の犠牲が伴います。ANSI/ISO 標準の Fast Infoset は、より優れた全体的なトレードオフを提供します。

この記事の執筆時点で Fast Infoset には 4

つの異なる商用実装がありますが、ほかの標準が主導権を握る可能性もあるため

(たとえば、W3C EXI Working Group もこの領域の研究を進めています)、GlassFish

の Web Services スタックは複数のエンコーディングをサポートするように設計されています。このスタックは現在、テ

キストエンコーディングに加えて MTOM

および Fast Infoset の各エンコーディングをサポートしますが、ほかの標準についても登場次第サポートする予定です。

Fast Infoset は WSIT とともに使用できます。Windows Communication Foundation

(WCF) もエンコーディング分離を提供 し、一部のベンダーは FI サポートのた

めにそれを利用します。

Page 17: Wp Glass Fish Overview

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

! セキュリティー: WS-

Security、WS-SecurityPolicy、WS-Trust、WS-SecureConversation

! ポリシー: WS-Policy、WS-PolicyAttachment

Page 18: Wp Glass Fish Overview

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 仕様を利用しています。

Page 19: Wp Glass Fish Overview

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 で問題なく行われており、きわめ

て一般的です。

Page 20: Wp Glass Fish Overview

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 用の汎用リソースアダプタも含

まれています。

Page 21: Wp Glass Fish Overview

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 を利用してアプリケーションを動的に定義済みクラスタのメンバーにし、メンバーになったアプリケーションに次のようなクラスタイベントを受け取れるようにします。

! メンバーの加入、計画的なシャットダウン、障害

! 復旧メンバー選択

! 自動での委譲復旧の開始

Page 22: Wp Glass Fish Overview

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 は簡単にセットアップでき、複数のスレーブマシンをサポートし、機能を拡張するためのプラグインアーキテクチャーを備えています。

Page 23: Wp Glass Fish Overview

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 の一部としてサポートされます。

Page 24: Wp Glass Fish Overview

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 に接続します。クライアントはその後、利用可能なカタログファイルをダウンロードし、その内容をローカルにインストールされたコンポーネントレジストリと比較し、カタログ情報を使用してインストールまたは更新が可能なコンポーネントを表示します。その後、ユーザーの選択に基づいてコンポーネントがダウンロードおよびインストールされます。

Page 25: Wp Glass Fish Overview

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 つの企業内の均一質のグループの場合よりもスムーズに情報が流れることになりました。

Page 26: Wp Glass Fish Overview

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 で公開されています。

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 からのリソース作成に加

JAX-RS アノテーションと POJO

次に示すのは、POJO を使用した一般的 な JAX-RS リソースです。

@UriTemplate("/helloworld")

public class HelloWorldResource {

@HttpMethod("GET")

@ProduceMime("text/plain")

public String getMessage() {

return "Hello World";

}

}

配備が完了すると、URI パス「/helloworld」を使用してこのリソースにアクセスできるようになります。

Page 27: Wp Glass Fish Overview

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) のビルドはソース形式の定期ビルドです。マイルストーンビルドは

安定化サイクルを経過しており、通常は新しい機能を含んでいます。個別の詳細

Page 28: Wp Glass Fish Overview

26 Copyright © 2007, Sun Microsystems, Inc

については関連のハイライトノートで説明されています。最終ビルドは最も安定しており、配備が推奨されるビルドです。Sun はこれらの最終ビルドのサポートを提供します。

連絡先GlassFish コミュニティーおよび GlassFish アプリケーションサーバーのメリットを理解する上で、この記事が読者の皆様の一助となれば幸いです。読者の皆様が実

際に GlassFish を体験し、その有用性を実感して頂くことを願っています。また、皆様からのあらゆるフィードバックを常に歓迎しています。詳細については以下をご覧ください。http://glassfish.java.net/

http://blogs.sun.com/theaquarium/

(日本語サイト)

https://glassfish.dev.java.net/ja/

http://blogs.sun.com/theaquarium_ja/

著者についてEduardo Pelegri-Llopart

は Sun Microsystems

の Distinguished

Engineer であり、GlassFish コミュニティーの全体的な

リードをつとめています。

Eduardo は多数のオープンソースプロジェクトで実績を積み、1995 年から

Java コミュニティーに参加しています。サンフランシスコのベイエリアに在住しています。

Yutaka Yoshida は GlassFish のエンジニアです。

Alexis Moussine-Pouchkine は GlassFish のエバンジェリストであり、フランスのパリを拠点に活動しています。