Red HatのJBoss部門は本日,WildFly 8の提供開始を発表した。これまではJBoss Application Server(JAS)という名称だったプロダクトだ。今回のリリースではJava EE7認定を取得し,Web ProfileとFull Profileの両方をサポートする。さらに,まったく新しいWebサーバであるUndertow,新たなセキュリティ機能,実行中のシステムを更新可能なパッチシステムを備えている。
UndertowはServlet 3.1コンテナであり,HTTP管理インターフェースのサーバでもある。新しいコンテナはHTTP/1.1 RFCの一部であるHTTP Upgradeをサポートしており,HTTP接続を他のプロトコルにアップグレードすることができる。そのもっとも一般的な用途は,Webソケット接続における,ブラウザなどクライアントによる全二重接続の確立だ。
HTTP Upgradeでは単一のHTTPポート上に複数のプロトコルを多重化することができるため,複数のポートを使用する必要がなくなり,ファイアウォールの設定が簡略化できる。WildFlyそれ自体,わずか2つのポートしか使用しない。JNDIとEJBコールはUndertowサブシステムの8080ポート上に,管理プロトコルはWeb管理ポート(9090)上に,それぞれ多重化されている。
一例として,接続確立後の最初のEJB要求は,通信の上では次のようなものになる。
GET / HTTP/1.1
Host: example.com
Upgrade: jboss-remoting
Connection: Upgrade
Sec-JbossRemoting-Key: dGhlIHNhbXBsZSBub25jZQ==
これに対してUndertowは,アップグレード可能であることをクライアントに応答する。
HTTP/1.1 101 Switching Protocols
Upgrade: jboss-remoting
Connection: Upgrade
Sec-JbossRemoting-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
その後はWildFly EJBレイヤにソケットが渡されて,通常のEJB接続として動作する。
最初のHTTP要求にわずかなオーバーヘッドがあるものの,接続してしまえばパフォーマンスは完全に同等のはずだ。必要なポート数が確実に少なくなる分,全体として見ればメリットがあることを期待できる。Red Hat JBoss部門でJBoss EAPプラットフォームアーキテクトを務めるWildFlyリーダのJason Greene氏は,InfoQに次のように語っている。
HTTP要求を処理する必要があるので,接続確立時にさらにオーバヘッドがいくらか発生しますが,Undertowの効率性によって非常に低く抑えられています。アップグレード要求後は,HTTPを使用しない場合と完全に同じ動作をしますので,その意味から見たパフォーマンスについてはまったく同じです。インパクトが極めて小さいので,私たちはこれをデフォルト設定にしました。 初期設定のWildFly 8はわずか2つのHTTPポートしか使用しません。ひとつは管理用,もうひとつはアプリケーション用です。その他のプロトコルはすべて,これらのポートを再利用しています。
Undertowは組み込みモードでも使用可能なように設計されている。構築したサーバにHTTPハンドラを登録して,要求を非ブロック方式で処理するためのチェーン構成APIが用意されているのだ。undertow.ioWebサイトでの使用例を挙げる。
public class HelloWorldServer { public static void main(final String[] args) { Undertow server = Undertow.builder() .addListener(8080, "localhost") .setHandler(new HttpHandler() { @Override public void handleRequest(final HttpServerExchange exchange) throws Exception { exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "text/plain"); exchange.getResponseSender().send("Hello World"); } }).build(); server.start(); } }
Undertowでは,Servlet APIに基づいてコードを組み込むこともできる。これについては,いくつかの例がGitHubにある。
新しいWebサーバだけでなく,WildFly 8は監査ログやロールベースのセキュリティモデルの導入によって,セキュリティ面でも著しく向上している。
監査システムは,管理モデルに対するどのような操作であっても,ローカルファイルまたはサーバ上のログに確実に記録されるように設計されている。
WildFlyは2タイプのアクセス管理プロバイダを添付して提供される。"シンプル"タイプはAS 7と同等で完全にオール・オア・ナッシング形式のものだが,RBAC(Role Based Access Control)タイプは管理者それぞれに権限を設定可能だ(監視用ロール,更新ロール,といったように)。
WildFlyには7つのロールがあらかじめ定義されている。
- モニタ: 最小限の権限を持つ。 コンフィギュレーションと現在のランタイム情報を参照できるが,機密性の高いリソースとデータ,監査ログおよび関連リソースにはアクセスできない。
- オペレータ: 監視ロールのすべての権限に加えて,実行状態の変更 – サーバのリロードあるいはシャットダウン,JMSデスティネーションの一時停止と再開が可能。ただし永続的なコンフィギュレーションを変更することはできない。
- メンテナ: オペレーターロールのすべての権限。 永続的なコンフィギュレーションの変更,すなわちアプリケーションのデプロイや,JMSデスティネーションの追加といった操作が可能。このロールでは,サーバとデプロイメントに関する,ほとんどすべてのコンフィギュレーションを変更することができる。ただし機密性の高い情報(パスワードなど)の参照や変更,監査情報の参照や変更を行うことはできない。
- デプロイヤ: メンテナとほとんど同じだが,対象がデプロイに関する修正に制限されている。その他の一般的な設定を変更することはできない。
- 管理者: パスワードやセキュリティ関連の設定といった,機密性の高い情報の参照と変更が可能。ただし監査ログに関する操作はできない。
- 監査人: モニタロールのすべての権限を持つ。基本的には読み取りのみのロールだが,監査ログシステムに関する設定は修正も可能。
- スーパーユーザ: AS 7のアドミニストレータと同じく,すべての権限を所有する。
RBACデータはActive Directoryを含む,ほとんどすべてのLDAPサーバに保存することができる。
WildFlyには新しいパッチシステムも含まれている。これは当初,JBoss EAPのために開発されたもので,JBossの用意したパッチをリモートあるいはローカルで適用することができる。実行中のシステムに対するパッチ適用も可能だが,それを有効にするには再起動が必要になる。
最後に,WildFlyはおもにJava EEのサポートにフォーカスしているが,その他の言語や環境用にも使用することができる。例えばTorqueBoxプロジェクトでは,サーバ上でRuby on Railsを稼働させることが可能だ。
詳細はWildFlyのwebサイトあるいはwebiner記録で見ることができる。InfoQではJason Greene氏にさらに広範な話題でのインタビューも行っている。そこではさまざまな話題と合わせて,新しい監査ログシステムであるUndertowの背景や,GlassFishの商用サポートを廃止するという,Oracleの決定が持つ影響についても取り上げている。