@Exported 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, 2014, Oracle and/or its affiliates. All rights reserved.