BEA WebLogic ServerTM 7.0 での Web サービス開発

 WebLogic サーバで Web サービスを提供するのは非常に簡単です。
以下のステップを踏むだけで、ほとんどの作業は WebLogic の提供する Ant タスクにより自動化されています。

Step 1. Web サービスで提供したい機能を Java クラスまたはステートレスな EJB (ステートレスセッションEJB, メッセージ駆動型EJB) で実装する。
Step 2. Ant タスクにより Step 1. で作成した Java クラス (または EJB) を元に Web サービスをビルドする。
Step 3. 動作確認


今回使用した環境


入手方法

4/30 現在、WebLogic Server 7.0 の米国リリース版が以下のサイトでダウンロード可能です。
現時点では、WLS本体以外にWeb サービスを利用する為に別途モジュール(『JAX-RPC (x.x) Upgrade』)もダウンロードする必要があります。このモジュールは同ダウンロードサイトから入手でき(webservices700.zip)、解凍後 C:\bea\weblogic700\server\lib フォルダに jar ファイルをコピーするだけです。
尚、本リリース版には Workshop は含まれていません。

http://commerce.bea.com/downloads/weblogic_server.jsp


インストール

ダウンロードした実行モジュール (weblogic700_win.exe) をダブルクリックして、インストールウィザードを起動します。後はウィザードに対して必要な情報を答えていくだけで、インストールは完了します。

今回は、特に入力を要求される箇所(サーバ管理者のIDとパスワード等)以外は、全てデフォルト設定のままインストールすることにします。
インストールウィザードを進めていくと最初の方に出てくる "Choose BEA Home Directory" というインストール先の設定箇所は "C:\bea" を選択してください。この値はデフォルトですが、先に Workshop をインストールしていたりすると違うディレクトリが選択されている可能性があるのでご注意ください。
以下、WebLogic Server 7.0 を C:\bea ディレクトリ以下にインストールしたものとして説明を進めていきます。


ドメインの作成

 インストール直後の状態で、WebLogic Server を起動するには、まずドメインを作成します。
WebLogic Server では、ドメインというエリアの中で、で1つ以上のWebLogic サーバインスタンスを集中管理することができます。
これは、クラスタ構成にする場合や、複数サーバインスタンスを管理する場合に大変に有効な概念です。
ドメインを作成するのはウィザードに従うだけで簡単にできてしまいます。
まだ、ドメインを作成していない場合には、予めドメインの新規作成をしてください。



デモプログラム作成

Step 1. メイン部作成

 WebLogic サーバでは、Web サービスのコアとなる部分を ステートレスな EJB もしくは単純に Java クラスで記述することになります。
 ここでは簡単の為に、Java クラスから Web サービスを作成してみましょう。
以下のようなクラスを用意してみます。
ちなみに、今回はこのプログラムを C:\usr\src\test というフォルダに保存しました。

HelloWorld.java
package examples.webservices.javaclass;

public final class HelloWorld
{
  public String sayHello(String name)
  {
    System.out.println("\"sayHello\" is called.");
    return "Hello, " + name + "-san!";
  }
}



Step 2. ビルド&デプロイ

 次に、Ant タスクで一括して Web サービスをビルドしてしまいます。
下記が、今回使用した環境変数と Ant 用 build.xml です。
共に、Step 1.で作成した HelloWorld.java と同じフォルダに置いています。
 若干、build.xml が長く感じられるかもしれませんが、一度書いてしまえばほとんどの部分を使いまわせるので再利用性が非常に高いと思います。

環境変数 examples.properties
#choose classic, modern, jikes, or jvc
JAVAC=modern
BEA_HOME=C:/bea_wls700
WL_HOME=C:/bea_wls700/weblogic700
APPLICATIONS=C:/bea_wls700/user_projects/mydomain/applications
CLASSPATH=${java.class.path}
PORT=7001

build.xml
<project name="webservices-javaclass" default="all" basedir=".">

  <!-- set global properties for this build -->
  <property environment="env"/>
  <property file="./examples.properties"/>
  <property name="build.compiler" value="${JAVAC}"/>
  <property name="source" value="."/>
  <property name="build" value="${source}/build"/>
  <property name="war_file" value="javaclass.war" />
  <property name="ear_file" value="ws_javaclass.ear" />
  <property name="client_jar_file" value="ws_javaclass_client.jar"/>
  <property name="namespace"
            value="http://localhost:7001/javaclass"/>

  <target name="all" depends="clean, compile, ear"/>

  <!-- check the presense of webservices.jar file -->
  <target name="check" depends="checkjar" unless="webservices.jar.present">
    <fail>
      webservices.jar file was not found.  Download it from BEA web site
      and place it in WL_HOME/server/lib directory.
    </fail>
  </target>
  <target name="checkjar">  
    <available file="${WL_HOME}/server/lib/webservices.jar" property="webservices.jar.present"/>
  </target>
  
  <target name="clean">
    <delete dir="${build}"/>
    <delete file="${APPLICATIONS}/${ear_file}"/>
  </target>

  <!-- compile the HelloWorld class to the ${build} directory where the service
       generator will look for it when it builds the webservice -->
  <target name="compile" depends="check">
    <mkdir dir="${build}"/>
    <javac srcdir="${source}" destdir="${build}" includes="HelloWorld.java"/>
  </target>

  <!-- call the servicegen element within the ear task to generate and build
       the ear into the ${APPLICATIONS} directory.  It will be automatically
       deployed from there -->
  <target name="ear" depends="check">
    <servicegen
       destEar="${APPLICATIONS}/${ear_file}"
       warName="${war_file}">
       <service
         javaClassComponents="examples.webservices.javaclass.HelloWorld"
         targetNamespace="${namespace}"
         serviceName="HelloWorld"
         serviceURI="/HelloWorld"
         generateTypes="True"
         expandMethods="True">
         <client
           packageName="examples.webservices.javaclass"
           clientJarName="${client_jar_file}"
         />
       </service>
      <classpath>
        <pathelement path="${build}"/>
        <pathelement path="${java.class.path}"/>
      </classpath>
     </servicegen>
  </target>

</project>


 では、コマンドプロンプトを開いて上記のファイルを保存したフォルダに移動しましょう。
ここでは、プログラムと同じく c:\usr\src\test にファイルを保存したとします。
C:\Windows>cd \usr\src\test
C:\usr\src\test>

次に Ant が使えるように環境設定をおこないます。 簡単の為に、インストールした WebLogic サーバの起動時に使用される環境設定用コマンド (setEnv.cmd) を利用し てみましょう。
C:\usr\src\test>C:\bea\user_projects\mydomain\setEnv.cmd

これで Ant が使える状態になったので、ビルドしてみます。
C:\usr\src\test>ant
(以下、ビルド状況&結果が表示される)

いかがでしょうか? 最後に BUILD SUCCESSFUL" と表示されれば成功です。
不運にも "BUILD FAILED" と出てしまった場合には画面出力を参考に修正して再度ビルドしてみてください。

(注意) 4/30現在の WebLogic Server 7.0 US版では、Web サービスを生成する為に別途モジュールをダウンロードする必要があります。
WebLogic サーバをダウンロードしたサイトと同じところから『JAX-RPC (x.x) Upgrade』を選択し、ダウンロードした zip ファイルを解凍後 C:\bea\weblogic700\server\lib フォルダに jar ファイルを置きます。


Step 3. 動作確認

事前に作成しておいたドメインから、WebLogicサーバを起動します。
スタートメニューに登録した場合はそこから、そうでない場合には

  C:\bea\user_projects\mydomain\startWebLogic.cmd

を起動します。

 Step 2. で ant を実行したことにより、自動的にデプロイまで完了しているので、すでに Web サービスは起動していることになります。
また、WebLogic サーバでは、各 Web サービス毎に専用サイトが用意されることになっています。
そのサイトでは、WSDL の確認や Web サービスの動作テストを行う為のフォーム、クライアントを作成する際のコード記述例等がありますので、有効に活用してください。

では、ブラウザを立ち上げ、今ほど作った Web サービスの動作テストを行ってみましょう。
以下のURLにアクセスします。

  http://localhost:7001/javaclass/HelloWorld


Web サービスに関する情報ページができています。(上図)
実際に実行テストをしてみます。
"sayHello"というリンクをクリックしてください。すると、下に示すようなページになり、テスト準備が整います。


実行してみると (名前を入力して Invoke ボタンを押してみると) 以下のように結果が表示され、作成した Web サービスが正しく実行されたことがわかります。



まとめ

最後になってしまいましたが、WebLogic Server での Web サービスのアーキテクチャ概要を見ていきます。
WebLogic Server 7.0 では、下図に示すように、大きく同期型サービスと非同期型サービスの2種類の Web サービスを実装でき、同期型の場合にはバックエンドのコンポーネント(実際に処理をする部分)として、Java クラスまたは ステートレス セッション EJBを選択することが可能です。
EJBが既に存在している場合には、Ant タスクを通すだけ (もしくは ステートレスEJBでラッピングするだけ) で Web サービスを起こせるのも魅力の一つです。


更に、上述のアーキテクチャをブレイクダウンして、より詳細に示したものが下図となります。
バックエンドのコンポーネントに処理が行くまでの間に、SOAP メッセージのハンドラと、XML - Java 間の変換を行うシリアライザ/デシリアライザが存在します。
ハンドラによって、ユーザは自由に SOAP メッセージに変更を加えたり、任意のセキュリティをここでかけたりすることが可能となります。



コンソールベースでも、簡単に Web サービスの作成&テストができることを実感いただけましたでしょうか?
本デモプログラムでは、独自の型 (ユーザ定義型) を導入したり、直接 SOAP メッセージに介入してメッセージの変更などをしませんでしたが、WebLogic Server 7.0 では独自の型を導入したり SOAP メッセージへの介入も自由に行えます。
ご興味が沸けば、是非そちらの方もお試しください。
弊社では完全なマニュアルをオンラインで、どなたにでも提供しておりますので、合わせてご利用ください。
 日本のサイト: http://edocs.beasys.co.jp/e-docs/index.html
 米国のサイト: http://edocs.bea.com/index.html


もどる
Copyright © XMLコンソーシアム 2002 All rights reserved.
Copyright © BEA Systems, Inc. All rights reserved.