シリーズ八十から五のJBoss:JBossのモジュールの簡単な

アウトライン

JBoss AS7開始から、クラスローダーは、この新しいJBossのモジュールを使用して開始します。この記事では、簡単にデザインのアイデアのJBossモジュールを示しており、このデザインコンセプトの例を与えます。

JBossのモジュールの紹介

我々はすべて知っているように、Javaは様々なクラスやリソースのjarファイルをロードするためにクラスパスの方法を使用されてきました。多くの問題が発生します。このように、このような問題は、しばしば次のように遭遇しました: 

  •  システム資源の浪費になったクラスパスリソースがロードされた後に使用されない場合がありますいくつかは大規模なプロジェクト、
  • クラスパスの間で同じリソースは、私たちのプロジェクトは内部の非常に大きな成功する可能性があるため、プロジェクト全体を実行し、トラブルシューティングが困難なことができない原因となることができ、バージョンの競合が生じ、同じリソース、複数の異なるバージョンが含まれていてもよいです10万jarファイルは、リソースの競合を見つけるために非常に困難です
これらの問題を解決するには、JBossのモジュールは、上記の解決策を与えるように設計されています。 
  • module.xmlモジュール記述ファイルを使用してリソースを含むモジュール、(典型的には、JARファイルがモジュールに対応する、複数のJARファイルまたは他のリソースを含んでいてもよい)のファイル名が含まれるように、この説明では、定義され、これらのリソースのバージョン番号このモジュールは、モジュールに依存します。
  • 各モジュールは、リアルタイムまたは安心してロードすることができます。これは、多くの利点があります:まず、このアプローチはの利点を持っている間リソースは、唯一の必要なモジュールのみがロードされた(これは定義されmodule.xmlモジュール間の依存関係によって達成される)、保存しますです:システムの読み込み速度が大幅に向上

JBossのモジュールの定義 

Java用のJBossのモジュールは、モジュール式の(非階層)クラスローダと実行環境の実現です。言い換えれば、単一のJavaクラスローダの伝統的な使用とは異なり、クラスパスにすべてのJARファイルをロードするために、ライブラリーのそれぞれは、モジュールにモジュールのみ(ライブラリ、jarファイルは、機能の直列結合を完了させることが理解されます)それが依存する他のモジュールへのリンクではなく、他のリソースに依存しています。JBossのモジュールは、独自のシンプルかつパワフルなアプリケーションの実行や分布を形成するために、スケーラブルな分析エンジンモジュールと結合されたスレッドセーフ、高速で、並行性の高いクラスローダのデリゲート(委譲)モデルを実装しますシステム。

それは簡単で、名前解決ポリシーであるため、JBossのモジュールは、任意の変更を必要とし、既存のライブラリやアプリケーションなしで一緒に仕事することができるように設計されています。開始しかし薄いラッパー、モジュラー環境で実行されるアプリケーション、OSG​​iのとは違って、JBossのモジュールは、コンテナを達成できませんでした。この時点で、あなたのアプリケーションが制御、モジュール式のロードを取り、必要なときにモジュールを接続する準備ができています。さらに、モジュールは、時間に依存している場合にのみ、モジュラーアプリケーションの性能しか実際に使用されるモジュールの数(及びモジュールに依存することを意味し、(分析目的のためにロードされていない)にロードされますむしろ、システム内のモジュールの総数よりも、)使用される場合。さらに、モジュールは、ユーザがいつでもアンロードすることができます。

JBossのモジュールの使用

モジュラープログラムは、次のコマンドを使用して開始しました:

java -jar jboss-modules.jar -mp path/to/modules my.main.module.name

あなたは、ルートディレクトリのモジュールをロードするために必要なモジュールのロードパス(-mp)検索要素にデフォルトのモジュールを指定する必要があります。my.main.module.nameは実行するモジュールの名前を指定します。

シンプルなXMLディスクリプタを使用して、モジュールは次のように定義されています。

<module xmlns="urn:jboss:module:1.0" name="org.jboss.msc">

    <main-class name="org.jboss.msc.Version"/>

    <resources>
        <resource-root path="jboss-msc-1.0.0.Beta3.jar"/>
    </resources>

    <dependencies>
        <module name="org.jboss.logging"/>

        <!-- Optional deps -->

        <module name="javax.inject.api" optional="true"/>
        <module name="org.jboss.threads" optional="true"/>
        <module name="org.jboss.vfs" optional="true"/>
    </dependencies>
</module>

簡単になりますので、お好きなIDEに統合フォーマットを定義するためのモジュール記述子内のjboss-moduels.jarのスキーマファイルがあります。JBossのModuelsは、あなたが選択あなたのJarファイルからリソースの一部が含まれていないことができますのであらかじめパッケージjarファイルを使用している場合(これは変更され、厳密にJavaのパッケージは、「エクスポート」または「「インポートされるかを制御するために多くの拡張機能を提供しますもっとシンプル)。

JBossのモジュール与OSGI

OSGIと比較したJBossモジュール:

  • JBossのモジュールが容易。Jarファイルを使用すると、モジュール式のアプリケーションを実行するために必要なすべてのです。
  • これは、よりコンパクトである:いいえ流通サービス層のOSGiの、又はOSGIによって提供される他のより高いレベルの機能。それだけで一つのことをして、それをうまくやります。
  • 同時に、それは非常に機能的で強いです。これは、OSGiの実装を使用することができますクラスローディングフレームワークすることができます。

この例のコードはであるhttps://github.com/kylinsoong/wildfly-architecture/tree/master/modules/quickstart

上記のソフトウェアのダウンロードとインストールの例のコードのコマンドgituhb取付部によって動作するようにコンパイル:

cd wildfly-architecture/modules/quickstart/
mvn clean dependency:copy-dependencies install
ant
例えば、起動スクリプトを実行し、ビルド/クイックスタート/ビンにビルドディレクトリを生成します。

[kylin@localhost bin]$ ./quickstart.sh
次のように出力があります。

Welcome to Modular Class Loading QuickStart 1.0.0

この例では、その後、私は、プロセスが開始解説は、JBoss 7開始をシミュレートしています。

スタートアップモジュールに指定されたquickstart.shはorg.jboss.modules.quickstartです。

if [ "x$LAUNCH_DEMO_IN_BACKGROUND" = "x" ]; then
    # Execute the JVM in the foreground
    eval \"$JAVA\" $JAVA_OPTS \
        -Ddemo.home.dir=\"$DEMO_HOME\" \
        -jar \"$DEMO_HOME/jboss-modules-1.3.0.Beta3.jar\" \
        -mp \"$DEMO_HOME/modules\" \
        org.jboss.modules.quickstart \
        "$@"
    DEMO_STATUS=$?

クイックスタート/モジュール/システム/層/ベース/ ORG /のJBoss /モジュール/クイックスタート/メイン/ module.xml 定義 文書以下org.jboss.modules.quickstart。

<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.1" name="org.jboss.modules.quickstart">

    <main-class name="org.jboss.modules.quickstart.Main"/>

        <resources>
        <resource-root path="modules-quickstart.jar"/>
    </resources>

    <dependencies>
    </dependencies>
</module>

同様に、我々はまた、この例では、Java -jar方法を使用して実行できます。

java -jar -mp modules/ org.jboss.modules.quickstart




ます。https://my.oschina.net/iwuyang/blog/197231で再現

おすすめ

転載: blog.csdn.net/weixin_34249367/article/details/91897302