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 サーバインスタンスを集中管理することができます。
これは、クラスタ構成にする場合や、複数サーバインスタンスを管理する場合に大変に有効な概念です。
ドメインを作成するのはウィザードに従うだけで簡単にできてしまいます。
まだ、ドメインを作成していない場合には、予めドメインの新規作成をしてください。
WebLogic サーバでは、Web サービスのコアとなる部分を ステートレスな EJB もしくは単純に Java クラスで記述することになります。
ここでは簡単の為に、Java クラスから Web サービスを作成してみましょう。
以下のようなクラスを用意してみます。
ちなみに、今回はこのプログラムを C:\usr\src\test というフォルダに保存しました。
package examples.webservices.javaclass; public final class HelloWorld { public String sayHello(String name) { System.out.println("\"sayHello\" is called."); return "Hello, " + name + "-san!"; } } |
次に、Ant タスクで一括して Web サービスをビルドしてしまいます。
下記が、今回使用した環境変数と Ant 用 build.xml です。
共に、Step 1.で作成した HelloWorld.java と同じフォルダに置いています。
若干、build.xml が長く感じられるかもしれませんが、一度書いてしまえばほとんどの部分を使いまわせるので再利用性が非常に高いと思います。
#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 |
<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:\Windows>cd \usr\src\test C:\usr\src\test> |
C:\usr\src\test>C:\bea\user_projects\mydomain\setEnv.cmd |
C:\usr\src\test>ant (以下、ビルド状況&結果が表示される) |
事前に作成しておいたドメインから、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