org.opengion.fukurou.util

## クラス HybsLoader

- java.lang.Object
- - org.opengion.fukurou.util.HybsLoader

-     public class HybsLoader
      extends java.lang.Object

       AutoCompile機能、HotDeploy機能を実現するためのクラスローダーです。

       AutoCompile機能は、クラスの動的コンパイルを行います。
       AutoCompile機能を有効にするには、コンストラクタで与えられるHybsLoaderConfigオブジェクトで、
       AutoCompileフラグをtrueにしておく必要があります。

       HotDeploy機能は、クラスの動的ロードを行います。
       HotDeploy機能を有効にするには、コンストラクタで与えられるHybsLoaderConfigオブジェクトで、
       HotDeployフラグをtrueにしておく必要があります。

       (1)クラスの動的コンパイル
        loadClass(String)メソッドが呼ばれた場合に、ソースディレクトより、対象となるソースファイルを
        検索し、クラスのコンパイルを行います。
        コンパイルが行われる条件は、「クラスファイルが存在しない」または「クラスファイルのタイムスタンプがソースファイルより古い」です。

        コンパイルを行うには、JDKに含まれるtools.jarが存在している必要があります。
        tools.jarが見つからない場合、エラーとなります。

        また、コンパイルのタスクのクラス(オブジェクト)は、JVMのシステムクラスローダー上のクラスに存在しています。
        このため、サーブレットコンテナで、通常読み込まれるWEB-INF/classes,WEB-INF/lib以下のクラスファイルも、
        そのままでは参照することができません。
        これらのクラスを参照する場合は、HybsLoaderConfigオブジェクトに対してクラスパスを設定しておく必要があります。

       (2)クラスロード
        クラスの動的ロードは、クラスローダーの入れ替えによって実現しています。
        HotDeploy機能を有効にした場合、読み込むクラス単位にURLClassLoaderを生成しています。
        クラスロードを行う際に、URLClassLoaderを新しく生成することで、クラスの再ロードを行っています。
        つまり、HotDeployにより読み込まれるそれぞれのクラスは、お互いに独立した(平行な位置に存在する)関係に
        なります。
        このため、あるHotDeployによりロードされたクラスAから、同じくHotDeployによりロードされたクラスBを直接参照
        することができません。
        この場合は、クラスBのインターフェースを静的なクラスローダー(クラスAから参照できる位置)に配置することで、クラスB
        のオブジェクトにアクセスすることができます。

  変更履歴:

    5.1.1.0 (2009/12/01) 新規作成

  機能分類
    業務ロジック
  バージョン
    5.0
  作成者
    Hiroki Nakamura
  導入されたバージョン:
    JDK1.6,

- - ### コンストラクタのサマリー

    コンストラクタ
    コンストラクタと説明
    `HybsLoader(HybsLoaderConfig option)` HybsLoaderOptionを使用してHybsLoaderオブジェクトを生成します。

  - ### メソッドのサマリー

    すべてのメソッド インスタンス・メソッド concreteメソッド
    修飾子とタイプ | メソッドと説明
    --- | ---
    `java.lang.Class` | `load(java.lang.String clsNm)` 指定されたクラス名のクラスをロードします。
    `java.lang.Object` | `newInstance(java.lang.String clsName)` 指定されたクラス名のクラスをロードし、デフォルトコンストラクターを使用して インスタンスを生成します。
    `java.lang.String` | `toString()` このオブジェクトの内部表現を、文字列にして返します。

    - ### クラスから継承されたメソッド java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

- - ### コンストラクタの詳細

    - #### HybsLoader

          public HybsLoader(HybsLoaderConfig option)

      HybsLoaderOptionを使用してHybsLoaderオブジェクトを生成します。
      パラメータ:
        `option` - HybsLoaderを構築するための設定情報

  - ### メソッドの詳細

    - #### load

          public java.lang.Class load(java.lang.String clsNm)

      指定されたクラス名のクラスをロードします。 クラス名については、クラス自身の名称のみを指定することができます。 (パッケージ名を含めた完全な形のクラス名を指定することもできます)
      パラメータ:
        `clsNm` - クラス名
      戻り値:
        クラス

    - #### newInstance

          public java.lang.Object newInstance(java.lang.String clsName)

      指定されたクラス名のクラスをロードし、デフォルトコンストラクターを使用して インスタンスを生成します。
      パラメータ:
        `clsName` - クラス名(Qualified Name)
      戻り値:
        インスタンス
      変更履歴:

        5.1.8.0 (2010/07/01) Exceptionのエラーメッセージの修正(状態の出力)
        6.8.2.3 (2017/11/10) java9対応(cls.newInstance() → cls.getDeclaredConstructor().newInstance())

    - #### toString

          public java.lang.String toString()

      このオブジェクトの内部表現を、文字列にして返します。
      オーバーライド:
        `toString` クラス内 `java.lang.Object`
      戻り値:
        オブジェクトの内部表現
      変更履歴:

        6.1.0.0 (2014/12/26) refactoring

      このメソッドは、nullを返しません

Webアプリケーションフレームワーク openGion
Copyright (c) 2009 The openGion Project.