LoginSignup
1
1

More than 1 year has passed since last update.

Mulesoft クラスローディングの分離

Posted at

そもそもクラスローディングとは

クラスローディングというのは、クラスをメモリーに読み込むことです。

例えば、レシピの本を使って料理を作ることを考えてみたら、クラスローディングは、レシピの本の必要なページを探し出して、開いておくことです。

レシピを開いた状態で、具体的な材料や手順を参照して、料理ができるようになるわけです。

Mulesoftクラスローディングの分離

クラスローディングの分離の目的

Mule app,外部コネクター、ライブラリの中に、バージョンのコンフリクトや競合の問題を解決する。

クラスローディング分離メカニズム

  • Muleプロジェクトは、jarファイルとして外部に提供する。

  • Muleランタイム、Muleアプリケーション、Muleモジュールのクラスがjarファイルに含まれる

  • Mule 4 のクラスローディングは、ランタイム、アプリケーション、モジュールのクラスを同時にローディングするではなく、互いに分離して、ローディングを行う。

考慮事項

  • エクスポートされていないリソースとクラスは他のアーティファクトから参照できない。

  • アーティファクトから最小限必要なパッケージとリソースのセットを公開する。

  • 必要でない限り、サードパーティのライブラリはエクスポートしない。

  • Guava、Apache common-collections などのサードパーティの共通ライブラリは絶対公開しない。公開すると、他のアーティファクトと競合します。

  • 理想的には、アーティファクト (または JDK) のクラスのみを公開する。

次の拡張ファイル構造を考えてみます。

com/example/extension/api/MyClass.class
com/example/extension/internal/Util.class
transformations/customer-to-user.dwl
license.txt
META-INF/mule-artifact/mule-artifact.json

また、この拡張には次の ​mule-artifact.json​ 記述子ファイルがあります。

{
    "name": "my-test-extension",
    "minMuleVersion": "4.0.0",
    "classLoaderModelLoaderDescriptor": {
        "id": "mule",
        "attributes": {
            "exportedResources": [
                "transformations/customer-to-user.dwl"
            ],
            "exportedPackages": [
                "com/example/extension/api"
            ]
        }
    }
}

次の図は ​mule-artifact.json​ によってエクスポートされたリソースがアプリケーション内に適用される方法を示しています。
image.png

参照:
Mulesoftドキュメント クラスローディングの分離

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1