|
Java Debug Interface | ||||||||
前のクラス 次のクラス | フレームあり フレームなし | ||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
java.lang.Object com.sun.jdi.connect.spi.Connection
public abstract class Connection
デバッガとそのデバッグ対象のターゲット VM 間の接続です。
Connection は、デバッガとターゲット VM との間の双方向通信チャネルを表します。Connection は、TransportService
が接続を確立し、ターゲット VM と正常にハンドシェークしたときに生成されます。TransportService の実装は、信頼性の高い JDWP パケットトランスポートサービスを提供します。 同時に、Connection はデバッガとターゲット VM 間で JDWP パケットの信頼性の高いフローを提供します。Connection はストリーム指向です。 つまり、Connection に書き込まれる JDWP パケットは書き込まれた順序でターゲット VM により読み取られます。同様に、ターゲット VM が Connection に書き込むパケットは、書き込まれた順序でデバッガに読み取られます。
接続は、オープンまたはクローズのどちらかです。接続は生成時にオープンとなり、クローズまでオープンのままとなります。いったんクローズされると、その状態が保持され、その接続で入出力操作を呼び出そうとすると、ClosedConnectionException
がスローされます。接続は isOpen
メソッドを呼び出してテストできます。
Connection は、複数のスレッドによる並行アクセスに対して安全ですが、どんなときも、最大 1 つのスレッドのみ読み取ることが可能であり、最大 1 つのスレッドのみ書き込むことができます。
コンストラクタの概要 | |
---|---|
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 |
コンストラクタの詳細 |
---|
public Connection()
メソッドの詳細 |
---|
public abstract byte[] readPacket() throws IOException
ターゲット VM から JDWP パケットを読み取ろうとします。読み取り操作は、無制限にブロックされる場合があり、パケットのすべてのバイトを読み取った場合だけ値を返します。 ストリーム指向の通信プロトコルに基づくトランスポートサービスの場合は、ストリームの終わりが検出されます。
パケットの読み取りでは、パケットの長さ (length フィールドの値により示される。 パケットの最初の 4 バイト) が 11 バイト以上であることをチェックする以外、一貫性チェックは行われません。length フィールドの値が 11 未満の場合、IOException がスローされます。
受信したパケットの長さに等しい長さのバイト配列を返すか、ストリームの終わりが検出された場合は長さ 0 のバイト配列を返します。ストリームの終わりがパケットのすべてのバイトのあとではなく一部のバイトのあとで検出された場合、I/O エラーとみなされ、IOException がスローされます。パケットの最初のバイトは、バイト配列の要素 0 に格納され、2 番目のバイトは要素 1 に格納されるというように続けて格納されます。バイト配列のバイトは、JDWP 仕様に従って配置されます。つまり、パケットのすべてのフィールドは JDWP 仕様で説明するようにビッグエンディアンの順になります。
このメソッドはいつでも呼び出すことができます。別のスレッドがこの接続で readPacket
をすでに起動している場合、このメソッドの呼び出しは最初の操作が完了するまでブロックされます。
ClosedConnectionException
- 接続がクローズされた場合、または readPacket の実行中に別のスレッドが接続をクローズした場合。
IOException
- 最初の 4 バイトで表されるパケットの長さが 11 バイト未満である場合、または入出力エラーが発生した場合。public abstract void writePacket(byte[] pkt) throws IOException
ターゲット 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 フィールドの値が無効な場合、またはバイト配列の長さが不十分である場合。public abstract void close() throws IOException
接続がすでにクローズされている場合、このメソッドを呼び出しても何の効果もありません。接続がクローズしたあと、readPacket
や writePacket
を呼び出しても、ClosedConnectionException
がスローされるだけです。
readPacket
、writePacket
などの入出力操作中にブロックされ、現在もブロックされているスレッドはすべて、ClosedConnectionException
をスローします。
このメソッドはいつでも呼び出すことができます。ただし、ほかの何らかのスレッドがこのメソッドをすでに呼び出している場合、別の呼び出しは最初の呼び出しが完了するまでブロックされ、そのあと何も効果を発揮することなく戻ります。
IOException
- 入出力エラーが発生した場合public abstract boolean isOpen()
|
Java Debug Interface | ||||||||
前のクラス 次のクラス | フレームあり フレームなし | ||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |