|
Java Debug Interface | ||||||||
前のクラス 次のクラス | フレームあり フレームなし | ||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
java.lang.Object com.sun.jdi.connect.spi.TransportService
public abstract class TransportService
デバッガとターゲット 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 によって開始された接続を受け入れます。
入れ子のクラスの概要 | |
---|---|
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 |
コンストラクタの詳細 |
---|
public TransportService()
メソッドの詳細 |
---|
public abstract String name()
public abstract String description()
public abstract TransportService.Capabilities capabilities()
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 からの応答がなくても、ハンドシェーク時にタイムアウトは使用されない
TransportTimeoutException
- 接続確立時にタイムアウトが発生した場合。
IOException
- 入出力エラー (ハンドシェーク時のタイムアウトも含む) が発生した場合。
IllegalArgumentException
- アドレスが無効な場合、あるいは接続タイムアウトまたはハンドシェークタイムアウトの値が負の場合。TransportService.Capabilities.supportsAttachTimeout()
public abstract TransportService.ListenKey startListening(String address) throws IOException
このメソッドは、指定されたアドレス上でトランスポートサービスの待機を開始します。 これにより、トランスポートサービスは、そのあとの着信接続を受け入れることができます。トランスポートサービスは、着信接続が確立されるまで待ちません。
address
- 接続の待機を開始するアドレス。トランスポートサービスにより選択されたアドレス上で待機する場合は null。
accept
メソッドまたは stopListening
メソッドの呼び出しで使用される待機キー。
IOException
- 入出力エラーが発生した場合。
IllegalArgumentException
- 指定されたアドレスが無効な場合public abstract TransportService.ListenKey startListening() throws IOException
この簡易メソッドは、startListening(null)
を呼び出した場合と同様に機能します。
accept
メソッドまたは stopListening
メソッドの呼び出しで使用される待機キー。
IOException
- 入出力エラーが発生した場合。public abstract void stopListening(TransportService.ListenKey listenKey) throws IOException
別のスレッドが accept
でブロックされ、同じ待機キーで接続の受け入れを待っているときにこのメソッドを呼び出すと、スレッドから IOException がスローされます。accept でブロックされたスレッドが、ターゲット VM からの接続をすでに受け入れており、ターゲット VM とのハンドシェークのプロセスである場合にこのメソッドを呼び出しても、スレッドが例外をスローすることはありません。
listenKey
- 以前の startListening(String)
または startListening()
の呼び出しで取得した待機キー。
IllegalArgumentException
- 待機キーが無効な場合
IOException
- 入出力エラーが発生した場合。public abstract Connection accept(TransportService.ListenKey listenKey, long acceptTimeout, long handshakeTimeout) throws IOException
ターゲット 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 からの応答がなくても、ハンドシェーク時にタイムアウトは使用されない。
TransportTimeoutException
- ターゲット VM の接続を待つ間にタイムアウトが発生した場合。
IOException
- 入出力エラー (ハンドシェーク時のタイムアウトも含む) が発生した場合。
IllegalArgumentException
- acceptTimeout 引数の値または handshakeTimeout の値が負の場合、あるいは無効な待機キーが提供された場合。
IllegalStateException
- stopListening
がすでにこの待機キーを使って呼び出されていて、トランスポートサービスがもう着信接続を待機していない場合。TransportService.Capabilities.supportsAcceptTimeout()
|
Java Debug Interface | ||||||||
前のクラス 次のクラス | フレームあり フレームなし | ||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |