SOAフレームワークBeehiveに挑戦(1) 3/4

Beehiveでメタデータ(JSR 175/181)を体験しよう

www.netpotlet.com
原田洋子
2005/1/21

3つのサブプロジェクト

 現在、Apache Beehiveプロジェクトには次の3つのサブプロジェクトがあります。これらはいずれもJSR 175やJSR 181で定義されているメタデータ機能を活用しています。

  • Page Flowプロジェクト
  • Controlプロジェクト
  • Web Serviceプロジェクト

 Beehiveは1つの製品ではなく配下にあるこのサブプロジェクトの融合体です。現状ではJakarta Commonsプロジェクトのサブプロジェクトほど組織的な開発体制ではなく、どちらかというとTomcatのCatalina(サーブレットエンジン、および本体)、Coyote(コネクタ)、Jasper(JSPエンジン)に近い体制になっています。また、開発体制だけではなく、製品としても個別にダウンロードして使えるものにはなっていません。

NetUI PageFlowsプロジェクト

 StrutsベースのWebアプリケーションフレームワークを開発するプロジェクトです。JSR 175メタデータを使ってStrutsのコンフィグレーションファイルを自動生成します。

 Beehiveプロジェクトのサイトで公開されているチュートリアル

には、リスト1のようにBeehiveが解釈する注釈の@Jpf.Controller、@Jpf.Action(メンバfowardでも値に注釈の@Jpf.Forwardを使っている)を使ってコントローラを記述し、netuiのHTMLタグを使ってJSPを記述する例があります。付属のビルドファイルを使ってAntコマンドでデプロイすると、WEB-INF以下の.pageflow_struts-generatedディレクトリにコンフィグレーションファイルが自動生成されます。Beehiveには注釈を解釈するAntタスクも含まれています。

import org.apache.beehive.netui.pageflow.PageFlowController;
import org.apache.beehive.netui.pageflow.Forward;
import org.apache.beehive.netui.pageflow.annotations.Jpf;
 
@Jpf.Controller
public class Controller extends PageFlowController
{
    @Jpf.Action(
        forwards={
            @Jpf.Forward(name="success", path="index.jsp")
        }
    )
    protected Forward begin()
    {
        return new Forward("success");
    }
}
リスト1 ページフローのコントローラ:Contoller.jpf

<%@ page language="java"
    contentType="text/html;charset=UTF-8"%>
<%@ taglib uri="http://beehive.apache.org/netui/tags-html-1.0"
    prefix="netui"%>
<netui:html>
  <head>
    <title>index.jsp</title>
    <netui:base/>
  </head>
  <netui:body>
    <p>
      index.jsp
    </p>
  </netui:body>
</netui:html>
リスト2 ページフローのサンプルJSP:index.jsp


Controlsプロジェクト

 軽量コンポーネントフレームワークのためのプロジェクトで、コンポーネントは注釈を使って記述されます。J2EEの世界にはEJBやデータベース、ストリームといったさまざまなリソースがありますが、アクセスするには各リソースに合わせた方法で参照するのが一般的です。このプロジェクトは注釈をうまく利用することでどのようなリソースでも、同様のプログラミングでアクセスできるようにすることを目標にしています。

 1つのコントロールはインターフェイスと実装の2つで構成されますが、チュートリアル

によると、リスト3のインターフェイスとリスト4の実装を用意し、JSPをリスト5のように記述します。リスト3では@ControlInterface、リスト4では@ControlImplementationという注釈を使っています。インターフェイスと実装からJavaBeansが作られますが、コードはWEB-INF/.tmpbeansrc以下に生成されます。

package hellocontrol; 

import org.apache.beehive.controls.api.bean.ControlInterface;

@ControlInterface
public interface Hello

    public String hello();

    public String helloParam( String name );
}
リスト3 コントロールのサンプルインターフェイス:Hello.java

package hellocontrol; 

import org.apache.beehive.controls.api.bean.*;

@ControlImplementation
public class HelloImpl implements Hello

    public String hello()
    {
        return "Hello, World!";
    }

    public String helloParam( String name )
    {
        return "Hello, " + name + "!";
    }
}
リスト4 コントロールのサンプル実装:HelloImpl.jcs

<%@ page language="java" contentType="text/html;charset=UTF-8"%>
<%@ taglib uri="http://beehive.apache.org/netui/tags-html-1.0"
    prefix="netui"%>
<netui:html>
  <head>
    <title>Control Tutorial Test Page</title>
  </head>
  <netui:body>
    <jsp:useBean class="hellocontrol.HelloBean" id="helloBean"
                 scope="session"/>
    <h3>Control Tutorial Test Page</h3>
    <p>
        Response from the hello() method on the Hello Control:
        <strong> <%= helloBean.hello() %> </strong>
    </p>
    <p>
        Response from the helloParam() method on the Hello Control:
        <strong> <%= helloBean.helloParam("Moon") %> </strong>
    </p>
  </netui:body>
</netui:html>
リスト5 コントロールのサンプルJSP:hello.jsp


Web Servicesプロジェクト

 JSR 181の実装を開発するプロジェクトです。JSR 181を利用して簡単にWebサービスを作れるようにすることが目的です。

 ここでも、どのようにするのかをチュートリアル

で調べてみましょう。例えばリスト6のように記述し、付属のビルドファイルを使ってAntコマンドでデプロイすると、注釈が解釈されWebサービスに必要なファイルが生成されます。ブラウザから

http://localhost:8080/ws_tutorial/template/Blank.jws?
method=sayHello&greetee=Moon

は表示の都合で改行していることを表します

のようにリクエストするとリスト7のSOAPレスポンスが返ってきます。

package template;
...
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.WebParam;

@WebService
public class Blank
{
    @WebMethod
    public String sayHelloWorld()
    {        
        return "Hello world!";
    }
    
    @WebMethod
    public String sayHello( @WebParam String greetee ) 
    {
        if( greetee.equals("") )
            { greetee = "World"; }
    
        return "Hello, " + greetee + "!";
    }
}
リスト6 Webサービスのサンプルテンプレート:Blank.jws

<soapenv:Envelope>
  <soapenv:Body>
    <sayHelloResponse>
      <ns1:result>Hello, Moon!</ns1:result>
    </sayHelloResponse>
  </soapenv:Body>
</soapenv:Envelope>
リスト7 Blank.jwsのSOAPレスポンス

次ページへ続く)

3/4

 Index
SOAフレームワークBeehiveに挑戦(1)
Beehiveでメタデータ(JSR 175/181)を
体験しよう
  Page 1
・Apache Beehiveの生い立ち
・Apache BeehiveはSOAなのか
・SOAが目指してきたもの
  Page 2
・Apache Beehiveに適用されている仕様
Page 3
・3つのサブプロジェクト
  Page 4
・Apache Beehiveを動かしてみよう
・まとめ


「SOAフレームワークBeehiveに挑戦」


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

注目のテーマ

HTML5+UX 記事ランキング

本日月間