public interface VirtualMachineManager
VirtualMachine
ミラーを取得するメソッドが組み込まれています。
接続の確立のためには、いくつかの Connector
オブジェクトから 1 つを選んで使用します。各コネクタには、デバッガをターゲット VM に接続する方法がカプセル化されています。
VirtualMachineManager では、デバッガを仮想マシンに接続するための複数の方法がサポートされています。次の表に、4 つの例を示します。これらの例では、Sun の実装で採用されていたコマンド行構文を使用します。一部の Connector
実装では、次に示す例と若干異なった操作が必要になることがあります。
シナリオ | 説明 |
---|---|
デバッガからターゲット VM を起動する (もっとも簡単で一般的な方法) | デバッガが、defaultConnector() で取得したデフォルトのコネクタの LaunchingConnector.launch(java.util.Map) メソッドを呼び出します。ターゲット VM が起動し、その VM とデバッガ間の接続が確立されます。VirtualMachine ミラーが返されます。
より詳細に制御することも可能です。
|
デバッガから稼動中の VM に接続する |
|
ターゲット VM からすでに稼動中のデバッガに接続する |
listeningConnectors() によって返されたリストから 1 つまたは複数のコネクタを選択します。ListeningConnector.startListening(java.util.Map) メソッドを呼び出します。エンドユーザーに、トランスポート名と対応するアドレス文字列が提供されます。デバッガは、トランスポート名と対応するアドレス文字列をエンドユーザーが使用できるようにします。
ListeningConnector.accept(java.util.Map) を呼び出し、ターゲット VM の接続を待機します。-agentlib:jdwp=transport=xxx,address=yyy オプションを指定してターゲット VM を起動します。「xxx」はデバッガが選択したいずれかのコネクタのトランスポート、「yyy」は ListeningConnector.accept(java.util.Map) によってそのトランスポートに対して生成されたアドレスです。ListeningConnector.accept(java.util.Map) を呼び出すと、VirtualMachine ミラーが返されます。 |
ターゲット VM からデバッガを起動する (「Just-In-Time」デバッグと呼ばれることもある) |
-agentlib:jdwp=launch=cmdline,onuncaught=y,transport=xxx,server=y オプションを使用して起動されます
attachingConnectors() によって返されたリストからコネクタを選択します。
Connector.defaultArguments() を使って取得したデフォルトのコネクタのパラメータを変更して、VM が待機するトランスポート固有のアドレスを指定します。オプションで、ほかのコネクタの引数もユーザーに提供できます。
AttachingConnector.attach(java.util.Map) メソッドを呼び出し、ターゲット VM に接続します。VirtualMachine ミラーが返されます。
|
Connectors は起動時に生成されます。つまり、Bootstrap.virtualMachineManager()
の呼び出し時にはじめて生成されることになります。起動時に生成されたすべての Connector のリストは、allConnectors
メソッドを呼び出して VirtualMachineManager から取得できます。
Connectors は、プラットフォームにインストールされている場合、起動時に生成されます。加えて、Connectors は VirtualMachineManager により自動的に生成され、プラットフォームにインストールされた TransportService
の実装にカプセル化されます。ここでは、Connectors を生成する 2 つのメカニズムについて説明します。
Connector が Connector
型の定義しているクラスローダーから可視である jar ファイルにインストールされ、その jar ファイルが META-INF/services リソースディレクトリにある com.sun.jdi.connect.Connector という名前のプロバイダ構成ファイルを含み、そのプロバイダ構成ファイルに Connector 実装の完全指定のクラス名のリストが含まれる場合、Connector はプラットフォームにインストールされます。Connector は、Connector
インタフェースを実装するクラスです。より適切に説明するなら、このクラスは、特定の Connector 型 (AttachingConnector
、ListeningConnector
、または LaunchingConnector
) のうちどれか 1 つを実装します。プロバイダ構成ファイルの形式は、行ごとに 1 つの完全指定クラス名が示された形式です。各クラスを囲む空白文字とタブ文字ばかりでなく空白行も無視されます。コメント文字は「#」(0x23) です。各行では、最初のコメント文字以降の文字はすべて無視されます。ファイルは UTF-8 で符号化されている必要があります。
起動時、VirtualMachineManager はプロバイダ構成ファイルに示されている各クラスをロードおよびインスタンス化しようとします (引数なしのコンストラクタを使用)。Connector のロードおよび生成時にスローされた例外は、キャッチされ、無視されます。つまり、起動プロセスはエラーにかかわらず続行されます。
VirtualMachineManager は、プラットフォームにインストールされた Connector に加え、プラットフォームにインストールされた任意の TransportService
実装をカプセル化する Connector も生成します。TransportService が TransportService
型の定義しているクラスローダーから可視である jar ファイルにインストールされ、その jar ファイルが META-INF/services リソースディレクトリにある com.sun.jdi.connect.spi.TransportService という名前のプロバイダ構成ファイルを含み、そのプロバイダ構成ファイルに TransportService 実装の完全指定のクラス名のリストが含まれる場合、TransportService はプラットフォームにインストールされます。TransportService は、TransportService
の具象サブクラスです。各クラスは TransportService インタフェースを実装するクラスの完全指定クラス名でなければならない点を除き、プロバイダ構成ファイルの形式は Connectors のプロバイダ構成ファイルと同じです。
VirtualMachineManager は、プラットフォームにインストールされた TransportService ごとに、対応する AttachingConnector
と ListeningConnector
を生成します。これらの Connector は、TransportService をさらにその次にカプセル化する Transport
をカプセル化するために生成されます。AttachingConnector は、Attach 文字列を使って連結されたトランスポートサービスの名前に基づいて名前が付けられます。たとえば、トランスポートサービスの name()
メソッドが telepathic を返す場合、AttachingConnector には telepathicAttach という名前が付けられます。同様に、ListeningConnector には、トランスポートサービスの名前に Listen 文字列がタグ付けされた名前が付けられます。AttachingConnector と ListeningConnector の description()
メソッドは、配下のトランスポートサービスの description()
メソッドに委譲されます。AttachingConnector と ListeningConnector のどちらも、2 つの Connector Arguments
を持ちます。address という名前の StringArgument
は、接続先アドレスまたは待機するアドレスを指定するコネクタ引数です。timeout という名前の IntegerArgument
は、接続時または受け入れ時のタイムアウトを指定するコネクタ引数です。タイムアウトコネクタは、トランスポートサービスが接続タイムアウトまたは受け入れタイムアウトをサポートしているかどうかに応じて無視できます。
コネクタを作成できない場合、仮想マシンマネージャーの初期化は失敗し、Bootstrap.virtualMachineManager()
によってエラーがスローされます。
修飾子と型 | メソッドと説明 |
---|---|
List<Connector> |
allConnectors()
既知のすべての
Connector オブジェクトのリストを返します。 |
List<AttachingConnector> |
attachingConnectors()
既知の
AttachingConnector オブジェクトのリストを返します。 |
List<VirtualMachine> |
connectedVirtualMachines()
デバッガに接続されるすべてのターゲット VM のリストを作成します。
|
VirtualMachine |
createVirtualMachine(Connection connection)
新しい仮想マシンを作成します。
|
VirtualMachine |
createVirtualMachine(Connection connection, Process process)
ターゲット VM の仮想マシンミラーを作成します。
|
LaunchingConnector |
defaultConnector()
デフォルトのコネクタを識別します。
|
List<LaunchingConnector> |
launchingConnectors()
既知の
LaunchingConnector オブジェクトのリストを返します。 |
List<ListeningConnector> |
listeningConnectors()
既知の
ListeningConnector オブジェクトのリストを返します。 |
int |
majorInterfaceVersion()
JDI インタフェースのメジャーバージョン番号を返します。
|
int |
minorInterfaceVersion()
JDI インタフェースのマイナーバージョン番号を返します。
|
LaunchingConnector defaultConnector()
LaunchingConnector
List<LaunchingConnector> launchingConnectors()
LaunchingConnector
オブジェクトのリストを返します。返されたオブジェクトから任意のオブジェクトを選択して、新しいターゲット VM を起動し、ただちにこのターゲット VM の VirtualMachine
ミラーを作成することができます。
起動コネクタにより起動されたターゲット VM は、VMStartEvent
が受け入れられるまで安定であることを保証されていません。LaunchingConnector
オブジェクトのリスト。List<AttachingConnector> attachingConnectors()
AttachingConnector
オブジェクトのリストを返します。返されたオブジェクトから任意のオブジェクトを選択して、既存のターゲット VM に接続し、このターゲット VM の VirtualMachine
ミラーを作成することができます。AttachingConnector
オブジェクトのリスト。List<ListeningConnector> listeningConnectors()
ListeningConnector
オブジェクトのリストを返します。返されたオブジェクトから任意のオブジェクトを選択して、ターゲット VM によって開始された接続を待機し、このターゲット VM の VirtualMachine
ミラーを作成することができます。ListeningConnector
オブジェクトのリスト。List<Connector> allConnectors()
Connector
オブジェクトのリストを返します。Connector
オブジェクトのリスト。List<VirtualMachine> connectedVirtualMachines()
VirtualMachine
インスタンスが含まれます。ターゲット VM は、VM の接続が切断されるまで、このリストから削除されません。VM がリストから削除されると、イベントキューに VMDisconnectEvent
が入ります。VirtualMachine
オブジェクトのリスト。int majorInterfaceVersion()
VirtualMachine.version()
のターゲット VM バージョンと情報、および VirtualMachine.description()
を参照してください。int minorInterfaceVersion()
VirtualMachine.version()
のターゲット VM バージョンと情報、および VirtualMachine.description()
を参照してください。VirtualMachine createVirtualMachine(Connection connection, Process process) throws IOException
Connection
がすでに存在するターゲット VM の仮想マシンミラーを生成します。Connection は、Connector
が接続を確立し、ターゲット VM と正常にハンドシェークしたときに生成されます。次に、Connector はこのメソッドを使って、ターゲット VM の複合状態を表すために仮想マシンミラーを生成します。
process 引数は、ターゲット VM の Process
オブジェクトを指定します。この引数には null を指定することもできます。ターゲット VM が LaunchingConnector
によって起動される場合、process 引数を指定するようにしてください。そうしないと、生成された仮想マシンで VirtualMachine.process()
を呼び出したとき、null が返されます。
ターゲット VM との接続が確立されたとき、Connectors が仮想マシンミラーを生成できるようにするためにこのメソッドは存在します。新しい Connector 実装を構築している開発者だけがこのメソッドを直接使用する必要があります。
connection
- ターゲット VM への開かれた接続。process
- 起動された場合、ターゲット VM の Process
オブジェクト。起動されなかった場合は null。IOException
- 入出力エラーが発生した場合IllegalStateException
- 接続が開いていない場合Connection.isOpen()
, VirtualMachine.process()
VirtualMachine createVirtualMachine(Connection connection) throws IOException
この簡易メソッドは、createVirtualMachine(Connection, Process)
メソッドを呼び出して process 引数に null を指定した場合と同様に機能します。
ターゲット VM との接続が確立されたとき、Connectors が仮想マシンミラーを生成できるようにするためにこのメソッドは存在します。新しい Connector 実装を構築している開発者だけがこのメソッドを直接使用する必要があります。
IOException
- 入出力エラーが発生した場合IllegalStateException
- 接続が開いていない場合
Copyright © 1999, 2013, Oracle and/or its affiliates. All rights reserved.