SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

Apache GeronimoでWebサービス/アプリケーションを稼動させる

J2EEに準拠したオープンソースのアプリケーションサーバーGeronimo


  • X ポスト
  • このエントリーをはてなブックマークに追加

サンプルアプリケーションの概要

 Geronimoにデプロイするサンプルアプリケーションについて紹介しましょう。サンプルアプリケーションは、WebサービスとWebアプリケーションで構成されます。サンプルを実際に動作させる場合には、記事上部のリンクから、Webサービスアプリケーションファイル「GeronimoWebService.war」とWebアプリケーションファイル「GeronimoWebApp.war」をダウンロードして、先に説明した方法でGeronimoへデプロイしてください。

 アプリケーションサーバ起動後に、「http://localhost:8080/GeronimoWebApp」にアクセスすればサンプルを動作させることができます。

Webサービスの説明

 まずWebサービスについて説明します。作成したWebサービスは引数として渡された文字列をメッセージに結合し、返す非常にシンプルなものです。

Webサービスクラスの作成

 今回はGeronimoに取り込まれているAxisを利用してWebサービスを稼動させることとします。AxisにWebサービスを配置するには、「jws」ファイルを作成する方法と[WSDD(WebServiceDeploymentDiscriptor)]を作成する方法がありますが、今回は「jws」ファイルでWebサービスを作成することにしました。「jws」ファイルの内容は通常のjavaファイルと変わりはありませんが、classファイルを作成する必要がなく、配置するだけで簡単にWebサービスを作成することができます。ただし難点としてパッケージの指定ができず、jwsファイルで作成したクラスのpublicメソッドは、すべてWebサービスとして公開されてしまいますので注意が必要です。サンプルコードを次に示します。

HelloGeronimo.jws
public class HelloGeronimo {

    public String hello( String name) {
    return "Hello "+ name ;
    }
}

 作成した「HelloGeronimo.jws」ファイルはWebアプリケーションのコンテクストルートに配置します。

WebサービスのPlanファイル

 GeronimoでWebサービスを利用するためには、Axisなどの依存関係にあるライブラリをロードしなければなりません。GeronimoではPlanファイルを利用して、ロードするモジュールを指定する方法が提供されています。Axisを利用するための「Geronimo-web.xml」を次に示します。

Axisを利用するための「geronimo-web.xml」の例
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://geronimo.apache.org/xml/ns/web"
         configId="GeronimoWebService">
    <dependency>
        <uri>axis/axis-1.4/356167/jar</uri>
    </dependency>
    <dependency>
        <uri>commons-discovery/commons-discovery/0.2/jar</uri>
    </dependency>
    <dependency>
        <uri>commons-logging/commons-logging/1.0.4/jar </uri>
    </dependency>
    <dependency>
        <uri>log4j/log4j/1.2.8/jar</uri>
    </dependency>
    <dependency>
        <uri>org.apache.geronimo.specs/geronimo-jaxrpc_1.1_spec/1.0/jar
        </uri>
    </dependency>
    <dependency>
        <uri>org.apache.geronimo.specs/geronimo-qname_1.1_spec/1.0/jar
        </uri>
    </dependency>
    <dependency>
        <uri>org.apache.geronimo.specs/geronimo-saaj_1.1_spec/1.0/jar
        </uri>
    </dependency>
    <dependency>
        <uri>wsdl4j/wsdl4j/1.5.2/jar</uri>
    </dependency>
</web-app>

 dependency要素のuriには、それぞれ読み込ませるライブラリのパスを記述しています。これらはすべてGeronimoに用意されているライブラリです。どのようなライブラリが用意されているかは[Geronimo Console]にログインし、[Services]から[Common Libraries]をクリックすることで参照することができます。

Webサービスのデプロイ

 アプリケーションをデプロイしたら、ブラウザを開きhttp://localhost:8080/GeronimoWebService/HelloGeronimo.jws?wsdlへアクセスして下さい。Webサービスの定義であるWSDLを参照することができます。

HelloGeronimoWebサービスのWSDL
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace=
  "http://localhost:8080/GeronimoWebService/HelloGeronimo.jws"
  xmlns:apachesoap="http://xml.apache.org/xml-soap"
  xmlns:impl=
    "http://localhost:8080/GeronimoWebService/HelloGeronimo.jws"
  xmlns:intf=
    "http://localhost:8080/GeronimoWebService/HelloGeronimo.jws"
  xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
  xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <wsdl:message name="helloRequest">
    <wsdl:part name="name" type="xsd:string"/>
  </wsdl:message>
  <wsdl:message name="helloResponse">
    <wsdl:part name="helloReturn" type="xsd:string"/>
  </wsdl:message>
  <wsdl:portType name="HelloGeronimo">
    <wsdl:operation name="hello" parameterOrder="name">
      <wsdl:input message="impl:helloRequest"
            name="helloRequest"/>
      <wsdl:output message="impl:helloResponse"
            name="helloResponse"/>
    </wsdl:operation>
  </wsdl:portType>
  <wsdl:binding name="HelloGeronimoSoapBinding"
        type="impl:HelloGeronimo">
    <wsdlsoap:binding style="rpc"
      transport="http://schemas.xmlsoap.org/soap/http"/>
    <wsdl:operation name="hello">
      <wsdlsoap:operation soapAction=""/>
      <wsdl:input name="helloRequest">
        <wsdlsoap:body encodingStyle=
          "http://schemas.xmlsoap.org/soap/encoding/"
          namespace="http://DefaultNamespace" use="encoded"/>
      </wsdl:input>
      <wsdl:output name="helloResponse">
        <wsdlsoap:body
          encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
          namespace=
          "http://localhost:8080/GeronimoWebService/HelloGeronimo.jws"
          use="encoded"/>
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>
  <wsdl:service name="HelloGeronimoService">
    <wsdl:port binding="impl:HelloGeronimoSoapBinding"
               name="HelloGeronimo">
      <wsdlsoap:address location=
        "http://localhost:8080/GeronimoWebService/HelloGeronimo.jws"/>
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>

Webアプリケーションの説明

 次にWebサービスを呼び出すWebアプリケーションについて説明します。Webアプリケーションは画面から入力されたメッセージを、Webサービスに加工して返してもらい、画面に表示します。フレームワークはStruts1.2.7を利用しています。Strutsについては、『@IT Strutsを使うWebアプリケーション構築』などの専門の記事を参照して下さい。

Webサービスクライアントの生成

 Webサービスを呼び出すためには複雑なコーディングが必要ですが、Axisの「WSDL2Java」ツールを使い、Webサービスへのスタブクラスを生成し、簡単なコーディングでWebサービスを利用できるようになります。「WSDL2Java」を利用するためのクラスパスを次に示します。

WSDL2Javaを利用するために必要なクラスパス
set GERONIMO_HOME=D:\apache\geronimo-1.0
set CLASSPATH=.
set CLASSPATH=%GERONIMO_HOME%\repository\axis
\jars\axis-1.4-356167.jar;%CLASSPATH%
set CLASSPATH=%GERONIMO_HOME%\repository\org.apache.geronimo.specs
\jars\geronimo-jaxrpc_1.1_spec-1.0.jar;%CLASSPATH%
set CLASSPATH=%GERONIMO_HOME%\repository\org.apache.geronimo.specs
\jars\geronimo-saaj_1.1_spec-1.0.jar;%CLASSPATH%
set CLASSPATH=%GERONIMO_HOME%\repository\org.apache.geronimo.specs
\jars\geronimo-qname_1.1_spec-1.0.jar;%CLASSPATH%
set CLASSPATH=%GERONIMO_HOME%\repository\log4j\jars
\log4j-1.2.8.jar;%CLASSPATH%
set CLASSPATH=%GERONIMO_HOME%\repository\commons-logging
\jars\commons-logging-1.0.4.jar;%CLASSPATH%
set CLASSPATH=%GERONIMO_HOME%\repository\commons-discovery
\jars\commons-discovery-0.2.jar;%CLASSPATH%
set CLASSPATH=%GERONIMO_HOME%\repository\wsdl4j
\jars\wsdl4j-1.5.2.jar;%CLASSPATH%

 Webサービスのスタブクラスを生成するための「WSDL2Java」コマンドです。

Webサービスへのスタブクラスを生成するコマンド
java org.apache.axis.wsdl.WSDL2Java
 http://localhost:8080/GeronimoWebService/HelloGeronimo.jws?wsdl
 -p to.msn.wings.webservice.client

 -pオプションでは「WSDL2Java」クラスによって生成されるクラスのpackage名を指定しています。オプションを指定しない場合はWSDLの「targetnamespace」に指定されているURLがパッケージとなります。 実行が成功すると[to\msn\wings\webservice\client]ディレクトリが作成され、次の4ファイルが生成されます。

WSDL2Javaコマンドで生成されたファイル
WSDL2Javaコマンドで生成されたファイル説明
HelloGeronimoService.javaServiceLocatorクラスのインターフェイス。
HelloGeronimoServiceLocator.javaServiceLocatorクラス。PortTypeを生成する。
HelloGeronimo_PortType.javaHelloGeronimoSoapBindingStubクラスのインターフェイス。
HelloGeronimoSoapBindingStub.javaServiceLocatorから取得するSoapBindingStubクラス。Webサービスのメソッドを実行する。

 生成されたクラスを利用したActionクラスの内容です。

「HelloAction.java」の抜粋
public class HelloAction extends Action {
    
    public ActionForward execute(ActionMapping mapping,
            ActionForm form, HttpServletRequest request,
            HttpServletResponse response)
            throws Exception {

        HelloForm hForm = (HelloForm)form;
        HelloGeronimoService service =
            new HelloGeronimoServiceLocator();
        HelloGeronimo_PortType port = service.getHelloGeronimo();
        String ret = port.hello(hForm.getName());
        hForm.setMessage(ret);

        return mapping.findForward("success");
    }
}

 先ほど「WSDL2Java」で生成したWebサービスのクライアントクラスを利用して、Webサービスを呼び出しています。画面で入力された名前を引数として、呼び出されたサービスの戻り値を画面に表示しています。

WebアプリケーションのPlanファイル

 Webアプリケーションの「Geronimo-web.xml」を次に示します。

Webアプリケーションの「geronimo-web.xml」の例
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://geronimo.apache.org/xml/ns/web"
         configId="GeronimoWebApp">
    <context-root>/GeronimoWebApp</context-root>
</web-app>

 configId属性にはGeronimoで一意に識別されるアプリケーションのID、context-root要素にはアプリケーションにアクセスする際のパスを記述します。

Webアプリケーションのデプロイ

 アプリケーションをGeronimoにデプロイしたら、「http://localhost:8080/GeronimoWebApp/」へアクセスして下さい。次のような画面が表示されればデプロイは成功です。

Webアプリケーション実行初期画面
Webアプリケーション実行初期画面

 メッセージを入力し、[メッセージ表示]ボタンを押下しましょう。Webサービスが呼び出され、加工されたメッセージが画面下部に表示されます。

Webアプリケーション実行結果画面
Webアプリケーション実行結果画面

最後に

 今回はGeronimoへのアプリケーションのデプロイと、Axisを利用する方法について説明しました。GeronimoはIBMがWebSphere Application Server Community Edition (WAS CE)に採用するなど話題も豊富です。今回はご紹介できませんでしたが、GeronimoにはActiveMQ、OpenEJB、ServiceMixなど様々なApacheのインキュベータープロジェクトも統合されています。今、最も進んだアプリケーションサーバを使ってみてはいかがでしょうか?

参考資料

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
特集記事連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 奥山 学(オクヤマ マナブ)

WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/302 2006/10/11 19:37

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング