|
あなたが最も利用しているのはどれですか?
|
Axis2でクラウド用のWebサービスクライアントを作成するはじめにクラウドコンピューティングは今やIT界の流行語であり、誰もがクラウド用のアプリケーションを開発しています。Amazonのようなクラウドアプリケーションでよく見られるクールな特徴の1つは、クラウド内のインスタンスを構成、実行、監視するためのWebサービスAPIのサポートです。さまざまな理由から、Amazon EC2は最もよく使用される商用クラウドの1つになっているので、今回の記事ではAmazonのようなクラウドアプリケーション用のWebサービスクライアントを作成する方法についてお話しします。他のクラウドアプリケーション用のクライアントの作成もほとんど同じです。ほとんどのクラウドアプリケーションは、同じAPIセットとセキュリティ要件を備えています。Axis2は、サービス呼び出しのサーバ側とクライアント側のどちらにも使用できます。これまでの記事で、サーバ側でのAxis2のさまざまな使用方法について説明しました。Axis2のもう1つの重要な側面は、他のWebサービスを呼び出すためのクライアントとして使用する方法です。Axis2を使用してクライアントを作成する方法には、大きく分けて、手作業で作成する方法と、ツールを使用してリモートサービスを呼び出すクライアントスタブを生成する方法の2種類のアプローチがあります。 手作りのクライアントにするか自動生成のクライアントにするか第一のアプローチでは、メッセージのシリアル化とシリアル化解除やサービスの呼び出しなど、すべての処理のコードを自分で作成し、いくつかの手順を踏んでサービスを呼び出す必要があります。しかし、最も重要なのは、クライアントを自分で作成すると、コードの効率を最善にできることです。特定の使用状況に合わせて、コードを最適化できます。一方、第二のアプローチでは、Axis2ツールを使用してクライアント側スタブを生成し、サービスを呼び出します。この方法を使えば、メッセージのシリアル化とシリアル化解除や、システムの設定や、サービスの呼び出しなどについて思い煩う必要はありません。生成されるコードがすべてを自動的に処理してくれます。つまり、コード生成のアプローチは便利で時間の節約になり、何よりもエラーの数を減らすことができます。 この記事では、Axis2コード生成ツールを使用してクライアント側コードを生成し、コードをセットアップしてリモートサービスを呼び出す方法を説明します。具体的には、Amazon EC2のクラウドAPIを呼び出すためのAxis2クライアントを作成します。 Axis2のセットアップリモートサービス用のAxis2クライアントスタブを作成する最初のステップは、Axis2のクライアント側のセットアップです。そのためには、Axis2のバイナリディストリビューションをダウンロードする必要があります。Axis2のバイナリディストリビューションはAxis2の公式Webサイトからダウンロードできます。zipファイルをダウンロードして解凍します。これでAmazon EC2 WebサービスAPI用のスタブを生成する準備ができます。EC2のWSDLは、http://ec2.amazonaws.com/doc/2009-03-01/AmazonEC2.wsdlにあります。WSDLを使用したことがないと難しそうですが、ありがたいことに、WSDLを理解しなくてもAxis2クライアントは生成できます。これがコード生成ツールを使用することのメリットの1つで、複雑さが軽減されます。ツールがWSDLを処理し、コードを自動的に生成してくれます。さっそく、EC2 WSDL用のクライアントスタブを生成してみましょう。 最初に、解凍した Axis2ディストリビューションのbinディレクトリに移動します。ここには、シェルスクリプトとWindowsバッチファイルがいくつかあります。OSプラットフォームに応じて、シェルスクリプトまたはバッチファイルを使用してください。コードを生成するときは、コード生成ツールにいくつかのオプションを渡すことができますが、ここではすべてのオプションについては説明しません。コードを生成するには次のコマンドを実行します。Linuxの場合
./wsdl2java.sh -uri http://ec2.amazonaws.com/doc/2009-03-01/AmazonEC2.wsdl -o out Windowsの場合
wsdl2java.bat -uri http://ec2.amazonaws.com/doc/2009-03-01/AmazonEC2.wsdl -o out out」という名前のディレクトリがbinディレクトリの内部に作成され、その中にコードが作成されます。outディレクトリを見てみると、大きいファイルが作成されていることが分かります。このファイルを開いたり、読んだりしないでください。このファイルは読むには複雑すぎますし、そもそも読んだり編集したりする必要はありません。この1つのクラスの中に、シリアル化とシリアル化解除およびサービス呼び出しのコードがすべて入っています。次に、他のコード生成パラメータを使用して、別の方法でコードを生成してみます。何をするかと言うと、データバインディング(シリアル化とシリアル化解除)のコードを別のクラスとして生成します。そのためには次のコマンドを実行します。違いに注意してください。 Linuxの場合
./wsdl2java.sh -uri http://ec2.amazonaws.com/doc/2009-03-01/AmazonEC2.wsdl -o out_unpack -u Windowsの場合
wsdl2java.bat -uri http://ec2.amazonaws.com/doc/2009-03-01/AmazonEC2.wsdl -o out_ unpack -u オプションの説明次に、コードを生成するときに使用するオプションの一部について説明します。
スタブの呼び出し先に説明したように、これまでに生成したEC2用のスタブと普通のスタブの使い方は、1つの例外を除いて同じです。違うのは、Amazon EC2の場合はセキュリティを使用する必要があり、そのためにEC2用のセキュリティ要件をセットアップする必要があることです。基本的には、公開鍵と証明書を設定する必要があります。さらに、Axis2でのセキュリティの実装には足りない機能がいくつかあるので、若干の追加コードを作成する必要があります。ただし、記事が分かりにくくなるので、それについてここでは説明しません。必要なライブラリはこの記事の最後の「参考資料」セクションに示してあります。それをダウンロードしてクラスパスに追加すれば、クライアント用のユーティリティを使用できるようになります。セキュリティハンドラの作成Amazon EC2を使用するにはWSセキュリティを使用する必要があり、Axis2でWSセキュリティを使用するにはユーザーー名とパスワードの提供および処理を行う特別なハンドラを作成する必要があります。このハンドラは簡単に作成できます。セキュリティハンドラで使用する必要があるのは、次のようなコードだけです。
import org.apache.ws.security.WSPasswordCallback;
import javax.security.auth.callback.Callback;
import javax.security.auth.callback.UnsupportedCallbackException;
import javax.security.auth.callback.CallbackHandler;
import java.io.IOException;
public class SecurityHandler implements CallbackHandler {
public static String password;
public void handle(Callback[] callbacks) throws IOException,
UnsupportedCallbackException {
for (Callback callback : callbacks) {
WSPasswordCallback pwcb = (WSPasswordCallback) callback;
pwcb.setPassword(password);
}
}
}
公開鍵と証明書のセットアップクライアント作成の次のステップは、公開鍵と証明書のセットアップです。そのためには、まずEC2アカウントが必要です。持っていない場合は、アカウントを作成し、EC2ツールを使用して公開鍵と証明書を生成します。これら2つの鍵の作成については、最後の「参考資料」セクションを参照ください。クライアントの作成くどいようですが、Amazon EC2を使用するにはWSセキュリティを使用する必要があり、クライアントに必要なセキュリティをセットアップする必要があります。そのために行わなければならない重要なことの1つは、必要なモジュールをクラスパスに追加することです。この例では、Axis2のセキュリティモジュールをクラスパスに置く必要があります。そうしないと、これから作成するコードは動きません。そこで、Axis2のセキュリティモジュール(Apache Rampart)をダウンロードして、それをクラスパスに配置します。スタブのインスタンスを作成するにはいくつかの方法があり、どれを使用しても呼び出しに対する直接的な影響はありません。ここでは、次に示すように、クライアントのコンストラクタの内部で、スタブのインスタンスを作成します。
ConfigurationContext configCtx =
ConfigurationContextFactory.createConfigurationContextFromFileSystem(null, null);
Create an instance of the stub.
stub = new AmazonEC2Stub(configCtx);
ConfigurationContextを作成する必要があり、その場合にはこのステップが必要です。次に、必要なパラメータを初期化します。例えば、キーストアに格納したり、セキュリティハンドラを設定したりします。必要なコードを次に示します。前に説明したように、この処理には付属する utils.jarを使用します。このライブラリファイルには、必要なメソッドとクラスがすべて含まれています。
ec2PrivateKey = EC2Utils.pem2der(ec2PrivateKey);
ec2Cert = EC2Utils.pem2der(ec2Cert);
File jks = new File(EC2_JKS);
if (jks.exists()) {
jks.delete();
}
SecurityHandler.password = EC2_KS_PASSWORD;
EC2Utils.doImport(EC2_JKS, ec2PrivateKey, ec2Cert, EC2_USER, EC2_KS_PASSWORD);
RunInstances)についてだけ説明します。1つのメソッドの使い方が分かれば、他のメソッドも同様の手順で使用できます。Amazonには複数のインスタンスタイプがあるので、それに対応するためのコードを作成する必要があります。次に示すコードがそれです。
if (instanceType == null) {
instanceType = InstanceType.SMALL;
}
RunInstances req = new RunInstances();
RunInstancesType params = new RunInstancesType();
params.setInstanceType(instanceType.getType());
params.setImageId(amiID);
params.setKeyName(keyName);
params.setMaxCount(numberOfInstances);
params.setMinCount(numberOfInstances);
if (groupName == null) {
groupName = "default";
}
GroupSetType gst = new GroupSetType();
GroupItemType git = new GroupItemType();
git.setGroupId(groupName);
gst.setItem(new GroupItemType[]{git});
params.setGroupSet(gst);
req.setRunInstances(params);
enableSecurity("RunInstances");
RunInstancesResponse respone = stub.RunInstances(req);
RunInstancesResponseType resType = respone.getRunInstancesResponse();
RunningInstancesSetType instances = resType.getInstancesSet();
RunningInstancesItemType[] items = instances.getItem();
ArrayList instanceIds = new ArrayList();
for (int i = 0; i < items.length; i++) {
RunningInstancesItemType item = items[i];
instanceIds.add(item.getInstanceId());
System.out.println("InstanceID " + item.getInstanceId());
}
RunInstancesを呼び出す完全なクライアントについては、下記の「参考資料」セクションを参照ください。このコードを実行すると、EC2のインスタンスが自動的に開始します。前に説明したように、Amazon EC2のアカウントを作成し、さらに鍵ファイルとAmazon Machine Image(AMI)を作成する必要があります。これらがない場合は、この記事の説明に従って進めるのは難しいかもしれません。ただし、考え方は同じなので、他のサービスを呼び出す場合も同じ手順を使用できます。クライアントを実行するには、公開鍵の場所、証明書の場所、そしてAMIの名前を渡す必要があります。下記の「参考資料」セクションでサンプルのクライアントを紹介しているので、それを編集して実行してください。 まとめこの記事では、Axis2ツールを使用してクライアント側コードを生成し、生成されたクライアントを使用してサービスを呼び出す方法を説明しました。近頃最もよく使用されているクラウドAPIの1つはAmazon EC2なので、サービスの生成と呼び出しにはAmazon EC2のWSDLを使用しました。さらに、Axis2のクライアント側セキュリティと、その使用方法を説明しました。クライアントを完成させれば、スタブの他のメソッドを使用できます。参考資料著者紹介Deepal Jayasinghe(Deepal Jayasinghe)
関連記事 最新トップニュース
|
「端末メーカ各社の海外動向−2009年度上期−」(2月9日)
2009年12月16日(水)開催 10周年記念セミナー
報告レポートはこちら
|