VirtualMachineミラーを取得するメソッドが組み込まれています。
接続の確立のためには、いくつかのConnectorオブジェクトから1つを選んで使用します。 各コネクタには、デバッガをターゲットVMに接続する方法がカプセル化されています。
VirtualMachineManagerでは、デバッガを仮想マシンに接続するための複数の方法がサポートされています。 次の表に、4つの例を示します。 これらの例では、Sunの実装で採用されていたコマンド行構文を使用します。 一部のConnector実装では、次に示す例と若干異なった操作が必要になることがあります。
| シナリオ | 説明 |
|---|---|
| デバッガからターゲットVMを起動する(もっとも簡単で一般的な方法) | デバッガが、defaultConnector()で取得したデフォルトのコネクタのLaunchingConnector.launch(java.util.Map)メソッドを呼び出します。 ターゲットVMが起動し、そのVMとデバッガ間の接続が確立されます。 VirtualMachineミラーが返されます。
より詳細に制御することも可能です。
|
| デバッガから稼動中のVMに接続する |
|
| ターゲットVMからすでに稼動中のデバッガに接続する |
|
| ターゲットVMからデバッガを起動する(「Just-In-Time」デバッグと呼ばれることもある) |
|
Connectorsは起動時に生成されます。 つまり、Bootstrap.virtualMachineManager()の呼出し時にはじめて生成されることになります。 起動時に生成されたすべてのConnectorのリストは、allConnectorsメソッドを呼び出してVirtualMachineManagerから取得できます。
Connectorsは、プラットフォームにインストールされている場合、起動時に生成されます。 加えて、ConnectorsはVirtualMachineManagerにより自動的に生成され、プラットフォームにインストールされたTransportServiceの実装にカプセル化されます。 ここでは、Connectorsを生成する2つのメカニズムについて説明します。
コネクタがConnectorタイプの定義クラス・ローダーに表示されるjarファイルにインストールされ、jarファイルにリソース・ディレクトリMETA-INF/services内のプロバイダ構成ファイル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に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()によってエラーがスローされます。
- 導入されたバージョン:
- 1.3
-
メソッドのサマリー
修飾子と型メソッド説明既知のすべてのConnectorオブジェクトのリストを返します。既知のAttachingConnectorオブジェクトのリストを返します。デバッガに接続されるすべてのターゲットVMのリストを作成します。createVirtualMachine(Connection connection) 新しい仮想マシンを作成します。createVirtualMachine(Connection connection, Process process) ターゲットVMの仮想マシン・ミラーを作成します。デフォルトのコネクタを識別します。既知のLaunchingConnectorオブジェクトのリストを返します。既知のListeningConnectorオブジェクトのリストを返します。intJDIインタフェースのメジャー・バージョン番号を返します。intJDIインタフェースのマイナー・バージョン番号を返します。
-
メソッドの詳細
-
defaultConnector
LaunchingConnector defaultConnector()デフォルトのコネクタを識別します。 このコネクタは、特定の特性のコネクタを選択する必要がない場合に、起動コネクタとして使用します。- 戻り値:
- デフォルトの
LaunchingConnector
-
launchingConnectors
List<LaunchingConnector> launchingConnectors()既知のLaunchingConnectorオブジェクトのリストを返します。 返されたオブジェクトから任意のオブジェクトを選択して、新しいターゲットVMを起動し、ただちにこのターゲットVMのVirtualMachineミラーを作成することができます。 起動コネクタにより起動されたターゲットVMは、VMStartEventが受け入れられるまで安定であることを保証されていません。- 戻り値:
LaunchingConnectorオブジェクトのリスト。
-
attachingConnectors
List<AttachingConnector> attachingConnectors()既知のAttachingConnectorオブジェクトのリストを返します。 返されたオブジェクトから任意のオブジェクトを選択して、既存のターゲットVMに接続し、このターゲットVMのVirtualMachineミラーを作成することができます。- 戻り値:
AttachingConnectorオブジェクトのリスト。
-
listeningConnectors
List<ListeningConnector> listeningConnectors()既知のListeningConnectorオブジェクトのリストを返します。 返されたオブジェクトから任意のオブジェクトを選択して、ターゲットVMによって開始された接続を待機し、このターゲットVMのVirtualMachineミラーを作成することができます。- 戻り値:
ListeningConnectorオブジェクトのリスト。
-
allConnectors
既知のすべてのConnectorオブジェクトのリストを返します。- 戻り値:
Connectorオブジェクトのリスト。
-
connectedVirtualMachines
List<VirtualMachine> connectedVirtualMachines()デバッガに接続されるすべてのターゲットVMのリストを作成します。 リストには、接続を開始したすべてのターゲットVMと、このマネージャが接続を開始した接続先のすべてのターゲットVMのVirtualMachineインスタンスが含まれます。 ターゲットVMは、VMの接続が切断されるまで、このリストから削除されません。 VMがリストから削除されると、イベント・キューにVMDisconnectEventが入ります。- 戻り値:
- ターゲットVMをミラー化する
VirtualMachineオブジェクトのリスト。
-
majorInterfaceVersion
int majorInterfaceVersion()JDIインタフェースのメジャー・バージョン番号を返します。 バージョン情報については、VirtualMachine.version()のターゲットVMバージョンと情報、およびVirtualMachine.description()を参照してください。- 戻り値:
- メジャー・バージョン番号を表す整数。
-
minorInterfaceVersion
int minorInterfaceVersion()JDIインタフェースのマイナー・バージョン番号を返します。 バージョン情報については、VirtualMachine.version()のターゲットVMバージョンと情報、およびVirtualMachine.description()を参照してください。- 戻り値:
- マイナー・バージョン番号を表す整数
-
createVirtualMachine
ターゲットVMの仮想マシン・ミラーを作成します。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。- 戻り値:
- ターゲットVMを表す新しい仮想マシン。
- スロー:
IOException- 入出力エラーが発生した場合IllegalStateException- 接続が開いていない場合- 導入されたバージョン:
- 1.5
- 関連項目:
-
createVirtualMachine
新しい仮想マシンを作成します。この便利なメソッドは、
createVirtualMachine(Connection, Process)メソッドを起動し、process引数としてnullを指定した場合と同じように機能します。ターゲットVMとの接続が確立されたとき、Connectorsが仮想マシン・ミラーを生成できるようにするためにこのメソッドは存在します。 新しいConnector実装を構築している開発者だけがこのメソッドを直接使用する必要があります。
- 戻り値:
- 新しい仮想マシン
- スロー:
IOException- 入出力エラーが発生した場合IllegalStateException- 接続が開いていない場合- 導入されたバージョン:
- 1.5
-