モジュール jdk.jdi
パッケージ com.sun.jdi.connect.spi

クラスTransportService

java.lang.Object
com.sun.jdi.connect.spi.TransportService

public abstract class TransportService extends Object
デバッガとターゲットVM間の接続のためのトランスポート・サービスです。

トランスポート・サービスは、引数を取らないコンストラクタを持ち、その下で指定されている抽象メソッドを実装するこのクラスの、具象サブクラスです。 トランスポート・サービスは、デバッガとターゲットVM間の接続のため、Transportで使用される基になるサービスです。

トランスポート・サービスは、デバッガとターゲットVM間の接続を確立するためと、基になる通信プロトコルでJava Debug Wire Protocol (JDWP)パケットを転送するために使用されます。 基本的に、トランスポート・サービスの実装はJDWP仕様で規定されているJDWPを基になる通信プロトコルにバインドします。 トランスポート・サービスの実装は信頼性の高いJDWPパケット・トランスポート・サービスを提供します。 JDWPパケットは、複製やデータ損失なしにターゲットVMに対して送受信されます。 トランスポート・サービスの実装は、基になる通信プロトコルの信頼性の有無に左右される可能性があります。 基になる通信プロトコルの信頼性が高い場合、トランスポート・サービスの実装は比較的簡素になり、基になる通信プロトコルのペイロードとしてJDWPパケットを転送する必要があるだけになります。 信頼性のない通信プロトコルの場合、パケットが複製されないようにしたり、データ損失がないようにしたりするために、追加のプロトコル・サポートをトランスポート・サービス実装に含めることができます。 このような追加のプロトコルの詳細は実装に固有ですが、Transmission Control Protocol (TCP)などのプロトコルで使用される再送式肯定確認応答技術といった技術が必要になる可能性があります(「RFC 793」を参照)。

トランスポート・サービスを使用して、ターゲットVMへの接続を開始できます。 これは、attach(java.lang.String, long, long)メソッドを呼び出すことで実行されます。 または、トランスポート・サービスはターゲットVMが開始した接続を待機して受け入れることができます。 これは、startListening(String)メソッドを呼び出してトランスポートを待機モードにすることで実行されます。 続いて、accept(com.sun.jdi.connect.spi.TransportService.ListenKey, long, long)メソッドを使って、ターゲットVMによって開始された接続を受け入れます。

導入されたバージョン:
1.5
  • コンストラクタの詳細

    • TransportService

      public TransportService()
      サブクラスが呼び出すためのコンストラクタ。
  • メソッドの詳細

    • name

      public abstract String name()
      トランスポート・サービスを識別するための名前を返します。
      戻り値:
      トランスポート・サービスの名前
    • description

      public abstract String description()
      トランスポート・サービスの説明を返します。
      戻り値:
      トランスポート・サービスの説明
    • capabilities

      public abstract TransportService.Capabilities capabilities()
      トランスポート・サービスの機能を返します。
      戻り値:
      トランスポート・サービスの機能
    • attach

      public abstract Connection attach(String address, long attachTimeout, long handshakeTimeout) throws IOException
      指定されたアドレスに接続します。

      指定されたアドレスに接続し、ターゲットVMへの双方向通信チャネルを表す接続を返します。

      ターゲットVMへの接続には、2つのステップが必要です。最初に、指定されたアドレスへの接続が確立されます。 その後に、ハンドシェークにより接続がターゲットVMへの接続であることを保証します。 ハンドシェークでは、Java Debug Wire Protocolの仕様に規定されているように、JDWP-Handshake文字列の交換を行います。

      パラメータ:
      address - ターゲットVMのアドレス。
      attachTimeout - このトランスポート・サービスが接続タイム・アウトをサポートしていて、attachTimeoutが正の場合は、ターゲットVMへの接続時に使用するタイム・アウト値をミリ秒単位で指定する。 トランスポート・サービスが接続タイム・アウトをサポートしていない場合、またはattachTimeoutにゼロが指定されている場合は、タイム・アウトなしで接続が行われる。
      handshakeTimeout - このトランスポート・サービスがハンドシェーク・タイムアウトをサポートしていて、handshakeTimeoutが正の場合は、ターゲットVMとのハンドシェーク時に使用するミリ秒単位のタイム・アウトを指定する。 タイム・アウトの厳密な使用法はトランスポート・サービスごとに異なる。 たとえば、ハンドシェーク・タイムアウトをターゲットVMからのJDWP-Handshakeメッセージを待っている間の文字間タイム・アウトとして使用するトランスポート・サービスもある。 handshakeTimeoutをハンドシェーク交換期間のタイム・アウトとして使用するトランスポート・サービスもある。 トランスポート・サービスがハンドシェーク・タイムアウトをサポートしない場合、またはhandshakeTimeoutが0に指定されている場合は、ターゲットVMからの応答がなくても、ハンドシェークはタイム・アウトしない。
      戻り値:
      ターゲットVMへの双方向通信チャネルを表すConnection。
      例外:
      TransportTimeoutException - 接続確立時にタイム・アウトが発生した場合。
      IOException - 入出力エラー(ハンドシェーク時のタイム・アウトも含む)が発生した場合。
      IllegalArgumentException - アドレスが無効な場合、あるいは接続タイム・アウトまたはハンドシェーク・タイムアウトの値が負の場合。
      関連項目:
      TransportService.Capabilities.supportsAttachTimeout()
    • startListening

      public abstract TransportService.ListenKey startListening(String address) throws IOException
      指定されたアドレス上で着信接続を待機します。

      このメソッドは、指定されたアドレス上でトランスポート・サービスの待機を開始します(そのあとで着信接続を受け入れることができます)。 着信接続が確立されるまでは待機しません。

      パラメータ:
      address - 接続の待機を開始するアドレス、または、トランスポート・サービスにより選択されたアドレス上で待機する場合はnull
      戻り値:
      以降のacceptメソッドまたはstopListeningメソッドの呼出しで使用される待機キー。
      例外:
      IOException - 入出力エラーが発生した場合。
      IllegalArgumentException - 指定されたアドレスが無効な場合
    • startListening

      public abstract TransportService.ListenKey startListening() throws IOException
      トランスポート・サービスにより選択されたアドレス上で待機します。

      この簡易メソッドは、startListening(null)を呼び出す場合と同じように機能します。

      戻り値:
      以降のacceptメソッドまたはstopListeningメソッドの呼出しで使用される待機キー。
      例外:
      IOException - 入出力エラーが発生した場合。
    • stopListening

      public abstract void stopListening(TransportService.ListenKey listenKey) throws IOException
      着信接続の待機を停止します。

      別のスレッドがacceptでブロックされている間にこのメソッドを呼び出し、同じ待機キーで接続の受け入れを待機すると、スレッドはIOExceptionをスローします。 acceptでブロックされたスレッドが、ターゲットVMからの接続をすでに受け入れていて、ターゲットVMとのハンドシェーク中である場合は、このメソッドを呼び出してもスレッドが例外をスローすることはありません。

      パラメータ:
      listenKey - 直前のstartListening(String)またはstartListening()呼び出しから取得された待機キー。
      例外:
      IllegalArgumentException - 待機キーが無効な場合
      IOException - 入出力エラーが発生した場合。
    • accept

      public abstract Connection accept(TransportService.ListenKey listenKey, long acceptTimeout, long handshakeTimeout) throws IOException
      ターゲットVMからの接続を受け入れます。

      ターゲットVMからの接続を受け入れるために待機します(無制限またはタイム・アウトで)。 ターゲットVMへの双方向通信チャネルを表す接続を返します。

      ターゲットVMからの接続の受け入れには、2つのステップが必要です。 まず、トランスポート・サービスはターゲットVMからの接続の受け入れを待機します。 接続が確立されると、接続が間違いなくターゲットVMに対する接続であることを保証するためのハンドシェークが行われます。 ハンドシェークでは、Java Debug Wire Protocolの仕様に規定されているように、JDWP-Handshake文字列の交換を行います。

      パラメータ:
      listenKey - 直前のstartListening(String)またはstartListening()呼び出しから取得された待機キー。
      acceptTimeout - このトランスポート・サービスは、acceptタイム・アウトをサポートしていて、acceptTimeoutが正の場合、ターゲットVMが接続されるのを待機しながら最大acceptTimeoutミリ秒間ブロックされる。 トランスポート・サービスがacceptタイム・アウトをサポートしていない場合、つまりacceptTimeoutが0の場合は、ターゲットVMが接続されるまで無期限にブロックされる。
      handshakeTimeout - このトランスポート・サービスがハンドシェーク・タイムアウトをサポートしていて、handshakeTimeoutが正の場合は、ターゲットVMとのハンドシェーク時に使用するミリ秒単位のタイム・アウトを指定する。 タイム・アウトの厳密な使用法はトランスポート・サービスごとに異なる。 たとえば、ハンドシェーク・タイムアウトをターゲットVMからのJDWP-Handshakeメッセージを待っている間の文字間タイム・アウトとして使用するトランスポート・サービスもある。 また、このタイム・アウトをハンドシェーク交換期間のタイム・アウトとして使用するトランスポート・サービスもある。 トランスポート・サービスがハンドシェーク・タイムアウトをサポートしない場合、またはhandshakeTimeoutが0に指定されている場合は、ターゲットVMからの応答がなくても、ハンドシェークはタイム・アウトしない。
      戻り値:
      ターゲットVMへの双方向通信チャネルを表すConnection。
      例外:
      TransportTimeoutException - ターゲットVMの接続を待つ間にタイム・アウトが発生した場合。
      IOException - 入出力エラー(ハンドシェーク時のタイム・アウトも含む)が発生した場合。
      IllegalArgumentException - acceptTimeout引数の値またはhandshakeTimeoutの値が負の場合、あるいは無効な待機キーが提供された場合。
      IllegalStateException - stopListeningがこの待機キーを使ってすでに呼び出されていて、トランスポート・サービスがもう着信接続を待機していない場合。
      関連項目:
      TransportService.Capabilities.supportsAcceptTimeout()