検証
新世代リッチ・クライアントの可能性を探る(前編)

2.簡単なサンプルの作成と実行

野畠英明
ヒューレット・パッカード・ソリューションデリバリ(株)
2003/05/13

Officeを使った簡単なサンプル

 インストールが完了したら、動作確認をかねて、簡単なサンプル(HelloWorldサービス)を作成して実行してみよう。このサンプルでは、Webサービス側は決まった文字列を返すだけで、Webサービス・クライアントであるExcelでその文字列を単純にセルに表示する。単純なサンプルだが、Webサービス・クライアントとしてのOfficeの動きを理解していただけると思う。下図にこのサンプルの論理的な構成を示す。

作成するサンプル・プログラムの構成
Office XPに追加インストールしたOffice XP WSTを使い、WebLogic Server側で提供する“Hello World”WebサービスをExcelから呼び出す。Excelでは、VBAマクロからOffice XP WSTで作成されたプロキシ・クラス、SOAP Toolkitを通してWebサービスにアクセスする。

 Excel側には、Office XP WSTで作成されたプロキシ・クラスがあり、そのクラスがSOAP Toolkitを用いて、Webサービスにアクセスする。

 WebLogic Server側には、EJB(Enterprise JavaBeans。Windowsでの開発に慣れている方はCOMコンポーネントに近いと思ってもらうとよいだろう)として実装されたコンポーネントが配置されており、このコンポーネントをWebサービスとして公開している。

 ここではWebLogic Serverの機能について詳しくは触れないので、興味のある方は、適宜別の記事を参照されたい。例えば、WebLogic ServerのWebサービス機能については、下記の記事の「Webサービスでの統合」が参考になる。

 また、EJBに関してより詳しく知りたい方は、下記の記事を参考にするとよいだろう。

HelloWorldサービス(サーバ側)の作成

 すでに述べたとおり、サーバ側では、デフォルトでインストールされるExamples ServerにWebサービスを構築する。このサーバは、TCPの7001番ポートを利用し、開発モード(特別なインストール作業なしでWebサービスを配置できるモード)で動作する。

 最初にサーバを起動しておく。具体的には[スタート]−[すべてのプログラム]−[BEA WebLogic Platform 7.0]−[BEA WebLogic Server 7.0]−[Server Tour Examples]−[Launch Examples Server]を実行する。起動にはしばらく時間がかかるが、起動時のコマンド・プロンプト・ウィンドウに以下のメッセージが出力されたら起動完了である。

<2003/xx/xx xx:xx:xx:JST> <Notice> <WebLogicServer> <000354> <スレッド "ListenThread.Default" はポート 7001 をリスンしています。>
<2003/xx/xx xx:xx:xx:JST> <Notice> <WebLogicServer> <000331> <ドメイン "examples" で WebLogic 管理サーバ "examplesServer" を開発用モードで起動しました。>
<2003/xx/xx xx:xx:xx:JST> <Notice> <WebLogicServer> <000365> <サーバ状態が RUNNING に変化しました。>
<2003/xx/xx xx:xx:xx:JST> <Notice> <WebLogicServer> <000360> <サーバが RUNNINGモードで起動しました。>

 次にWebサービスを実装するEJBをビルドするのだが、まずはEJBを構成する3つのインターフェイス/クラスを紹介しよう。なお、以下で紹介する今回のサンプル・プログラムは、次のリンクからダウンロードできる。

インターフェイス/クラス 内容
リモート・インターフェイス Webサービスのインターフェイスになる。今回の例ではHelloWorld.java
ホーム・インターフェイス HelloWorldHome.java
Beanクラス Webサービスの実装を提供するクラス。今回の例ではHelloWorldBean.java

 最初のリモート・インターフェイスは、次のようなもので、helloWorldというメソッドを呼び出すと、文字列を返すというサービスである。

package webservice.sample.HelloWorld;

import java.rmi.RemoteException;
import javax.ejb.EJBObject;

public interface HelloWorld extends EJBObject {
  public String helloWorld()
    throws RemoteException;
}
HelloWorld.java

 次にホーム・インターフェイスは、次のようになる。

package webservice.sample.HelloWorld;

import java.rmi.RemoteException;
import javax.ejb.CreateException;
import javax.ejb.EJBHome;

public interface HelloWorldHome extends EJBHome {
  public HelloWorld create()
    throws CreateException, RemoteException;
}
HelloWorldHome.java

 BeanクラスのhelloWorldメソッドの実装は、次のように単純に“!!! Hello World !!!”という文字列を返すものである。

public String helloWorld() {
  return "!!! Hello World !!!";
}
HelloWorldBean.java(メソッド部分)

 先ほど紹介した3つのインターフェイス・クラス・ファイルのほかに、3つのXMLファイルも含めて以下のパスに配置してほしい。ここでは「c:\work」以下に配置しているが、実際には「c:\work」以下のディレクトリ構造を維持する限りどこでも構わない。

パス ファイル
C:\work build.xml
ejb-jar.xml
weblogic-ejb-jar.xml
C:\work\webservice\sample\HelloWorld HelloWorld.java
HelloWorldBean.java
HelloWorldHome.java
作成したファイルの配置場所
ここではc:\workとしているが、実際には任意のディレクトリに配置できる。

 ここで1つ注意点がある。Build.xmlには、WebLogicのインストール・パスに依存する部分があるので、下記の「WL_HOME」の部分を%WL_HOME%(実際のパス)で書き換えてほしい。

<!-- WL_HOMEを環境に合わせた値に置き換えてください -->
<property file="WL_HOME/samples/server/src/examples.properties"/>

 ファイルの配置が完了したら、それらのファイルを使って、HelloWorldサービスをビルドする。

 これにはコマンド・プロンプトを起動し、%WL_HOME%\samples\server\config\examplesにあるsetExamplesEnv.cmdを実行する。こうやってビルドに必要な環境変数を設定した上で、カレント・ディレクトリをC:\work\webservice\sample\HelloWorldに移動し、antコマンドを実行してこのサービスをビルドする。

%WL_HOME%\samples\server\config\examples>setExamplesEnv.cmd
C:\work\webservice\sample\HelloWorld>ant

 antコマンドが終了して、最後に「BUILD SUCCESSFUL」と表示されていれば成功である。

 これでWebサービスの実装がビルドされ、WebLogic Serverのフォルダに配置されるので、自動的にWebサービスが利用可能になるはずである。利用可能になったかどうかは、Examples Server起動時のコマンド・プロンプト・ウィンドウで、サービスのアクティブ化完了のメッセージを確認してほしい。以下のようなメッセージが表示されていれば成功である。

<2003/xx/xx xx:xx:xx:JST> <Notice> <Application Poller> <149400> <Activating application: _appsdir_webservices_helloworld_ear>
<2003/xx/xx xx:xx:xx:JST> <Notice> <Application Poller> <149404> <examplesServer 上の アプリケーション _appsdir_webservices_helloworld_ear を アクティブ化 - 実行中です。>
<2003/xx/xx xx:xx:xx:JST> <Notice> <Application Poller> <149404> <examplesServer 上の アプリケーション _appsdir_webservices_helloworld_ear を アクティブ化 - 完了しました。>

クライアント側の作成

 以上でサーバの準備が整ったので、今度はExcelをWebサービス・クライアントとして利用し、作成したWebLogic Server上のサービスを呼び出してみよう。

 まず、Excelを起動し、[ツール]−[マクロ]−[Visual Basic Editor]を実行する。

 次に[ツール]−[Web Service Reference]を実行すると、以下のようなダイアログが表示される。

WebService References Tool 2.0ダイアログ
Office XP WSTの操作用ダイアログ。ここからWebサービスの検索やプロキシ・クラスの登録などが行える。

 この[Web Service References Tools 2.0]ダイアログから、Officeに追加インストールしたOffice XP WSTの各種設定を行える。

 ここで、[WebサービスURL]チェック・ボックスをオンにし、WebLogic Server上に配置したWebサービスのWSDLを指すURL(特にポート番号を変えていなければ、「http://localhost:7001/hellowebservice/HelloService?WSDL」)を指定する。続いて[検索]ボタンをクリックすると、サーバ側が参照され、次のようにWSDLの検索結果が表示される。

WSDLの検索結果
WSDLのURLを指定して[検索]ボタンをクリックすると、Webサービス・サーバへのアクセスが行われ、WSDLの検索結果が表示される。
  WSDLのURLを指定し、[検索]ボタンをクリックする。
  Webサービス・サーバが検索され、提供されているWebサービスの情報が表示される。

 見付かった「HelloService」にチェックを付け、[追加]をクリックする。

Webサービスを追加する
検索されたWebサービスから必要なサービスを選択し、プロキシ・クラスを生成する。
  見付かったWebサービスを選択する。
  このボタンをクリックすると、上で選択したWebサービス用のプロキシ・クラスが生成される。

 すると、Webサービスにアクセスするためのプロキシ・クラス(clsws_HelloService)が生成される。

生成されたプロキシ・クラス
生成されたプロキシ・クラスをVisual Basic Editorで表示したところ。

 ここで、生成されたプロキシ・クラスについて解説しておこう。プロキシ・クラスの名前は、サービス名に「clsws_」を付けたものとなる。また、生成されたプロキシ・クラスのClass_Initializeプロシージャには、次のようなコードが出力される。

Set sc_HelloService = New SoapClient30

sc_HelloService.MSSoapInit2 c_WSDL_URL, str_WSML, c_SERVICE, c_PORT, c_SERVICE_NAMESPACE
'ProxyServer を <CURRENT_USER> に設定し、Internet Explorer の LAN 設定で定義されている
'プロキシ サーバーを使用します。

sc_HelloService.ConnectorProperty("ProxyServer") = "<CURRENT_USER>"
'Internet Explorer が自動検出に設定されている場合、EnableAutoProxy を True に設定して、
'プロキシ設定を自動検出するようにします。
sc_HelloService.ConnectorProperty("EnableAutoProxy") = True

 SoapClient30というCOMコンポーネントを利用していることから、SOAP Toolkitを使っていることが分かるだろう。アクセス方法に関するプロパティの設定などを変える必要がある場合は、このプロシージャを変更するとよい。例えば、プロキシ・サーバをクライアントのInternet Explorerの設定によらず固定にしたければ、上記の"<CURRENT_USER>"を”proxy:8080”などと書き換える。詳しくはSOAP ToolkitのUser Guideを参照していただきたい。

 HelloWorldサービスのオペレーションはwsm_helloWorldメソッドにマッピングされる。つまり、Webサービスのオペレーション名に「wsm_」を追加したメソッドになる。

 プロキシ・クラスのメソッドをExcelのシート上から直接呼び出すことはできないので、[挿入]−[標準モジュール]をクリックし、Webサービスにアクセスする関数を作成する。

プロキシ・クラスのメソッドにアクセスする関数を作成する
Excelのシートから直接プロキシ・クラスのメソッドは呼び出せないので、これを呼び出すための関数を別途作成する。
 
Public Function HelloWorld() As String
  Dim wAnswer As New clsws_HelloService
  HelloWorld = wAnswer.wsm_helloWorld()
End Function
標準モジュールに記述するコード

 ここまでで準備は完了である。[ファイル]−[終了してMicrosoft Excelへ戻る]をクリックし、Visual Basic Editorを終了する。

サンプルの動作例

 Webサービスにアクセスする準備が整ったので、さっそく試してみよう。適当なセルに「=HelloWorld()」と入力し、数秒待っていただきたい。

 次の画面のように「!!! Hello World !!!」と表示できたらWebサービスへのアクセスは成功だ。

サンプル・プログラムの実行例
Excelを起動し、適当なセルに「=HelloWorld()」と入力すると、Webサービスが呼び出されて、その結果である文字列「!!! Hello World !!!」がセル内部に表示される。

 今回は、Webサービス・クライアントとしてのOfficeについて解説し、シンプルな例を取り上げてOfficeからWebLogic Server上のWebサービスにアクセスしてみた。

 次回は、営業支援を例に挙げて、より具体的な使い方を示していこうと思っている。End of Article


 INDEX
  新世代リッチ・クライアントの可能性を探る(前編)
    1.本稿の目的と想定する技術・環境
  2.簡単なサンプルの作成と実行
   
  新世代リッチ・クライアントの可能性を探る(後編)
     1.営業支援システムを作る
     2.営業支援システムの利用シナリオ(1)
     3.営業支援システムの利用シナリオ(2)
     4.サンプル実装の設計
 
 検証


Windows Server Insider フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Windows Server Insider 記事ランキング

本日 月間