Jan 18, 2015
JBoss AS7
Red HatSenior Software Maintenance Engineer
Takayoshi Kimura
はじめに
• このスライドは JBoss AS 7.0.0.Alpha3リリースから 2011/06/25 までの AS7について述べています。 7.0 のファイナルリリースなど、このスライド作成時とは状況が異なっている可能性がごくわずかですがあることをご了承ください。
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 EE6 アプリケーションサーバ– Web プロファイルサポート– 7.1 で Full プロファイルサポート予定– ここでの「サポート」というのはテスト
完了、という意味であり、機能がまったく7.0 に入っていない、というわけではない
– Full はあまり需要 / 人気が高くはないのでちょっと後回し
JBoss AS7 の概要
• 開発アプローチ変更– 既存の資産である AS6 を一旦考慮から外
して要件やユーザストーリーを洗い出し• そしてメジャーリライト
– 「こんなこといいな♪できたらいいな♪」を全て実現するために
– AS6 とは異なる新しいカーネルの開発
JBoss AS7 の 3 つの特徴
超高速
超高速 - 起動時間の比較
• JBoss AS7– 1.5 秒
• 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
かんたん
管理容易性の向上
• 豊富で洗練されたマネジメントインタフェース– シンプルな単一の設定ファイル– API– GUI– CUI
3 つの特徴の裏にあるもの
クラウド
スタンドアロンとドメイン
• スタンドアロン– ふつう
• ドメイン– 複数 VM 、複数 JBoss インスタンスを起
動– まとめて管理– 今回は省略
デモ
• 起動• トップページ• 管理 GUI• 管理 CUI
• 設定ファイル
人類ニ告グ・・・
・・・全テヲテストセヨ!
Arquillian
• EJB とかコンテナを伴うテストは面倒、遅い、難しい– というのは神話になりました
• テスト容易性の実現• May the container be with you!
– remote– managed– embedded
JBoss Modules
• モジュール?– 一般的な単語– 外見上は jar
• その正体は?– 続きは Web で!
モジュールベースクラスローディング環境
JBoss Modules
• もう少し詳しく?– 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 7 のモジュール環境は?
– 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 などなんでもでき
る機能豊富コンテナだった
まとめ
• Java EE6
• 超高速• 超軽量• 管理容易性• テスト容易性
全ては開発者の幸せとクラウドという時代のために
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