IBM Cloud (IBM Smart Business Development and Test on the IBM Cloud) のパラメーターは、parameters.xml という XML ファイルを使ってイメージからインスタンスへと渡されます。このファイルはイメージの RAM (Rational® Asset Manager) の中に置かれており、/etc/cloud ディレクトリー (Linux® の場合) 配下にある、実際のパラメーターが含まれるインスタンスの中にコピーされます。
ここで、この parameters.xml の中でカスタムのパラメーターを定義し、インスタンスを作成してみましょう。例えば、インスタンス作成時に VNC (Virtual Network Computing) をセットアップするカスタム・イメージを作成することができます。このイメージはパラメーターとして、ユーザー ID、パスワード、VNC パスワードを要求します (図 1)。
図 1. パラメーターを定義してインスタンスを作成する
ここで、イメージまたはインスタンスのいずれかの XML ファイルからパラメーターを抽出する Java プログラムを作成する場合、このパラメーター・ファイルを Java プログラムで読み取る必要があります。例えば、インスタンスを要求する機能を持つ独自のポータルをイメージから作成したいとします。画面上のリクエストを動的に作成するためには、イメージがどのパラメーターを要求しているのかを知る必要があります。そしてその情報を、静的な結果としてではなく、動的に取得する必要があります。動的に取得することで、各イメージのタイプから特定の画面を作成した後に再度パラメーター・ファイルの値を送信する必要がなくなります。
parameters.xml を取得するために、IBM Cloud の Java API と Image.getManifest() メソッドを使用することができます。この記事では、parameters.xml へのアクセスに必要なすべてのメソッドを提供する API について説明します。XML ファイルを構文解析する方法はいくつもありますが、この記事では JAXB を使って XML ファイルをマーシャリング、アンマーシャリングする例を紹介します。
JAXB は XSD ファイルをベースに Java パッケージを作成することができます。「Creating and customizing images」という文書 (「参考文献」を参照) の中には parameters.xsd ファイルがあります。
この XSD ファイルから、Java に用意された xjc ツールを使用することで、パラメーター・モデルとファクトリー・クラスを表現するクラスを含む Java パッケージを生成します。これらの生成されたクラスを使って parameters.xml にアクセスします。
これだけの概念を理解できれば十分です。ではその Java パッケージを作成しましょう。
上で説明したように、Java に用意された xjc ツールを使いますが、まず parameters.xsd ファイルが必要です。とりあえず、parameters.xsd ファイルを作成する最善の方法は、IBM Cloud の「Support (サポート)」タブからリンクされている「Creating and customizing images」という文書 (「参考文献」を参照) から parameters.xsd ファイルをコピーして貼り付ける方法です。
parameters.xsd ファイルを入手したら、単純に以下のコマンドを入力してパッケージを生成します。
xjc -p <packageName> parameters.xsd |
以下のようなパッケージがカレント・ディレクトリーに作成されます。
C:\Documents and Settings\Dominique\workspaceCloud\com.ibm.cloud.parameters\src>xjc -p com.ibm.cloud.parameters ../resource/parameters.xsd parsing a schema... compiling a schema... com\ibm\cloud\parameters\DataType.java com\ibm\cloud\parameters\Field.java com\ibm\cloud\parameters\ObjectFactory.java com\ibm\cloud\parameters\OptionType.java com\ibm\cloud\parameters\Options.java com\ibm\cloud\parameters\Parameters.java com\ibm\cloud\parameters\Values.java |
このパッケージを Java プロジェクトにインポートします (図 2)。
図 2. パラメーター・パッケージを Java プロジェクトにインポートする
このパッケージを見ると、XSD ファイルに定義された各オブジェクトを表現する POJO (Plain Old Java Object)、そしてファクトリー・クラスがあることがわかります。
以下のように、Java パラメーター・パッケージをテストする簡単なプログラムを実行します。
String cloudPasswordFile = args[0];
cloudUserId = args[1];
String cloudPassPhrase = args[2];
// Retrieve cloud access information.
cloudPassword = PasswordFileProcessor.getRealPassword(
cloudPassPhrase, cloudPasswordFile, cloudUserId);
Properties props = new Properties();
props.load(new FileInputStream("cloud.properties"));
address = props.getProperty("address",
"https://www-147.ibm.com/cloud/enterprise/");
// Set Credential and address.
client.setRemoteCredentials(cloudUserId, cloudPassword);
client.setEndpointAddress(address);
//Search for an image description
Image image = client.describeImage("20004761");
Security.setProperty("ssl.SocketFactory.provider",
"com.ibm.jsse2.SSLSocketFactoryImpl");
Security.setProperty("ssl.ServerSocketFactory.provider",
"com.ibm.jsse2.SSLServerSocketFactoryImpl");
//Create an http client
HttpClient httpclient = new HttpClient();
Credentials defaultcreds =
new UsernamePasswordCredentials(cloudUserId, cloudPassword);
httpclient.getState().setCredentials(AuthScope.ANY, defaultcreds);
//Create the method, it is important to use the escape
//because the url contains '{' and '}'.
GetMethod httpget = new GetMethod(new HttpsURL(image.getManifest()).getEscapedURI());
//Execute the request
httpclient.executeMethod(httpget);
//Get the result
String result = httpget.getResponseBodyAsString();
//Prepare JAXB
JAXBContext jc;
jc = JAXBContext.newInstance("com.ibm.cloud.parameters");
Unmarshaller u = jc.createUnmarshaller();
//Unmarshal the result
Parameters parameters = (Parameters) u.unmarshal(new StringReader(result));
//Display the parameters
for (Field field : parameters.getField()) {
System.out.println("Field Name=" + field.getName());
}
|
この例では、imageID=20004761 である、カスタマイズされたイメージを使いました。アセット・カタログをブラウズすると、イメージの ID を見つけることができます。(「Control panel (コントロール・パネル)」 > 「View asset catalog (アセット・カタログを表示)」の順に選択し、「My Dashboard (マイ・ダッシュボード)」または「Assets (アセット)」からイメージを選択すると、イメージ ID フィールドに ID が表示されています。)
この parameters.xml ファイルは以下のようなものです。
<parameters xsi:noNamespaceSchemaLocation=
"platform:/resource/com.ibm.ccl.devcloud.client/schema/parameters.xsd">
<field name="userID" label="User ID" type="string"/>
<field name="userPassword" label="User Password" type="password"
pattern="^\w*(?=\w*\d)(?=\w*[a-z])(?=\w*[A-Z])\w*$"
patternErrorMessage="Invalid Password. Must contain at least 1 number,
at least 1 lower case letter, and at least 1 upper case letter.">
</field>
<field name="vncPassword" label="VNC Password" type="password"
pattern="^\w*(?=\w*\d)(?=\w*[a-z])(?=\w*[A-Z])\w*$"
patternErrorMessage="Invalid Password. Must contain at least 1 number,
at least 1 lower case letter, and at least 1 upper case letter.">
</field>
</parameters>
|
そして結果は以下のようになります。
Field Name=userID Field Name=userPassword Field Name=vncPassword |
XML を Java モデルに変換するためには、XMLBeans や XStreams のような技術を使う方法など、いくつかの方法がありますが、JAXB を使う方法は最も簡単な方法の 1 つです。この記事をきっかけに、皆さんが IBM Cloud の Java API を使用して IBM Cloud に関する要件を満たすコードを作成し、インスタンスを作成する独自のメソッドを開発できることを祈っています。
学ぶために
- IBM Cloud でさまざまなタスクを実行する方法を学ぶために、以下のリソースをご覧ください。
- 「IBM Cloud リリース 1.2 を使うためのヒント: Windows インスタンスとの間でのファイルのアップロードとダウンロード」
- 「IBM Cloud リリース 1.2 を使うためのヒント: Windows Server 2008 R2 に IIS Web サーバーをインストールする」
- 「Create an IBM Cloud instance with the Linux command line」
- 「Create an IBM Cloud instance with the Windows command line」
- 「Extend your corporate network with the IBM Cloud」
- 「IBM Cloud での高可用性アプリケーション」
- 「カスタム・インスタンスのクラウド・イメージをオンザフライでパラメーター化する」
- 「Windows-targeted approaches to IBM Cloud provisioning」
- この記事で取り上げた文書、「Creating
and customizing images」には XSD ファイルと xjc ツールが含まれています。この文書は IBM Cloud
ダッシュボードの「Support (サポート)」タブにも用意されています ( IBM Cloud へのログインが必要です)。
- developerWorks
でクラウド開発者のためのリソースを調べてください。クラウドにデプロイするためにプロジェクトを構築しているアプリケーション開発者やサービス開発者の知識や経験を発見し、共有することができます。
- 次のステップとして、「IBM
Smart Business Development and Test on the IBM Cloud」にアクセスする方法を学んでください。
製品や技術を入手するために
- 「IBM Smart Business
Development and Test on the IBM Cloud」で利用可能な製品イメージを調べてください。
議論するために
- My
developerWorks のクラウド・コンピューティング・グループに参加してください。
- My
developerWorks でクラウドに関する優れたブログを読んでください。
- My developerWorks
コミュニティーに加わってください。My developerWorks
コミュニティーは専門家のネットワークであり、接続、共有、および協力のための一連のコミュニティー・ツールを豊富に提供しています。

ここ数年、Dominique Vernier は Java 技術とクラウド・アーキテクチャーを中心とした業務を行っています。また彼は非常に長く情報技術に従事しており、メッセージング、データベース、SOA、EAI、クライアント/サーバー、C/C++、既存フレームワークなどに関して幅広い知識を得ています。また彼は、通信、CRM、ロジスティクス、保険などの業界にも幅広い知識を持っています。彼はステート・エンジンとリソース管理に関する 4 件の特許と共同特許を持っています。現在は South-West Europe Cloud Center of Excellence で、プライベートおよびパブリック・ソリューションのための Smart Business Development and Test Cloud に従事しています。