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 が使用される場合がある。トランスポートサービスがハンドシェークタイムアウトをサポートしない場合、または handshakeTimeout が 0 に指定されている場合は、ターゲット VM からの応答がなくても、ハンドシェーク時にタイムアウトは使用されない
戻り値:
ターゲット VM への双方向通信チャネルを表す Connection
例外:
TransportTimeoutException - 接続の確立中にタイムアウトが発生した場合
IOException - I/O エラーが発生した場合 (ハンドシェーク時のタイムアウトを含む)
IllegalArgumentException - アドレスが無効な場合、または接続タイムアウトの値またはハンドシェークタイムアウトの値が負の場合
関連項目:
TransportService.Capabilities.supportsAttachTimeout()

startListening

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

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

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

startListening

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

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

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

stopListening

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

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

パラメータ:
listenKey - startListening(String) または startListening() への前回の呼び出しから取得された待機キー
例外:
IllegalArgumentException - 待機キーが無効な場合
IOException - I/O エラーが発生した場合

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 が使用される場合がある。トランスポートサービスがハンドシェークタイムアウトをサポートしない場合、または handshakeTimeout が 0 に指定されている場合は、ターゲット VM からの応答がなくても、ハンドシェーク時にタイムアウトは使用されない
戻り値:
ターゲット VM への双方向通信チャネルを表す Connection
例外:
TransportTimeoutException - ターゲット VM の接続を待つ間にタイムアウトが発生した場合
IOException - I/O エラーが発生した場合 (ハンドシェーク時のタイムアウトを含む)
IllegalArgumentException - acceptTimeout 引数の値または handshakeTimeout の値が負の場合、あるいは無効な待機キーが提供された場合
IllegalStateException - stopListening がすでにこの待機キーを使って呼び出されていて、トランスポートサービスがもはや着信接続を待機していない場合
関連項目:
TransportService.Capabilities.supportsAcceptTimeout()

Java Debug Interface