BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Red HatのJBossチームがWild Fly 8をローンチ - Java EE 7をフルサポート,組み込み可能な新Webサーバを装備

Red HatのJBossチームがWild Fly 8をローンチ - Java EE 7をフルサポート,組み込み可能な新Webサーバを装備

原文(投稿日:2014/02/12)へのリンク

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つのロールがあらかじめ定義されている。

  1. モニタ: 最小限の権限を持つ。 コンフィギュレーションと現在のランタイム情報を参照できるが,機密性の高いリソースとデータ,監査ログおよび関連リソースにはアクセスできない。
  2. オペレータ: 監視ロールのすべての権限に加えて,実行状態の変更 – サーバのリロードあるいはシャットダウン,JMSデスティネーションの一時停止と再開が可能。ただし永続的なコンフィギュレーションを変更することはできない。
  3. メンテナ: オペレーターロールのすべての権限。 永続的なコンフィギュレーションの変更,すなわちアプリケーションのデプロイや,JMSデスティネーションの追加といった操作が可能。このロールでは,サーバとデプロイメントに関する,ほとんどすべてのコンフィギュレーションを変更することができる。ただし機密性の高い情報(パスワードなど)の参照や変更,監査情報の参照や変更を行うことはできない。
  4. デプロイヤ: メンテナとほとんど同じだが,対象がデプロイに関する修正に制限されている。その他の一般的な設定を変更することはできない。
  5. 管理者: パスワードやセキュリティ関連の設定といった,機密性の高い情報の参照と変更が可能。ただし監査ログに関する操作はできない。
  6. 監査人: モニタロールのすべての権限を持つ。基本的には読み取りのみのロールだが,監査ログシステムに関する設定は修正も可能。
  7. スーパーユーザ: 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の決定が持つ影響についても取り上げている。

この記事に星をつける

おすすめ度
スタイル

BT