JBoss AS7
#@*%ing fast.

                             Red Hat
Senior Software Maintenance Engineer
                    Takayoshi Kimura
JBoss AS 7

•   歴史
•   概要
•   デモ
•   JBoss Modules
•   スタンドアロンとドメイン
•   まとめ
History

• JBoss AS7          • JBoss AS 4.2
  – 2011-07            – 2007-05-11
• JBoss AS 6.0       • JBoss AS 4.0
  – 2010-12-28         – 2004-09-20
• JBoss AS 5.1       • JBoss AS 3.2
  – 2009-05-23         – 2003-06-02
• JBoss AS 5.0       • JBoss AS 3.0
  – 2008-12-05         – 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      • JBoss EAP 5.1
  – 1.6 秒          – 15.0 秒
• JBoss AS6        – 起動ではなくラ
  – 12.0 秒           ンタイムの速度
                     に最適化
• JBoss AS 5.1
                 • Glassfish 3.1
  – 19.0 秒
                   –3秒
• JBoss AS 4.2     – JBoss AS7 出現
  – 6.2 秒            までは最速
超高速 - 起動時間の比較
• 計測に用いたラップトップのスペック
 – 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
デモ
•   起動
•   トップページ
•   管理 GUI
•   管理 CUI
•   設定ファイル
JBoss Modules
JBoss Modules

• モジュール?
 – 一般的な単語
 – 外見上は jar
• その正体は?
モジュールベース
クラスローディング環境
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 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 インスタンス
 – ドメイン管理モデルではサーバは設定を
   ほとんど持たない
  • ほとんどサーバグループで設定する
Arquillian
まとめ
•   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
JBoss AS7 rev2

JBoss AS7 rev2

  • 2.
    JBoss AS7 #@*%ing fast. Red Hat Senior Software Maintenance Engineer Takayoshi Kimura
  • 3.
    JBoss AS 7 • 歴史 • 概要 • デモ • JBoss Modules • スタンドアロンとドメイン • まとめ
  • 4.
    History • JBoss AS7 • JBoss AS 4.2 – 2011-07 – 2007-05-11 • JBoss AS 6.0 • JBoss AS 4.0 – 2010-12-28 – 2004-09-20 • JBoss AS 5.1 • JBoss AS 3.2 – 2009-05-23 – 2003-06-02 • JBoss AS 5.0 • JBoss AS 3.0 – 2008-12-05 – 2002-05-29
  • 5.
    History • 1999 年JBoss 始動 • 2001 年 JBoss Group 設立 • 2006 年初め、 Oracle による買収 – 失敗。 Oracle は 2008 年に BEA 買収 • 2006 年 4 月 10 日 Red Hat による買収 – 成立
  • 6.
    JBoss AS7 の概要 •Java EE6 アプリケーションサーバ – Web プロファイルサポート – 7.1 で Full プロファイルサポート予定 – ここでの「サポート」というのはテスト 完了、という意味であり、機能がまったく 7.0 に入っていない、というわけではない – Full はあまり需要 / 人気が高くはないので ちょっと後回し
  • 7.
    JBoss AS7 の概要 •開発アプローチ変更 – 既存の資産である AS6 を一旦考慮から外 して要件やユーザストーリーを洗い出し • そしてメジャーリライト – 「こんなこといいな♪できたらいいな ♪」を全て実現するために – AS6 とは異なる新しいカーネルの開発
  • 8.
    JBoss AS7 の3 つの特徴
  • 9.
  • 10.
    超高速 - 起動時間の比較 •JBoss AS7 • JBoss EAP 5.1 – 1.6 秒 – 15.0 秒 • JBoss AS6 – 起動ではなくラ – 12.0 秒 ンタイムの速度 に最適化 • JBoss AS 5.1 • Glassfish 3.1 – 19.0 秒 –3秒 • JBoss AS 4.2 – JBoss AS7 出現 – 6.2 秒 までは最速
  • 11.
    超高速 - 起動時間の比較 •計測に用いたラップトップのスペック – 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)
  • 12.
  • 13.
    超軽量 • 起動に必要なメモリは 12M – 64bit 上での実績 – 32bit だともう少し低いかも • Tomcat 7.0.14 は 8M で起動する – 機能セットの大きさがかなり違うので妥当 • Glassfish 3.1 は 32M では起動しない – OutOfMemoryError
  • 14.
  • 15.
    管理容易性の向上 • 豊富で洗練されたマネジメントインタ フェース – シンプルな単一の設定ファイル – Java API – Web API – GUI Web 管理コンソール – CUI
  • 16.
    デモ • 起動 • トップページ • 管理 GUI • 管理 CUI • 設定ファイル
  • 17.
  • 18.
    JBoss Modules • モジュール? – 一般的な単語 – 外見上は jar • その正体は?
  • 19.
  • 20.
    JBoss Modules • もう少し詳しく? – JBoss Modules はモジュールベースクラス ローディング環境上で、特定のモジュール の Main クラスとして指定されているクラ スの main メソッドの呼び出しを行うもの – シンプル、かんたん – 超高速スレッドセーフなクラスローダ実装 を提供
  • 21.
    階層型クラスローダの問題 • 複数のクラスローダでクラス共有 –共通の親クラスローダ上に配置しかない – 「配置」という行為が問題の種となる • 移譲モデル – 階層をどのように利用するか – parent-first と child-first – 混ぜると簡単にデッドロックする – もっと複雑な移譲モデルも
  • 22.
    モジュールベース クラスローダ • 階層型ではなくグラフ型
  • 23.
    モジュールベース クラスローダ • マニフェストで import, export といっ た移譲関係を定義 – import: モジュール環境のこのパッケージ を使います – export: 自分はこのパッケージをモジュー ル環境へ提供します • 階層型では移譲関係は「配置」と「ク ラスローダの移譲モデル」という二つ の要素により決定されていた
  • 24.
    JBoss Modules とOSGi • モジュールベースクラスローディング モデルについては OSGi も同じ • OSGi は「サービス」やより上位のい ろいろな機能を定義するなど、もっと リッチ ( 言い方を変えると複雑 ) な環 境を定義したもの • OSGi はバンドル
  • 25.
    JBoss Modules とOSGi • JBoss OSGi って? – JBoss Modules 上に OSGi の機能を提供し 、 OSGi バンドルのデプロイを可能に – JBoss AS が OSGi 環境で動いているわけ ではない • Java 8 のモジュール環境は? – JSR-297 Improved Modularity Support – まだまだリリースされません – OSGi と同じく JBoss Modules 上で動くよ
  • 26.
    モジュール時代のお約束 • スレッドコンテキストクラスローダか らのクラスロードを最初に試行すると かやっちゃダメ絶対 – Thread.currentThread().getContextClassLo ader() • なぜ? – 大抵単に間違ってる。本当に必要? – モジュールクラスローディングを壊す
  • 27.
    JBoss MSC • JBossModular Service Container • AS7 の新しいカーネル – AS5, 6: JBoss Microcontainer (POJO) – AS3, 4: JBoss Microkernel (JMX) • 軽量であり、サービスの組み立ては Microcontainer より 15 倍くらい速い – Microcontainer は AOP などなんでもでき る機能豊富コンテナだった
  • 28.
  • 29.
    スタンドアロンとドメイン • スタンドアロン –ふつう • ドメイン – 複数 VM 、複数 JBoss インスタンスをま とめて管理
  • 30.
  • 31.
    起動されるモジュール • スタンドアロン –org.jboss.standalone.server • org.jboss.as.server.Main
  • 32.
    起動されるモジュール • ドメイン –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
  • 33.
    ドメイン用語 • ドメイン –複数のホストおよびサーバを管理するた めの枠組み • ドメインコントローラ – ホストやサーバのマネージャ
  • 34.
    ドメイン用語 • プロセスコントローラ –プロセス起動停止を行う Java プロセス – ホストコントローラを起動する • ホストコントローラ – ホスト = 物理、もしくは仮想マシン – 単一のホストを管理するプロセス – ドメインコントローラを兼務
  • 35.
    ドメイン用語 • サーバグループ –同じ設定 / アプリを持つべきサーバのグル ープ • サーバ – 単一の JBoss AS インスタンス – ドメイン管理モデルではサーバは設定を ほとんど持たない • ほとんどサーバグループで設定する
  • 36.
  • 37.
    まとめ • Java EE6 • 超高速 • 超軽量 • 管理容易性 • テスト容易性
  • 38.
    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