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 に書き込むパケットは、書き込まれた順序でデバッガに読み取られます。

接続は、オープンまたはクローズのどちらかです。接続は生成時にオープンとなり、クローズまでオープンのままとなります。クローズになると、クローズが維持され、I/O 操作を呼び出そうとすると、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 バイト未満の場合、または I/O エラーが発生した場合

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 - I/O エラーが発生した場合
IllegalArgumentException - length フィールドの値が無効な場合、またはバイト配列が不十分な長さのバイト配列の場合

close

public abstract void close()
                    throws IOException
この接続をクローズします。

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

I/O 操作 の readPacket または writePacket で現在ブロックされているスレッドは ClosedConnectionException をスローします。

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

例外:
IOException - I/O エラーが発生した場合

isOpen

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

戻り値:
この接続がオープンの場合だけ true

Java Debug Interface