モジュール jdk.jdi
パッケージ 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
  • コンストラクタのサマリー

    コンストラクタ
    コンストラクタ
    説明
    サブクラスが呼び出すためのコンストラクタ。
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    abstract void
    この接続を終了します。
    abstract boolean
    この接続がオープンかどうかを通知します。
    abstract byte[]
    ターゲット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のbyte配列を返します。 パケットの一部(すべてのバイトではない)が読み取られた後にストリームの終わりが検出された場合、そのストリームはI/Oエラーとみなされ、IOExceptionがスローされます。 パケットの最初のバイトは、バイト配列の要素0、要素1の2番目のバイトなどに格納されます。 byte配列のバイトは、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接続に基づくトランスポート・サービスは、ネットワーク上への転送の前にパケットの一部またはすべてをバッファする場合があります。

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

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

      書込み操作はブロックされたり、すぐに終了したりする場合があります。 操作が正確にいつブロックされるかはトランスポート・サービスに依存します。 ターゲットVMにTCP/IP接続される場合は、ネットワークが混雑していたり基になるネットワーク・システムでパケットをバッファする領域が不足している場合は、writePacketメソッドがブロックされる場合があります。

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

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

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

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

      入出力操作(readPacketまたはwritePacket)で現在ブロックされているスレッドは、ClosedConnectionExceptionをスローします)。

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

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

      public abstract boolean isOpen()
      この接続がオープンかどうかを通知します。
      戻り値:
      この接続が開いている場合にのみtrue