モジュール jdk.dynalink
パッケージ jdk.dynalink

クラスDynamicLinkerFactory

java.lang.Object
jdk.dynalink.DynamicLinkerFactory

public final class DynamicLinkerFactory extends Object
DynamicLinkerオブジェクトを作成するためのファクトリ・クラス。 動的リンカーは、Dynalinkの中央オブジェクトです。これらは、複数のGuardingDynamicLinkerオブジェクトで構成され、コール・サイトとそれらのリンクを調整します。 通常の動的リンカーは、ファクトリのユーザーが明示的に事前に作成し、setPrioritizedLinkers(List)automatically discovered、および最後にsetFallbackLinkers(List)で構成されたすべてのGuardingDynamicLinkerオブジェクトで構成されるリンカーです。この最後のカテゴリには通常、BeansLinkerが含まれます。
  • コンストラクタの詳細

    • DynamicLinkerFactory

      public DynamicLinkerFactory()
      デフォルト構成で新しい動的リンカー・ファクトリを作成します。 作成時に、ファクトリは様々なsetXxx()メソッドを使用して構成でき、createLinker()を使用して、現在の構成に従って1つ以上の動的リンカーを作成するために使用できます。
  • メソッドの詳細

    • setClassLoader

      public void setClassLoader(ClassLoader classLoader)
      使用可能な保護動的リンカーを自動検出するためのクラス・ローダーを設定します。 このクラス・ローダーで使用可能なGuardingDynamicLinkerExporter実装は、ServiceLoaderメカニズムを使用して自動的にインスタンス化され、提供するリンカーは、このファクトリが作成するDynamicLinkerに組み込まれます。 これにより、この言語ランタイムに属するコール・サイトが、ネイティブ・オブジェクトがこのランタイムに渡される場合に、自動的に検出されたこれらのランタイムからリンカーによってリンクできる、言語間の相互運用が可能になります。 このメソッドを呼び出してクラス・ローダーが明示的に設定されていない場合は、createLinker()を呼び出すスレッドのスレッド・コンテキスト・クラス・ローダーが使用されます。 このメソッドがnullで明示的に呼び出された場合、ServiceLoader.loadInstalled(Class)を使用してリンカーをロードします。
      パラメータ:
      classLoader - 使用可能なリンカーの自動検出に使用されるクラス・ローダー。
    • setPrioritizedLinkers

      public void setPrioritizedLinkers(List<? extends GuardingDynamicLinker> prioritizedLinkers)
      優先順位付けされた保護動的リンカーを設定します。 Dynalinkを使用する言語ランタイムには、通常、独自の言語用のリンカーが少なくとも1つあります。 これらのリンカーは、自動検出されたリンカーとフォールバック・リンカーの前に、呼び出しサイトをリンクしているときに、結果の動的リンカーによって最初に参照されます。 ファクトリが優先順位付けされたリンカーのいずれかと一致するリンカー・クラスも自動検出する場合、自動検出されたクラスは無視され、明示的な優先順位付けされたインスタンスが使用されます。
      パラメータ:
      prioritizedLinkers - 優先リンカーのリスト。 nullも可。
      例外:
      NullPointerException - リスト要素のいずれかがnullの場合。
    • setPrioritizedLinkers

      public void setPrioritizedLinkers(GuardingDynamicLinker... prioritizedLinkers)
      優先順位付けされた保護動的リンカーを設定します。 Arrays.asList(prioritizedLinkers)setPrioritizedLinkers(List)を呼び出すのと同じです。
      パラメータ:
      prioritizedLinkers - 優先順位付けされたリンカーの配列。 nullも可。
      例外:
      NullPointerException - 配列要素のいずれかがnullの場合。
    • setPrioritizedLinker

      public void setPrioritizedLinker(GuardingDynamicLinker prioritizedLinker)
      優先リンカーを1つ設定します。 単一要素リストを使用してsetPrioritizedLinkers(List)をコールする場合と同じです。
      パラメータ:
      prioritizedLinker - 優先される単一のリンカー。 nullは不可。
      例外:
      NullPointerException - nullが渡された場合。
    • setFallbackLinkers

      public void setFallbackLinkers(List<? extends GuardingDynamicLinker> fallbackLinkers)
      動的リンカーを保護するフォールバックを設定します。 これらのリンカーは、自動検出され優先順位が付けられたリンカーのあとに、呼び出しサイトをリンクしているときに、結果の動的リンカーによって最後に参照されます。 ファクトリがフォールバック・リンカーの1つに一致するリンカー・クラスも自動検出した場合、自動検出されたクラスは無視され、明示的なフォールバック・インスタンスが使用されます。
      パラメータ:
      fallbackLinkers - フォールバック・リンカーのリスト。 呼び出し元がフォールバック・リンカーを設定しないことを示すには、空にすることができます。 このメソッドが明示的に呼び出されない場合、またはnullが渡された場合、ファクトリはデフォルトのフォールバック・リンカーとして機能するBeansLinkerのインスタンスを作成します。
      例外:
      NullPointerException - リスト要素のいずれかがnullの場合。
    • setFallbackLinkers

      public void setFallbackLinkers(GuardingDynamicLinker... fallbackLinkers)
      動的リンカーを保護するフォールバックを設定します。 Arrays.asList(fallbackLinkers)setFallbackLinkers(List)を呼び出すのと同じです。
      パラメータ:
      fallbackLinkers - フォールバック・リンカーの配列。 呼び出し元がフォールバック・リンカーを設定しないことを示すには、空にすることができます。 このメソッドが明示的に呼び出されない場合、またはnullが渡された場合、ファクトリはデフォルトのフォールバック・リンカーとして機能するBeansLinkerのインスタンスを作成します。
      例外:
      NullPointerException - 配列要素のいずれかがnullの場合。
    • setSyncOnRelink

      public void setSyncOnRelink(boolean syncOnRelink)
      このファクトリによって作成された動的リンカーがコール・サイトの再リンク後にMutableCallSite.syncAll(MutableCallSite[])を起動するかどうかを設定します。 デフォルトはfalseです。 動的にリンクされたコードのマルチスレッド実行がランタイムでサポートされている場合は、trueに設定することをお薦めします。
      パラメータ:
      syncOnRelink - 再リンク時に同期を起動する場合はtrue、それ以外の場合はfalse。
    • setUnstableRelinkThreshold

      public void setUnstableRelinkThreshold(int unstableRelinkThreshold)
      不安定な再リンクしきい値を設定します。コール・サイトが再リンクされてから不安定と見なされる回数、およびそれに対する後続のリンク・リクエストがこれを示します。 明示的に設定されていない場合、デフォルトは8です。
      パラメータ:
      unstableRelinkThreshold - 新しいしきい値。 ゼロ未満にはできません。 ゼロの値は、呼び出しサイトが不安定であるとみなされないことを意味します。
      関連項目:
    • setPrelinkTransformer

      public void setPrelinkTransformer(GuardedInvocationTransformer prelinkTransformer)
      プリリンク変圧器を設定します。 これは、コンポーネント・リンカーによって作成された後、および動的リンカーがコール・サイトにリンクする前に、ガードされた呼出しを変更するための最後の機会を得るGuardedInvocationTransformerです。 通常は、呼出しの戻り値の型をコール・サイトの型に適応させるために使用されます。 明示的に設定しない場合、GuardedInvocation.asType(LinkerServices, MethodType)をコールするデフォルトのリンク前トランスフォーマが使用されます。 カスタマイズされたリンク前トランスフォーマはほとんど必要ありません。これらは主に、コード最適化解除戦略などの高度な技術を実装するための構成要素として使用されます。
      パラメータ:
      prelinkTransformer - 動的リンカー用のプリリンク・トランス。 nullにすると、ファクトリでデフォルトのトランスフォーマを使用できます。
    • setAutoConversionStrategy

      public void setAutoConversionStrategy(MethodTypeConversionStrategy autoConversionStrategy)
      自動型変換の変換方法を表すオブジェクトを設定します。 LinkerServices.asType(MethodHandle, MethodType)がすべてのカスタム変換をメソッド・ハンドルに適用した後も、通常はMethodHandle.asType(MethodType)に従って自動的に適用できるmethod invocation conversionsを有効にする必要があります。 ただし、言語ランタイムは、それらの変換を自分のコール・サイト用にカスタマイズする場合もあります。 一般的な例として、通常のMethodHandles.asType()ではデフォルトで禁止されているnullの戻り値のボックス化を解除できます。 この場合、言語ランタイムは、null値を処理できる独自のカスタム自動変換戦略をインストールできます。 ストラテジのMethodTypeConversionStrategy.asType(MethodHandle, MethodType)が呼び出されると、カスタム言語変換はすでにメソッド・ハンドルに適用されるため、ハンドルの現在のメソッド・タイプと目的の最終タイプの違いは、常にメソッド呼出し変換の対象となるものにすぎません。 また、最終的なステップとして内部的に行われるため、最終的なMethodHandle.asType()を呼び出す必要はありません。
      パラメータ:
      autoConversionStrategy - このファクトリによって作成されたリンカーにメソッド呼出し変換を適用する方針。 カスタム戦略がない場合はnullにできます。
    • setInternalObjectsFilter

      public void setInternalObjectsFilter(MethodHandleTransformer internalObjectsFilter)
      このファクトリによって作成された動的リンカーのリンカー・サービスのLinkerServices.filterInternalObjects(MethodHandle)の実装として機能するメソッド・ハンドル・トランスフォーマを設定します。 一部の言語ランタイムには、スコープをエスケープしない内部オブジェクトを含めることができます。 ここでは、メソッド・ハンドルを変更するトランスフォーマを追加できます。これにより、内部言語ランタイム・オブジェクトを受け取る可能性のあるすべてのパラメータにフィルタが追加され、これらをラップしてエスケープできないようにできます。 トランスフォーマは、ラップされていないフィルタを戻り値に追加することもできます。 DefaultInternalObjectFilterは、このようなフィルタリング・トランスフォーマを簡単に作成するためのコンビニエンス・クラスとして提供されます。
      パラメータ:
      internalObjectsFilter - 内部オブジェクトをフィルタリングするメソッド・ハンドル・トランスフォーマ、またはnull。
    • createLinker

      public DynamicLinker createLinker()
      現在の構成に基づいて新しい動的リンカーを作成します。 このメソッドは、複数の動的リンカーを作成するために複数回呼び出すことができます。 自動的に検出されたリンカーは、このメソッドを呼び出すたびに新しくインスタンス化されます。 呼出し間でファクトリの構成を変更できます。 このメソッドはスレッド・セーフではありません。 起動後、呼出し側はgetAutoLoadingErrors()を起動して、自動的に検出されたリンカーをロードしようとしたときに発生したServiceConfigurationErrorのリストを取得できます。 これらは、このメソッドの呼出しからスローされることはありません。このメソッドからリカバリし、失敗したリンカーを無視するためにあらゆる努力をします。
      戻り値:
      新しいダイナミック・リンカー
    • getAutoLoadingErrors

      public List<ServiceConfigurationError> getAutoLoadingErrors()
      createLinker()の最後の呼び出し時に自動的に検出されたリンカーをロードする際に検出されたServiceConfigurationErrorのリストを返します。 これらは、Dynalink以外の特定のサービス構成の問題、およびファクトリが自動的にロードしようとしたエクスポート業者のDynalink固有のエラーです:
      戻り値:
      検出されたServiceConfigurationErrorの不変リスト。 空も可。