Java Debug Interface

com.sun.jdi.connect.spi
クラス Connection

java.lang.Object
  上位を拡張 com.sun.jdi.connect.spi.Connection

public abstract class Connection
extends Object

デバッガとそのデバッグ対象のターゲット VM 間の接続です。

Connection は、デバッガとターゲット VM との間の双方向通信チャネルを表します。Connection は、TransportService が接続を確立し、ターゲット VM と正常にハンドシェークしたときに生成されます。TransportService の実装は、信頼性の高い JDWP パケットトランスポートサービスを提供します。 同時に、Connection はデバッガとターゲット VM 間で JDWP パケットの信頼性の高いフローを提供します。Connection はストリーム指向です。 つまり、Connection に書き込まれる JDWP パケットは書き込まれた順序でターゲット VM により読み取られます。同様に、ターゲット VM が Connection に書き込むパケットは、書き込まれた順序でデバッガに読み取られます。

接続は、オープンまたはクローズのどちらかです。接続は生成時にオープンとなり、クローズまでオープンのままとなります。いったんクローズされると、その状態が保持され、その接続で入出力操作を呼び出そうとすると、ClosedConnectionException がスローされます。接続は isOpen メソッドを呼び出してテストできます。

Connection は、複数のスレッドによる並行アクセスに対して安全ですが、どんなときも、最大 1 つのスレッドのみ読み取ることが可能であり、最大 1 つのスレッドのみ書き込むことができます。

導入されたバージョン:
1.5

コンストラクタの概要
Connection()
           
 
メソッドの概要
abstract  void close()
          この接続を終了します。
abstract  boolean isOpen()
          この接続がオープンかどうかを通知します。
abstract  byte[] readPacket()
          ターゲット VM からパケットを読み取ります。
abstract  void writePacket(byte[] pkt)
          ターゲット VM にパケットを書き込みます。
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

コンストラクタの詳細

Connection

public Connection()
メソッドの詳細

readPacket

public abstract byte[] readPacket()
                           throws IOException
ターゲット VM からパケットを読み取ります。

ターゲット VM から JDWP パケットを読み取ろうとします。読み取り操作は、無制限にブロックされる場合があり、パケットのすべてのバイトを読み取った場合だけ値を返します。 ストリーム指向の通信プロトコルに基づくトランスポートサービスの場合は、ストリームの終わりが検出されます。

パケットの読み取りでは、パケットの長さ (length フィールドの値により示される。 パケットの最初の 4 バイト) が 11 バイト以上であることをチェックする以外、一貫性チェックは行われません。length フィールドの値が 11 未満の場合、IOException がスローされます。

受信したパケットの長さに等しい長さのバイト配列を返すか、ストリームの終わりが検出された場合は長さ 0 のバイト配列を返します。ストリームの終わりがパケットのすべてのバイトのあとではなく一部のバイトのあとで検出された場合、I/O エラーとみなされ、IOException がスローされます。パケットの最初のバイトは、バイト配列の要素 0 に格納され、2 番目のバイトは要素 1 に格納されるというように続けて格納されます。バイト配列のバイトは、JDWP 仕様に従って配置されます。つまり、パケットのすべてのフィールドは JDWP 仕様で説明するようにビッグエンディアンの順になります。

このメソッドはいつでも呼び出すことができます。別のスレッドがこの接続で readPacket をすでに起動している場合、このメソッドの呼び出しは最初の操作が完了するまでブロックされます。

戻り値:
ターゲット VM から読み取られたパケット
例外:
ClosedConnectionException - 接続がクローズされた場合、または readPacket の実行中に別のスレッドが接続をクローズした場合。
IOException - 最初の 4 バイトで表されるパケットの長さが 11 バイト未満である場合、または入出力エラーが発生した場合。

writePacket

public abstract void writePacket(byte[] pkt)
                          throws IOException
ターゲット VM にパケットを書き込みます。

ターゲット VM に JDWP パケットの書き込みまたは送信を試みます。書き込み操作は、ターゲット VM にパケット全体が書き込まれたあとだけ戻ります。パケット全体の書き込みは、パケット全体がターゲット VM に転送されたことを意味しませんが、すべてのバイトがトランスポートサービスに書き込まれたことを意味します。たとえば、TCP/IP 接続に基づくトランスポートサービスは、ネットワーク上での転送の前にパケットの一部またはすべてをバッファーできます。

このメソッドに提供されたバイト配列は、JDWP 仕様に従って配置されます。つまり、パケットのすべてのフィールドはビッグエンディアンの順です。最初のバイトである要素 pkt[0]length フィールドの最初のバイトになります。 また、要素 pkt[1]lengthフィールドの 2 番目のバイトになるというように続きます。

パケットの書き込みでは、パケットの長さをチェックする以外、一貫性チェックは行われません。パケット長のチェックでは、パケットの最初の 4 バイトで示される length フィールドの値が 11 以上であることをチェックする必要があります。同時に、このメソッドに提供されたバイト配列の長さ、つまり pkt.length は 11 以上でなければならず、length フィールドの値以上である必要があります。バイト配列の長さが length フィールドの値よりも大きい場合、要素 pkt[length] 以降のすべてのバイトは無視されます。つまり、バイト配列のパケットに続く余分なバイトは無視され、ターゲットに転送されません。

書き込み操作はブロックしたり、すぐに終了したりすることができます。操作がブロックされる正確な状況はトランスポートサービスに依存します。ターゲット VM への TCP/IP 接続の場合、ネットワーク負荷がある場合や配下のネットワークシステムでパケットをバッファーするための容量が不十分な場合は、writePacket メソッドをブロックすることができます。

このメソッドはいつでも呼び出すことができます。別のスレッドがこの Connection で 書き込み操作をすでに開始している場合、このメソッドの以降の呼び出しは最初の操作が完了するまでブロックされます。

パラメータ:
pkt - ターゲット VM に書き込まれるパケット。
例外:
ClosedConnectionException - 接続がクローズされた場合、または書き込み操作の実行中に別のスレッドが接続をクローズした場合。
IOException - 入出力エラーが発生した場合
IllegalArgumentException - length フィールドの値が無効な場合、またはバイト配列の長さが不十分である場合。

close

public abstract void close()
                    throws IOException
この接続を終了します。

接続がすでにクローズされている場合、このメソッドを呼び出しても何の効果もありません。接続がクローズしたあと、readPacketwritePacket を呼び出しても、ClosedConnectionException がスローされるだけです。

readPacketwritePacket などの入出力操作中にブロックされ、現在もブロックされているスレッドはすべて、ClosedConnectionException をスローします。

このメソッドはいつでも呼び出すことができます。ただし、ほかの何らかのスレッドがこのメソッドをすでに呼び出している場合、別の呼び出しは最初の呼び出しが完了するまでブロックされ、そのあと何も効果を発揮することなく戻ります。

例外:
IOException - 入出力エラーが発生した場合

isOpen

public abstract boolean isOpen()
この接続がオープンかどうかを通知します。

戻り値:
この接続がオープンである場合にかぎり true

Java Debug Interface