jboss as7 rev3
DESCRIPTION
TRANSCRIPT
JBoss AS7#@*%ing fast.
Red HatSenior Software Maintenance Engineer
Takayoshi Kimura
JBoss AS 7
• 歴史• 概要• デモ• JBoss Modules
• スタンドアロンとドメイン• まとめ
History
• JBoss AS7– 2011-07
• JBoss AS 6.0– 2010-12-28
• JBoss AS 5.1– 2009-05-23
• JBoss AS 5.0– 2008-12-05
• JBoss AS 4.2– 2007-05-11
• JBoss AS 4.0– 2004-09-20
• JBoss AS 3.2– 2003-06-02
• JBoss AS 3.0– 2002-05-29
History
• 1999 年 JBoss 始動• 2001 年 JBoss Group 設立• 2006 年初め、 Oracle による買収
– 失敗。 Oracle は 2008 年に BEA 買収• 2006 年 4 月 10 日 Red Hat による買収
– 成立
JBoss AS7 の概要
• Java EE 6 アプリケーションサーバ– Web プロファイルサポート– 7.1 で Full プロファイルサポート予定– Full はあまり需要 / 人気が高くはないので
後回し
JBoss AS7 の概要
• 開発アプローチ変更– 既存の資産である AS6 を一旦考慮から外
して要件やユーザストーリーを洗い出し• そしてメジャーリライト
– 「こんなこといいな♪できたらいいな♪」を全て実現するために
– AS6 とは異なる新しいカーネルの開発
JBoss AS7 の 3 つの特徴
超高速
超高速 - 起動時間の比較
• JBoss AS7– 1.6 秒
• JBoss AS6– 12.0 秒
• JBoss AS 5.1– 19.0 秒
• JBoss AS 4.2– 6.2 秒
• JBoss EAP 5.1– 15.0 秒– 起動ではなくラ
ンタイムの速度に最適化
• Glassfish 3.1– 3 秒– JBoss AS7 出現
までは最速
超高速 - 起動時間の比較
• 計測に用いたラップトップのスペック– Dell Latitude E6320– Intel(R) Core(TM) i7-2620M CPU @
2.70GHz / 8GB mem / 7200rpm HDD– Fedora 15 (Lovelock) 64-bit– OpenJDK (IcedTea6 1.10.2) (fedora-
58.1.10.2.fc15-x86_64)
超軽量
超軽量
• 起動に必要なメモリは 12M– 64bit 上での実績– 32bit だともう少し低いかも
• Tomcat 7.0.14 は 8M で起動する– 機能セットの大きさがかなり違うので妥当
• Glassfish 3.1 は 32M では起動しない– OutOfMemoryError
かんたん
管理容易性の向上
• 豊富で洗練されたマネジメントインタフェース– シンプルな単一の設定ファイル– Java API– Web API– GUI Web 管理コンソール– CUI
ドキュメントの刷新と拡充
• スタートガイド• アプリケーション開発スタートガイド• 管理ガイド• 開発者ガイド• Java EE 6 チュートリアル• 高可用性ガイド• AS7 拡張ガイド
デモ
• 起動• トップページ• 管理 GUI• 管理 CUI
• 設定ファイル
JBoss Modules
JBoss Modules
• モジュール?– 一般的な単語– 外見上は jar
JBoss Modules
• モジュールベースクラスローディング環境
• 特定のモジュールの Main クラスとして指定されているクラスの main メソッドの呼び出しを行う
• シンプル、かんたん• 超高速スレッドセーフなクラスローダ
実装を提供
階層型クラスローダの問題
• 複数のクラスローダでクラス共有– 共通の親クラスローダ上に配置しかない– 「配置」という行為が問題の種となる
• 移譲モデル– 階層をどのように利用するか– parent-first と child-first– 混ぜると簡単にデッドロックする– もっと複雑な移譲モデルも
モジュールベースクラスローダ
• 階層型ではなくグラフ型
モジュールベースクラスローダ
• マニフェストで import, export といった移譲関係を定義– import: モジュール環境のこのパッケージ
を使います– export: 自分はこのパッケージをモジュー
ル環境へ提供します• 階層型では移譲関係は「配置」と「ク
ラスローダの移譲モデル」という二つの要素により決定されていた
なにがうれしいの?
• 見えるべきクラスが見える• 見えないべきクラスが見えないように
– コンテナの依存ライブラリなど• ライブラリの競合問題を大幅に改善
JBoss Modules と OSGi
• モジュールベースクラスローディングモデルについては OSGi も同じ
• OSGi は「サービス」やより上位のいろいろな機能を定義するなど、もっとリッチ ( 言い方を変えると複雑 ) な環境を定義したもの
• OSGi はバンドル
JBoss Modules と OSGi
• JBoss OSGi ?– JBoss Modules 上に OSGi の機能を提供し
、 OSGi バンドルのデプロイを可能に– JBoss AS が OSGi 環境で動いているわけ
ではない• Java 8 のモジュール環境は?
– JSR-297 Improved Modularity Support– まだまだリリースされません– OSGi と同じく JBoss Modules 上で動く
モジュール時代のお約束
• スレッドコンテキストクラスローダからのクラスロードを最初に試行するのはダメ– Thread.currentThread().getContextClassLo
ader()
• なぜ?– 大抵単に間違ってる。本当に必要?– モジュールクラスローディングを壊す
JBoss MSC
• JBoss Modular Service Container
• AS7 の新しいカーネル– AS5, 6: JBoss Microcontainer (POJO)– AS3, 4: JBoss Microkernel (JMX)
• 軽量であり、サービスの組み立てはMicrocontainer より 15 倍くらい速い– Microcontainer は AOP などなんでもでき
る機能豊富コンテナだった
スタンドアロンとドメイン
スタンドアロンとドメイン
• スタンドアロン– ふつう
• ドメイン– 複数 VM 、複数 JBoss インスタンスをま
とめて管理
ドメイン
起動されるモジュール
• スタンドアロン– org.jboss.standalone.server
• org.jboss.as.server.Main
起動されるモジュール
• ドメイン– org.jboss.as.process-conroller
• org.jboss.as.process.Main
– org.jboss.as.host-controller• org.jboss.as.host.controller.Main
– org.jboss.as.server• org.jboss.as.server.DomainServerMain
ドメイン用語
• ドメイン– 複数のホストおよびサーバを管理するた
めの枠組み• ドメインコントローラ
– ホストやサーバのマネージャ
ドメイン用語
• プロセスコントローラ– プロセス起動停止を行う Java プロセス– ホストコントローラを起動する
• ホストコントローラ– ホスト = 物理、もしくは仮想マシン– 単一のホストを管理するプロセス– ドメインコントローラを兼務
ドメイン用語
• サーバグループ– 同じ設定 / アプリを持つべきサーバのグル
ープ• サーバ
– 単一の JBoss AS インスタンス– ドメイン管理モデルではサーバは設定を
ほとんど持たない
テスト容易性
テスト容易性
• Java EE はテストサポートが貧弱• Java EE はコンテナが重い
Arquillian
• Java EE テスティングフレームワーク• JBoss AS 7 はコンテナが超軽量
JBoss AS 7 まとめ
• Java EE 6
• 超高速• 超軽量• 管理容易性• テスト容易性
References
• AS7 管理ガイド– https://docs.jboss.org/author/display/AS7/Admin+Guide
• JBoss World 2011– http://www.redhat.com/summit/2011/presentations/jbossworld/
• JUDCon 2011– http://www.jboss.org/events/JUDCon/presentations.html