SlideShare a Scribd company logo
JBoss AS 7 / EAP 6
modules and class loading


                     Takayoshi Kimura
 Senior Software Maintenance Engineer
      Global Support Services, Red Hat
The Class Path is Dead.



          2
3
Agenda
●   クラスローディングの基本
●   JBoss Modules と MSC
●   JBoss 6 のクラスローディング
●   ユースケース別クラスローディング設定
●   まとめ




                   4
クラスローディングの基本



     5
クラスパス

●   特定のクラスローダがクラスをロードす
    るパスを示す用語
●   大抵「システムクラスパス」を指す
    ●   System Class Loader で利用される
        -classpath オプション値
●   ごくまれにアプリケーションクラスパス



                     6
クラスローダ種別

●   Bootstrap Class Loader
    ●   コア API
●   Extension Class Loader
    ●   Extension Mechanism
●   System Class Loader
    ●   -classpath
●   Application Class Loader
    ●   ユーザレベルクラスローダ
                        7
状況によるクラスローダの呼び名

●   Initiating Class Loader
    ●   Foo.class.getClassLoader()
●   Parent Class Loader
    ●   classLoader.getParent()
●   Thread Context Class Loader
    ●   Thread.currentThread().
        getContextClassLoader()


                          8
システムクラスローダ

      Bootstrap


      Extension


       System



          9
クラスローダの確認
public class Test {
    public static void main(String... args) {

        // System Class Loader
        System.out.println(Test.class.getClassLoader());

        // System Class Loader
        System.out.println(ClassLoader.getSystemClassLoader());

        // Extention Class Loader
        System.out.println(Test.class.getClassLoader().getParent());

        // null == Bootstrap Class Loader
        System.out.println(ClassLoader.class.getClassLoader());
    }
}

                                10
システムクラスローダ

●   モノリシック
●   理解が簡単




             11
システムクラスローダ

●   同一ライブラリの異なるバージョンが扱
    えない
●   見えてはいけないクラスやリソースが見
    えてしまう
●   クラスローダの作りなおしによるクラス
    の再ロードができない



            12
Java EE の階層型クラスローダ


          System

         Container

   EAR               EAR

   WAR               WAR

             13
Java EE の階層型クラスローダ

●   異なるバージョンを扱える
●   アプリケーション毎のクラスローダ再作
    成によるクラス再ロード可能




            14
Java EE の階層型クラスローダ

●   複雑
●   クラス検索が遅い
●   重複配置
●   ロード順によるデッドロック
●   クラス共有
●   問題を回避するための仕組みがさらに複
    雑度を増してしまう悪循環

               15
以上設計ミス



  16
17
JBoss Modules



     18
モジュールクラスローダ


        B1       B2


  A          C   E


  F          D



        19
モジュールクラスローダ
●   モジュールひとつに対して一つのクラス
    ローダ
●   各モジュールはランタイムで必要とする
    依存モジュールを定義
●   階層型ではなくグラフ構造
●   「クラスパス」は存在しない



            20
JBoss Modules
●   モジュールクラスローダ環境
●   モジュールを定義するための API や設定
    ファイル
●   シンプル
●   超高速




                21
モジュール
●   クラスロードするときのひとまとまりの
    単位
●   通常は jar ひとつ
●   複数の jar や、プロパティファイルなどの
    リソースを含む場合も




                  22
モジュールの配置
●   ローカルモジュールディレクトリ
    ●   $JBOSS_HOME/modules
●   階層化されたモジュール名と一致する
    ディレクトリ構造
    ●   Maven のリポジトリと類似
●   モジュールのリソース (jar ファイルなど )
    と、ディスクリプタ module.xml を配置


                     23
モジュールディスクリプタ
module.xml
<module xmlns="urn:jboss:module:1.1" name="org.jboss.remoting3">
    <resources>
        <resource-root path="jboss-remoting-3.2.8.GA-redhat-1.jar"/>
    </resources>

    <dependencies>
        <module name="javax.api"/>
        <module name="org.jboss.logging"/>
        <module name="org.jboss.marshalling" export="true"/>
        <module name="org.jboss.sasl" services="import"/>
        <module name="org.jboss.xnio" export="true"/>
        <module name="org.jboss.xnio.nio" services="import"/>
    </dependencies>
</module>



                                24
import と export


     A                  B            C



                            export

     A            B (+ C)            C



                   25
JBoss MSC

●   Modular Service Container
●   JBoss Modules 上にサービス層を提供
●   API
    ●   ServiceContainer
    ●   Service
    ●   ServiceController
●   サービスの追加、削除、依存関係の管
    理、インストール、ステート管理
                            26
JBoss EAP 6 の
クラスローディング


      27
JBoss EAP 6 のクラスローディング

●   デプロイされたものもモジュールとなる
    ●   deployment.mywar.war
    ●   deployment.myear.ear.mywar.war
    ●   ローカルモジュールに対し、サービスモ
        ジュールと呼ばれる
●   デプロイされたアプリケーションに応じ
    て必要な依存モジュールが自動 import
    ●   EJB が含まれていれば EJB 関連の API

                     28
JBoss EAP 6 のクラスローディング

●   WAR は一つのモジュール扱い
    ●   WEB-INF/classes, WEB-INF/lib 内の jar は同
        じモジュールクラスローダでロードされる
●   EAR
    ●   EAR/lib は一つのモジュールとなる
    ●   サブデプロイメント同士もデフォルトで参
        照可能
        ●   EE 仕様には反しているが、仕様が微妙

                       29
デプロイメントとモジュール

 EAR   EAR/lib


       EJB1.jar


       EJB2.jar

                  WAR のみ片方向 import
        WAR       以前と同様、 WAR 内の
                  クラスは他から参照不可


        30
デプロイメントに対する
クラスローディング優先順
●   システムモジュール
    ●   コンテナが import
●   ユーザモジュール
    ●   アプリケーションで import
●   ローカルリソース
●   デプロイメント内リソース


                       31
デプロイメントに対する
クラスローディングのカスタマイズ
●   META-INF/jboss-deployment-structure.xml
    ●   WAR の場合は WEB-INF
    ●   おすすめ
●   グローバルモジュール
●   META-INF/MANIFEST.MF
    ●   Dependencies: org.slf4j



                          32
jboss-deployment-structure.xml
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0">
  <deployment>
    <dependencies>
      <module name="javax.faces.api" slot="1.2" export="true"/>
      <module name="com.sun.jsf-impl" slot="1.2" export="true"/>
    </dependencies>
  </deployment>
  <sub-deployment name="jboss-seam-booking.war">
    <exclusions>
      <module name="javax.faces.api" slot="main"/>
      <module name="com.sun.jsf-impl" slot="main"/>
    </exclusions>
    <dependencies>
      <module name="javax.faces.api" slot="1.2"/>
      <module name="com.sun.jsf-impl" slot="1.2"/>
    </dependencies>
  </sub-deployment>
</jboss-deployment-structure>

                                    33
EE サブシステムの
グローバルモジュール
●   全てのデプロイメントにシステムモ
    ジュールとして import
<subsystem xmlns="urn:jboss:domain:ee:1.0">
  <global-modules>
    <module name="org.apache.commons.logging" />
    <module name="org.apache.log4j" />
    <module name="org.slf4j" />
  </global-modules>
</subsystem>




                                34
lib/ext ディレクトリ

●   $JBOSS_HOME/lib/ext ディレクトリ
    ●   lib ディレクトリ自体にはまったく意味はな
        い
    ●   jar を置いても何も起こらない
●   Extension Mechanism
    ●   lib/ext ディレクトリに jar を配置
    ●   マニフェストエントリ Extension-List で参照


                     35
モジュール依存関係のデバッグ

●   JMX
    ●   ローカルモジュール
        ●   jboss.modules:type=ModuleLoader,name=Local
            ModuleLoader-3 dumpAllModuleInformation
    ●   デプロイメント ( サービスモジュール )
        ●   jboss.modules:type=ModuleLoader,name=Servic
            eModuleLoader-5 dumpAllModuleInformation




                            36
コンテナ側モジュールの利用

●   利用可能
    ●   Java EE 関連 API
    ●   ロギング API
    ●   拡張ポイント
●   利用不可能
    ●   その他全てのサードパーティモジュール



                         37
ユースケース別
クラスローディング設定


     38
ユースケース別
クラスローディング設定
●   プロパティファイル
●   既存の WAR
●   共有ライブラリ
●   他モジュールのアノテーションスキャン




              39
プロパティファイル

●   基本は jar にまとめてアプリケーションと
    一緒にデプロイ
●   アプリケーションの外に置きたい場合は
    モジュールにする
mkdir -p $JBOSS_HOME/modules/conf/main/properties/
cat $JBOSS_HOME/modules/conf/main/module.xml
<module xmlns="urn:jboss:module:1.1" name="conf">
  <resources>
    <resource-root path="properties"/>
  </resources>
</module>


                                40
プロパティファイル

●   グローバルモジュールとして参照

<subsystem xmlns="urn:jboss:domain:ee:1.0">
  <global-modules>
    <module name="conf" slot="main" />
  </global-modules>
</subsystem>




                                41
プロパティファイル

●   jboss-deployment-structure.xml から参照

<jboss-deployment-structure>
  <deployment>
    <dependencies>
      <module name="conf" />
    </dependencies>
  </deployment>
</jboss-deployment-structure>




                                42
既存の WAR

●   フレームワークやライブラリを利用した
    多数の jar ファイルを含むレガシーな
    WAR ファイル
    ●   アプリケーション EAR/WAR 内に依存 jar が
        全て含まれている
●   基本的にはクラスローディングに関して
    は無修正で OK


                   43
共有ライブラリ

●   既存のアプリケーションが共有ライブラ
    リを利用している
    ●   アプリケーション EAR/WAR 内に依存 jar が
        全て含まれていない
●   共有ライブラリをモジュール化
●   モジュール依存を定義



                   44
他モジュールを JBoss の
アノテーションスキャン対象にする
●   jandex を利用して jar にアノテーションイ
    ンデックスを事前に作成
●   アノテーションを import
<jboss-deployment-structure>
  <deployment>
    <dependencies>
      <module name="foo.bar" annotations="true"/>
    </dependencies>
  </deployment>
</jboss-deployment-structure>




                                45
まとめ



 46
まとめ

●   JBoss Modules / JBoss EAP 6 の
    クラスローディング
    ●   シンプル
    ●   高速
    ●   フレキシブル




                    47
Thanks
Questions?


    48

More Related Content

What's hot

NEDIA_SNIA_CXL_講演資料.pdf
NEDIA_SNIA_CXL_講演資料.pdfNEDIA_SNIA_CXL_講演資料.pdf
NEDIA_SNIA_CXL_講演資料.pdf
Yasunori Goto
 
Apache Hadoopの新機能Ozoneの現状
Apache Hadoopの新機能Ozoneの現状Apache Hadoopの新機能Ozoneの現状
Apache Hadoopの新機能Ozoneの現状
NTT DATA OSS Professional Services
 
Jdk9で変更になる(かも知れない)jvmオプションの標準設定
Jdk9で変更になる(かも知れない)jvmオプションの標準設定Jdk9で変更になる(かも知れない)jvmオプションの標準設定
Jdk9で変更になる(かも知れない)jvmオプションの標準設定
Kazuyuki Nakamura
 
JVMのGCアルゴリズムとチューニング
JVMのGCアルゴリズムとチューニングJVMのGCアルゴリズムとチューニング
JVMのGCアルゴリズムとチューニング
佑哉 廣岡
 
TripleOの光と闇
TripleOの光と闇TripleOの光と闇
TripleOの光と闇
Manabu Ori
 
PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会
PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会
PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会
Shigeru Hanada
 
あなたの Azure Windows VM がもっと速くなるかもしれない!! ~Azure Windows VM Performance Monitori...
あなたの Azure Windows VM がもっと速くなるかもしれない!! ~Azure Windows VM Performance Monitori...あなたの Azure Windows VM がもっと速くなるかもしれない!! ~Azure Windows VM Performance Monitori...
あなたの Azure Windows VM がもっと速くなるかもしれない!! ~Azure Windows VM Performance Monitori...
Ryuki Yoshimatsu
 
負荷テストを行う際に知っておきたいこと 初心者編
負荷テストを行う際に知っておきたいこと 初心者編負荷テストを行う際に知っておきたいこと 初心者編
負荷テストを行う際に知っておきたいこと 初心者編
まべ☆てっく運営
 
【SRX】JUNOS ハンズオントレーニング資料 SRXシリーズ サービス ゲートウェイ コース
【SRX】JUNOS ハンズオントレーニング資料 SRXシリーズ サービス ゲートウェイ コース【SRX】JUNOS ハンズオントレーニング資料 SRXシリーズ サービス ゲートウェイ コース
【SRX】JUNOS ハンズオントレーニング資料 SRXシリーズ サービス ゲートウェイ コース
Juniper Networks (日本)
 
PostgreSQLレプリケーション徹底紹介
PostgreSQLレプリケーション徹底紹介PostgreSQLレプリケーション徹底紹介
PostgreSQLレプリケーション徹底紹介
NTT DATA OSS Professional Services
 
AWS Black Belt Online Seminar AWS上のJenkins活用方法
AWS Black Belt Online Seminar AWS上のJenkins活用方法AWS Black Belt Online Seminar AWS上のJenkins活用方法
AWS Black Belt Online Seminar AWS上のJenkins活用方法
Amazon Web Services Japan
 
EDB Postgres Vision 2019
EDB Postgres Vision 2019 EDB Postgres Vision 2019
EDB Postgres Vision 2019
Noriyoshi Shinoda
 
そんなトランザクションマネージャで大丈夫か?
そんなトランザクションマネージャで大丈夫か?そんなトランザクションマネージャで大丈夫か?
そんなトランザクションマネージャで大丈夫か?takezoe
 
次世代の高速メモリストレージ利用に向けたソフトウェアのモダナイゼーション
次世代の高速メモリストレージ利用に向けたソフトウェアのモダナイゼーション次世代の高速メモリストレージ利用に向けたソフトウェアのモダナイゼーション
次世代の高速メモリストレージ利用に向けたソフトウェアのモダナイゼーション
NTT Software Innovation Center
 
Magnum IO GPUDirect Storage 最新情報
Magnum IO GPUDirect Storage 最新情報Magnum IO GPUDirect Storage 最新情報
Magnum IO GPUDirect Storage 最新情報
NVIDIA Japan
 
新しいTERASOLUNA Batch Frameworkとは
新しいTERASOLUNA Batch Frameworkとは新しいTERASOLUNA Batch Frameworkとは
新しいTERASOLUNA Batch Frameworkとは
apkiban
 
ITサービスマネジメントとSRE
ITサービスマネジメントとSREITサービスマネジメントとSRE
ITサービスマネジメントとSRE
真吾 吉田
 
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
Masahito Zembutsu
 
OSC北海道2014_JPUG資料
OSC北海道2014_JPUG資料OSC北海道2014_JPUG資料
OSC北海道2014_JPUG資料
Chika SATO
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Akihiro Suda
 

What's hot (20)

NEDIA_SNIA_CXL_講演資料.pdf
NEDIA_SNIA_CXL_講演資料.pdfNEDIA_SNIA_CXL_講演資料.pdf
NEDIA_SNIA_CXL_講演資料.pdf
 
Apache Hadoopの新機能Ozoneの現状
Apache Hadoopの新機能Ozoneの現状Apache Hadoopの新機能Ozoneの現状
Apache Hadoopの新機能Ozoneの現状
 
Jdk9で変更になる(かも知れない)jvmオプションの標準設定
Jdk9で変更になる(かも知れない)jvmオプションの標準設定Jdk9で変更になる(かも知れない)jvmオプションの標準設定
Jdk9で変更になる(かも知れない)jvmオプションの標準設定
 
JVMのGCアルゴリズムとチューニング
JVMのGCアルゴリズムとチューニングJVMのGCアルゴリズムとチューニング
JVMのGCアルゴリズムとチューニング
 
TripleOの光と闇
TripleOの光と闇TripleOの光と闇
TripleOの光と闇
 
PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会
PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会
PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会
 
あなたの Azure Windows VM がもっと速くなるかもしれない!! ~Azure Windows VM Performance Monitori...
あなたの Azure Windows VM がもっと速くなるかもしれない!! ~Azure Windows VM Performance Monitori...あなたの Azure Windows VM がもっと速くなるかもしれない!! ~Azure Windows VM Performance Monitori...
あなたの Azure Windows VM がもっと速くなるかもしれない!! ~Azure Windows VM Performance Monitori...
 
負荷テストを行う際に知っておきたいこと 初心者編
負荷テストを行う際に知っておきたいこと 初心者編負荷テストを行う際に知っておきたいこと 初心者編
負荷テストを行う際に知っておきたいこと 初心者編
 
【SRX】JUNOS ハンズオントレーニング資料 SRXシリーズ サービス ゲートウェイ コース
【SRX】JUNOS ハンズオントレーニング資料 SRXシリーズ サービス ゲートウェイ コース【SRX】JUNOS ハンズオントレーニング資料 SRXシリーズ サービス ゲートウェイ コース
【SRX】JUNOS ハンズオントレーニング資料 SRXシリーズ サービス ゲートウェイ コース
 
PostgreSQLレプリケーション徹底紹介
PostgreSQLレプリケーション徹底紹介PostgreSQLレプリケーション徹底紹介
PostgreSQLレプリケーション徹底紹介
 
AWS Black Belt Online Seminar AWS上のJenkins活用方法
AWS Black Belt Online Seminar AWS上のJenkins活用方法AWS Black Belt Online Seminar AWS上のJenkins活用方法
AWS Black Belt Online Seminar AWS上のJenkins活用方法
 
EDB Postgres Vision 2019
EDB Postgres Vision 2019 EDB Postgres Vision 2019
EDB Postgres Vision 2019
 
そんなトランザクションマネージャで大丈夫か?
そんなトランザクションマネージャで大丈夫か?そんなトランザクションマネージャで大丈夫か?
そんなトランザクションマネージャで大丈夫か?
 
次世代の高速メモリストレージ利用に向けたソフトウェアのモダナイゼーション
次世代の高速メモリストレージ利用に向けたソフトウェアのモダナイゼーション次世代の高速メモリストレージ利用に向けたソフトウェアのモダナイゼーション
次世代の高速メモリストレージ利用に向けたソフトウェアのモダナイゼーション
 
Magnum IO GPUDirect Storage 最新情報
Magnum IO GPUDirect Storage 最新情報Magnum IO GPUDirect Storage 最新情報
Magnum IO GPUDirect Storage 最新情報
 
新しいTERASOLUNA Batch Frameworkとは
新しいTERASOLUNA Batch Frameworkとは新しいTERASOLUNA Batch Frameworkとは
新しいTERASOLUNA Batch Frameworkとは
 
ITサービスマネジメントとSRE
ITサービスマネジメントとSREITサービスマネジメントとSRE
ITサービスマネジメントとSRE
 
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
 
OSC北海道2014_JPUG資料
OSC北海道2014_JPUG資料OSC北海道2014_JPUG資料
OSC北海道2014_JPUG資料
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 

Similar to JBoss AS 7 / EAP 6 modules and class loading

Module classloading
Module classloadingModule classloading
Module classloading
nekop
 
Java 7
Java 7Java 7
jjugccc2018 app review postmortem
jjugccc2018 app review postmortemjjugccc2018 app review postmortem
jjugccc2018 app review postmortem
tamtam180
 
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
PE-BANK
 
実行可能JavaFXアプリケーションJAR(発表直前版)
実行可能JavaFXアプリケーションJAR(発表直前版)実行可能JavaFXアプリケーションJAR(発表直前版)
実行可能JavaFXアプリケーションJAR(発表直前版)
torutk
 
Jjug springセッション
Jjug springセッションJjug springセッション
Jjug springセッション
Yuichi Hasegawa
 
Javaクラスファイルの読み方
Javaクラスファイルの読み方Javaクラスファイルの読み方
Javaクラスファイルの読み方
y torazuka
 
Java SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心にJava SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心に
Taku Miyakawa
 
JBoss AS7 rev2
JBoss AS7 rev2JBoss AS7 rev2
JBoss AS7 rev2nekop
 
JDK 16 で導入された JEP 396 にご注意!! (JJUG CCC 2021 Spring)
JDK 16 で導入された JEP 396 にご注意!! (JJUG CCC 2021 Spring)JDK 16 で導入された JEP 396 にご注意!! (JJUG CCC 2021 Spring)
JDK 16 で導入された JEP 396 にご注意!! (JJUG CCC 2021 Spring)
Yoshiro Tokumasu
 
Java in the World of Container by David Buck
Java in the World of Container by David BuckJava in the World of Container by David Buck
Java in the World of Container by David Buck
オラクルエンジニア通信
 
プロビジョニングの今 ーフルマネージド・サービスを目指してー #cmdevio2016 #E
プロビジョニングの今 ーフルマネージド・サービスを目指してー  #cmdevio2016 #Eプロビジョニングの今 ーフルマネージド・サービスを目指してー  #cmdevio2016 #E
プロビジョニングの今 ーフルマネージド・サービスを目指してー #cmdevio2016 #E
Shuji Watanabe
 
OpenJDKソムリエと巡るJDKワイナリーツアー #sfggjp #javajo
OpenJDKソムリエと巡るJDKワイナリーツアー #sfggjp #javajoOpenJDKソムリエと巡るJDKワイナリーツアー #sfggjp #javajo
OpenJDKソムリエと巡るJDKワイナリーツアー #sfggjp #javajo
Takahiro YAMADA
 
Dot netcore multiplatform 2
Dot netcore multiplatform 2Dot netcore multiplatform 2
Dot netcore multiplatform 2
shozon
 
Plugman code-reading
Plugman code-readingPlugman code-reading
Plugman code-reading
Motokazu Nishimura
 
serverless
serverlessserverless
serverless
Akira Otsuka
 
AWSマイスターシリーズReloaded(AWS Beanstalk)
AWSマイスターシリーズReloaded(AWS Beanstalk)AWSマイスターシリーズReloaded(AWS Beanstalk)
AWSマイスターシリーズReloaded(AWS Beanstalk)Akio Katayama
 
20120416 aws meister-reloaded-aws-elasticbeanstalk-public
20120416 aws meister-reloaded-aws-elasticbeanstalk-public20120416 aws meister-reloaded-aws-elasticbeanstalk-public
20120416 aws meister-reloaded-aws-elasticbeanstalk-publicAmazon Web Services Japan
 
Hello Java
Hello JavaHello Java
Hello Java
Chihiro Ito
 

Similar to JBoss AS 7 / EAP 6 modules and class loading (20)

Module classloading
Module classloadingModule classloading
Module classloading
 
Grails 2.0.0.M1の話
Grails 2.0.0.M1の話 Grails 2.0.0.M1の話
Grails 2.0.0.M1の話
 
Java 7
Java 7Java 7
Java 7
 
jjugccc2018 app review postmortem
jjugccc2018 app review postmortemjjugccc2018 app review postmortem
jjugccc2018 app review postmortem
 
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
 
実行可能JavaFXアプリケーションJAR(発表直前版)
実行可能JavaFXアプリケーションJAR(発表直前版)実行可能JavaFXアプリケーションJAR(発表直前版)
実行可能JavaFXアプリケーションJAR(発表直前版)
 
Jjug springセッション
Jjug springセッションJjug springセッション
Jjug springセッション
 
Javaクラスファイルの読み方
Javaクラスファイルの読み方Javaクラスファイルの読み方
Javaクラスファイルの読み方
 
Java SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心にJava SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心に
 
JBoss AS7 rev2
JBoss AS7 rev2JBoss AS7 rev2
JBoss AS7 rev2
 
JDK 16 で導入された JEP 396 にご注意!! (JJUG CCC 2021 Spring)
JDK 16 で導入された JEP 396 にご注意!! (JJUG CCC 2021 Spring)JDK 16 で導入された JEP 396 にご注意!! (JJUG CCC 2021 Spring)
JDK 16 で導入された JEP 396 にご注意!! (JJUG CCC 2021 Spring)
 
Java in the World of Container by David Buck
Java in the World of Container by David BuckJava in the World of Container by David Buck
Java in the World of Container by David Buck
 
プロビジョニングの今 ーフルマネージド・サービスを目指してー #cmdevio2016 #E
プロビジョニングの今 ーフルマネージド・サービスを目指してー  #cmdevio2016 #Eプロビジョニングの今 ーフルマネージド・サービスを目指してー  #cmdevio2016 #E
プロビジョニングの今 ーフルマネージド・サービスを目指してー #cmdevio2016 #E
 
OpenJDKソムリエと巡るJDKワイナリーツアー #sfggjp #javajo
OpenJDKソムリエと巡るJDKワイナリーツアー #sfggjp #javajoOpenJDKソムリエと巡るJDKワイナリーツアー #sfggjp #javajo
OpenJDKソムリエと巡るJDKワイナリーツアー #sfggjp #javajo
 
Dot netcore multiplatform 2
Dot netcore multiplatform 2Dot netcore multiplatform 2
Dot netcore multiplatform 2
 
Plugman code-reading
Plugman code-readingPlugman code-reading
Plugman code-reading
 
serverless
serverlessserverless
serverless
 
AWSマイスターシリーズReloaded(AWS Beanstalk)
AWSマイスターシリーズReloaded(AWS Beanstalk)AWSマイスターシリーズReloaded(AWS Beanstalk)
AWSマイスターシリーズReloaded(AWS Beanstalk)
 
20120416 aws meister-reloaded-aws-elasticbeanstalk-public
20120416 aws meister-reloaded-aws-elasticbeanstalk-public20120416 aws meister-reloaded-aws-elasticbeanstalk-public
20120416 aws meister-reloaded-aws-elasticbeanstalk-public
 
Hello Java
Hello JavaHello Java
Hello Java
 

More from nekop

Java Drag Race Tuning
Java Drag Race TuningJava Drag Race Tuning
Java Drag Race Tuningnekop
 
JBoss AS7 rev3
JBoss AS7 rev3JBoss AS7 rev3
JBoss AS7 rev3nekop
 
Infinispan - Open Source Data Grid rev2
Infinispan - Open Source Data Grid rev2Infinispan - Open Source Data Grid rev2
Infinispan - Open Source Data Grid rev2nekop
 
JBoss AS7
JBoss AS7JBoss AS7
JBoss AS7
nekop
 
CDI, Seam 3 and Forge
CDI, Seam 3 and ForgeCDI, Seam 3 and Forge
CDI, Seam 3 and Forge
nekop
 
Infinispan - Open Source Data Grid
Infinispan - Open Source Data GridInfinispan - Open Source Data Grid
Infinispan - Open Source Data Grid
nekop
 
Iteratorパターン
IteratorパターンIteratorパターン
Iteratorパターンnekop
 
Proxy
ProxyProxy
Proxynekop
 
ClassLoader Leak Patterns
ClassLoader Leak PatternsClassLoader Leak Patterns
ClassLoader Leak Patternsnekop
 
mod_cluster
mod_clustermod_cluster
mod_cluster
nekop
 

More from nekop (10)

Java Drag Race Tuning
Java Drag Race TuningJava Drag Race Tuning
Java Drag Race Tuning
 
JBoss AS7 rev3
JBoss AS7 rev3JBoss AS7 rev3
JBoss AS7 rev3
 
Infinispan - Open Source Data Grid rev2
Infinispan - Open Source Data Grid rev2Infinispan - Open Source Data Grid rev2
Infinispan - Open Source Data Grid rev2
 
JBoss AS7
JBoss AS7JBoss AS7
JBoss AS7
 
CDI, Seam 3 and Forge
CDI, Seam 3 and ForgeCDI, Seam 3 and Forge
CDI, Seam 3 and Forge
 
Infinispan - Open Source Data Grid
Infinispan - Open Source Data GridInfinispan - Open Source Data Grid
Infinispan - Open Source Data Grid
 
Iteratorパターン
IteratorパターンIteratorパターン
Iteratorパターン
 
Proxy
ProxyProxy
Proxy
 
ClassLoader Leak Patterns
ClassLoader Leak PatternsClassLoader Leak Patterns
ClassLoader Leak Patterns
 
mod_cluster
mod_clustermod_cluster
mod_cluster
 

Recently uploaded

Generating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language ModelsGenerating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language Models
harmonylab
 
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
Osaka University
 
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライドHumanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
tazaki1
 
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
t m
 
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
Toru Tamaki
 
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
嶋 是一 (Yoshikazu SHIMA)
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 
This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
chiefujita1
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
Matsushita Laboratory
 
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援しますキンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
Takayuki Nakayama
 

Recently uploaded (10)

Generating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language ModelsGenerating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language Models
 
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
 
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライドHumanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
 
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
 
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
 
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
 
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援しますキンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
 

JBoss AS 7 / EAP 6 modules and class loading

  • 1. JBoss AS 7 / EAP 6 modules and class loading Takayoshi Kimura Senior Software Maintenance Engineer Global Support Services, Red Hat
  • 2. The Class Path is Dead. 2
  • 3. 3
  • 4. Agenda ● クラスローディングの基本 ● JBoss Modules と MSC ● JBoss 6 のクラスローディング ● ユースケース別クラスローディング設定 ● まとめ 4
  • 6. クラスパス ● 特定のクラスローダがクラスをロードす るパスを示す用語 ● 大抵「システムクラスパス」を指す ● System Class Loader で利用される -classpath オプション値 ● ごくまれにアプリケーションクラスパス 6
  • 7. クラスローダ種別 ● Bootstrap Class Loader ● コア API ● Extension Class Loader ● Extension Mechanism ● System Class Loader ● -classpath ● Application Class Loader ● ユーザレベルクラスローダ 7
  • 8. 状況によるクラスローダの呼び名 ● Initiating Class Loader ● Foo.class.getClassLoader() ● Parent Class Loader ● classLoader.getParent() ● Thread Context Class Loader ● Thread.currentThread(). getContextClassLoader() 8
  • 9. システムクラスローダ Bootstrap Extension System 9
  • 10. クラスローダの確認 public class Test { public static void main(String... args) { // System Class Loader System.out.println(Test.class.getClassLoader()); // System Class Loader System.out.println(ClassLoader.getSystemClassLoader()); // Extention Class Loader System.out.println(Test.class.getClassLoader().getParent()); // null == Bootstrap Class Loader System.out.println(ClassLoader.class.getClassLoader()); } } 10
  • 11. システムクラスローダ ● モノリシック ● 理解が簡単 11
  • 12. システムクラスローダ ● 同一ライブラリの異なるバージョンが扱 えない ● 見えてはいけないクラスやリソースが見 えてしまう ● クラスローダの作りなおしによるクラス の再ロードができない 12
  • 13. Java EE の階層型クラスローダ System Container EAR EAR WAR WAR 13
  • 14. Java EE の階層型クラスローダ ● 異なるバージョンを扱える ● アプリケーション毎のクラスローダ再作 成によるクラス再ロード可能 14
  • 15. Java EE の階層型クラスローダ ● 複雑 ● クラス検索が遅い ● 重複配置 ● ロード順によるデッドロック ● クラス共有 ● 問題を回避するための仕組みがさらに複 雑度を増してしまう悪循環 15
  • 17. 17
  • 19. モジュールクラスローダ B1 B2 A C E F D 19
  • 20. モジュールクラスローダ ● モジュールひとつに対して一つのクラス ローダ ● 各モジュールはランタイムで必要とする 依存モジュールを定義 ● 階層型ではなくグラフ構造 ● 「クラスパス」は存在しない 20
  • 21. JBoss Modules ● モジュールクラスローダ環境 ● モジュールを定義するための API や設定 ファイル ● シンプル ● 超高速 21
  • 22. モジュール ● クラスロードするときのひとまとまりの 単位 ● 通常は jar ひとつ ● 複数の jar や、プロパティファイルなどの リソースを含む場合も 22
  • 23. モジュールの配置 ● ローカルモジュールディレクトリ ● $JBOSS_HOME/modules ● 階層化されたモジュール名と一致する ディレクトリ構造 ● Maven のリポジトリと類似 ● モジュールのリソース (jar ファイルなど ) と、ディスクリプタ module.xml を配置 23
  • 24. モジュールディスクリプタ module.xml <module xmlns="urn:jboss:module:1.1" name="org.jboss.remoting3"> <resources> <resource-root path="jboss-remoting-3.2.8.GA-redhat-1.jar"/> </resources> <dependencies> <module name="javax.api"/> <module name="org.jboss.logging"/> <module name="org.jboss.marshalling" export="true"/> <module name="org.jboss.sasl" services="import"/> <module name="org.jboss.xnio" export="true"/> <module name="org.jboss.xnio.nio" services="import"/> </dependencies> </module> 24
  • 25. import と export A B C export A B (+ C) C 25
  • 26. JBoss MSC ● Modular Service Container ● JBoss Modules 上にサービス層を提供 ● API ● ServiceContainer ● Service ● ServiceController ● サービスの追加、削除、依存関係の管 理、インストール、ステート管理 26
  • 27. JBoss EAP 6 の クラスローディング 27
  • 28. JBoss EAP 6 のクラスローディング ● デプロイされたものもモジュールとなる ● deployment.mywar.war ● deployment.myear.ear.mywar.war ● ローカルモジュールに対し、サービスモ ジュールと呼ばれる ● デプロイされたアプリケーションに応じ て必要な依存モジュールが自動 import ● EJB が含まれていれば EJB 関連の API 28
  • 29. JBoss EAP 6 のクラスローディング ● WAR は一つのモジュール扱い ● WEB-INF/classes, WEB-INF/lib 内の jar は同 じモジュールクラスローダでロードされる ● EAR ● EAR/lib は一つのモジュールとなる ● サブデプロイメント同士もデフォルトで参 照可能 ● EE 仕様には反しているが、仕様が微妙 29
  • 30. デプロイメントとモジュール EAR EAR/lib EJB1.jar EJB2.jar WAR のみ片方向 import WAR 以前と同様、 WAR 内の クラスは他から参照不可 30
  • 31. デプロイメントに対する クラスローディング優先順 ● システムモジュール ● コンテナが import ● ユーザモジュール ● アプリケーションで import ● ローカルリソース ● デプロイメント内リソース 31
  • 32. デプロイメントに対する クラスローディングのカスタマイズ ● META-INF/jboss-deployment-structure.xml ● WAR の場合は WEB-INF ● おすすめ ● グローバルモジュール ● META-INF/MANIFEST.MF ● Dependencies: org.slf4j 32
  • 33. jboss-deployment-structure.xml <jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0"> <deployment> <dependencies> <module name="javax.faces.api" slot="1.2" export="true"/> <module name="com.sun.jsf-impl" slot="1.2" export="true"/> </dependencies> </deployment> <sub-deployment name="jboss-seam-booking.war"> <exclusions> <module name="javax.faces.api" slot="main"/> <module name="com.sun.jsf-impl" slot="main"/> </exclusions> <dependencies> <module name="javax.faces.api" slot="1.2"/> <module name="com.sun.jsf-impl" slot="1.2"/> </dependencies> </sub-deployment> </jboss-deployment-structure> 33
  • 34. EE サブシステムの グローバルモジュール ● 全てのデプロイメントにシステムモ ジュールとして import <subsystem xmlns="urn:jboss:domain:ee:1.0"> <global-modules> <module name="org.apache.commons.logging" /> <module name="org.apache.log4j" /> <module name="org.slf4j" /> </global-modules> </subsystem> 34
  • 35. lib/ext ディレクトリ ● $JBOSS_HOME/lib/ext ディレクトリ ● lib ディレクトリ自体にはまったく意味はな い ● jar を置いても何も起こらない ● Extension Mechanism ● lib/ext ディレクトリに jar を配置 ● マニフェストエントリ Extension-List で参照 35
  • 36. モジュール依存関係のデバッグ ● JMX ● ローカルモジュール ● jboss.modules:type=ModuleLoader,name=Local ModuleLoader-3 dumpAllModuleInformation ● デプロイメント ( サービスモジュール ) ● jboss.modules:type=ModuleLoader,name=Servic eModuleLoader-5 dumpAllModuleInformation 36
  • 37. コンテナ側モジュールの利用 ● 利用可能 ● Java EE 関連 API ● ロギング API ● 拡張ポイント ● 利用不可能 ● その他全てのサードパーティモジュール 37
  • 39. ユースケース別 クラスローディング設定 ● プロパティファイル ● 既存の WAR ● 共有ライブラリ ● 他モジュールのアノテーションスキャン 39
  • 40. プロパティファイル ● 基本は jar にまとめてアプリケーションと 一緒にデプロイ ● アプリケーションの外に置きたい場合は モジュールにする mkdir -p $JBOSS_HOME/modules/conf/main/properties/ cat $JBOSS_HOME/modules/conf/main/module.xml <module xmlns="urn:jboss:module:1.1" name="conf"> <resources> <resource-root path="properties"/> </resources> </module> 40
  • 41. プロパティファイル ● グローバルモジュールとして参照 <subsystem xmlns="urn:jboss:domain:ee:1.0"> <global-modules> <module name="conf" slot="main" /> </global-modules> </subsystem> 41
  • 42. プロパティファイル ● jboss-deployment-structure.xml から参照 <jboss-deployment-structure> <deployment> <dependencies> <module name="conf" /> </dependencies> </deployment> </jboss-deployment-structure> 42
  • 43. 既存の WAR ● フレームワークやライブラリを利用した 多数の jar ファイルを含むレガシーな WAR ファイル ● アプリケーション EAR/WAR 内に依存 jar が 全て含まれている ● 基本的にはクラスローディングに関して は無修正で OK 43
  • 44. 共有ライブラリ ● 既存のアプリケーションが共有ライブラ リを利用している ● アプリケーション EAR/WAR 内に依存 jar が 全て含まれていない ● 共有ライブラリをモジュール化 ● モジュール依存を定義 44
  • 45. 他モジュールを JBoss の アノテーションスキャン対象にする ● jandex を利用して jar にアノテーションイ ンデックスを事前に作成 ● アノテーションを import <jboss-deployment-structure> <deployment> <dependencies> <module name="foo.bar" annotations="true"/> </dependencies> </deployment> </jboss-deployment-structure> 45
  • 47. まとめ ● JBoss Modules / JBoss EAP 6 の クラスローディング ● シンプル ● 高速 ● フレキシブル 47