public abstract class TransportService extends Object
トランスポートサービスは、引数を取らないコンストラクタを持ち、その下で指定されている抽象メソッドを実装するこのクラスの、具象サブクラスです。トランスポートサービスは、デバッガとターゲット 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)
着信接続の待機を停止します。
|
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 をハンドシェーク交換期間のタイムアウトとして使用するトランスポートサービスもある。トランスポートサービスがハンドシェークタイムアウトをサポートしない場合、または 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
- このトランスポートサービスは、accept タイムアウトをサポートしていて、acceptTimeout が正の場合、ターゲット VM が接続されるのを待機しながら最大 acceptTimeout ミリ秒間ブロックされる。トランスポートサービスが accept タイムアウトをサポートしていない場合、つまり acceptTimeout が 0 の場合は、ターゲット VM が接続されるまで無期限にブロックされる。handshakeTimeout
- このトランスポートサービスがハンドシェークタイムアウトをサポートしていて、handshakeTimeout が正の場合は、ターゲット VM とのハンドシェーク時に使用するミリ秒単位のタイムアウトを指定する。タイムアウトの厳密な使用法はトランスポートサービスごとに異なる。たとえば、ハンドシェークタイムアウトをターゲット VM からの JDWP-Handshake メッセージを待っている間の文字間タイムアウトとして使用するトランスポートサービスもある。また、このタイムアウトをハンドシェーク交換期間のタイムアウトとして使用するトランスポートサービスもある。トランスポートサービスがハンドシェークタイムアウトをサポートしない場合、または handshakeTimeout が 0 に指定されている場合は、ターゲット VM からの応答がなくても、ハンドシェークはタイムアウトしない。TransportTimeoutException
- ターゲット VM の接続を待つ間にタイムアウトが発生した場合。IOException
- 入出力エラー (ハンドシェーク時のタイムアウトも含む) が発生した場合。IllegalArgumentException
- acceptTimeout 引数の値または handshakeTimeout の値が負の場合、あるいは無効な待機キーが提供された場合。IllegalStateException
- stopListening
がこの待機キーを使ってすでに呼び出されていて、トランスポートサービスがもう着信接続を待機していない場合。TransportService.Capabilities.supportsAcceptTimeout()
Copyright © 1999, 2013, Oracle and/or its affiliates. All rights reserved.