Java Debug Interface

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

入れ子のクラスの概要
static class TransportService.Capabilities
          トランスポートサービスの機能です。
static class TransportService.ListenKey
          待機キー。
 
コンストラクタの概要
TransportService()
           
 
メソッドの概要
abstract  Connection accept(TransportService.ListenKey listenKey, long acceptTimeout, long handshakeTimeout)
          ターゲット VM からの接続を受け入れます。
abstract  Connection attach(String address, long attachTimeout, long handshakeTimeout)
          指定されたアドレスに接続します。
abstract  TransportService.Capabilities capabilities()
          トランスポートサービスの機能を返します。
abstract  String description()
          トランスポートサービスの説明を返します。
abstract  String name()
          トランスポートサービスを識別するための名前を返します。
abstract  TransportService.ListenKey startListening()
          トランスポートサービスにより選択されたアドレス上で待機します。
abstract  TransportService.ListenKey startListening(String address)
          指定されたアドレス上で着信接続を待機します。
abstract  void stopListening(TransportService.ListenKey listenKey)
          着信接続の待機を停止します。
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

コンストラクタの詳細

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 が 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 - このトランスポートサービスが受け入れタイムアウトをサポートしていて、acceptTimeout が正の場合は、ターゲット VM の接続を待つ間、最大約 acceptTimeout ミリ秒の間ブロックされる。 トランスポートサービスが受け入れタイムアウトをサポートしていない場合、または 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()

Java Debug Interface