ヘッダーをスキップ

Oracle Containers for J2EE Enterprise JavaBeans開発者ガイド
10g(10.1.3.1.0)

B31852-03
目次
目次
索引
索引

戻る 次へ

30 EJBおよびWebサービスの使用方法

この項の内容は次のとおりです。

詳細は、『Oracle Application Server Web Services開発者ガイド』を参照してください。

Webサービスとしてのステートレス・セッションBeanの公開

ステートレス・セッションBeanのクライアントは、Webサービス・クライアントである場合があります。Webサービス・クライアント・ビューを提供できるのは、ステートレス・セッションBeanのみです。WSDLドキュメントに記述されているように、Webサービス・クライアントは、Enterprise BeanのWebサービス・クライアント・ビューを利用します。Beanのクライアント・ビューWebサービス・エンドポイント・インタフェースは、JAX-RPCインタフェースです。

EJB 3.0を使用している場合は、アノテーションを使用して、ステートレス・セッションBeanをWebサービスとして簡単に公開できます(「アノテーションの使用方法」を参照)。

EJB 2.1を使用している場合も、ステートレス・セッションBeanをWebサービスとして公開できます(『Oracle Application Server Web Services開発者ガイド』の「EJBを使用したWebサービスのアセンブル」の章を参照)。

アノテーションの使用方法

@WebServiceおよび@WebMethodアノテーションを使用して、例30-1に示すようにWebサービス・エンドポイント・インタフェースを定義でき、例30-2に示すようにWebサービスをステートレス・セッションBeanとして実装できます。

例30-1    アノテーション付きWebサービス・エンドポイント・インタフェース

package oracle.ejb30.ws;

import javax.ejb.Remote;
import javax.jws.WebService;
import javax.jws.WebMethod;

@WebService
/**
* This is an Enterprise Java Bean Service Endpoint Interface
*/
public interface HelloServiceInf extends java.rmi.Remote {

    /**
    * @param phrase java.lang.String
    * @return java.lang.String
    * @throws String The exception description.
    */
    @WebMethod
    java.lang.String sayHello(java.lang.String name) throws java.rmi.RemoteException;
}

例30-2    ステートレス・セッションBeanとしてのWebサービスの実装

package oracle.ejb30.ws;

import java.rmi.RemoteException;
import java.util.Properties;
import javax.ejb.Stateless;

/**
* This is a session bean class
*/
@Stateless(name="HelloServiceEJB")
public class HelloServiceBean implements HelloServiceInf {

    public String sayHello(String name) {
        return("Hello "+name +" from first EJB3.0 Web Service");
    }
}

 

OC4Jでは、J2SE 5.0 Webサービス・アノテーション(Java Platform JSR-181仕様ではWebサービス・メタデータと呼ばれる)がサポートされます。仕様では、Webサービスをプログラミングするためのアノテーション付きJava構文が定義されています。

Oracle拡張を含むWebサービス・アノテーションの使用方法の詳細は、『Oracle Application Server Web Services開発者ガイド』の「注釈を使用したWebサービスのアセンブル」の章を参照してください。

その他のEJB Webサービスの例は、http://www.oracle.com/technology/tech/java/ejb30.htmlにあるステートレス・セッションEJB Webサービスの使用方法またはAdventure Builderの使用方法を参照してください。

Enterprise BeanからのWebサービスへのアクセス

Enterprise Beanから、Webサービスを取得してそのメソッドを起動できます。

EJB 3.0を使用している場合は、Webサービスの環境参照を作成しなくてもアノテーションおよびリソース・インジェクション(「アノテーションの使用方法」)を使用できます。

EJB 2.1を使用している場合は、初期コンテキストを使用する必要があります(「初期コンテキストの使用方法」を参照)。また、ルックアップする前にWebサービスの環境参照を作成する必要があります(「Webサービスへの環境参照の構成」を参照)。

詳細は、『Oracle Application Server Web Services開発者ガイド』の「J2EE Webサービス・クライアントのアセンブル」の章を参照してください。

アノテーションの使用方法

例30-3に示すWebサービスでは、例30-4に示すようにリソース・インジェクションを使用してEJB 3.0ステートレス・セッションBeanからWebサービスにアクセスできます。

例30-3    Webサービスのアノテーション付け

import javax.jws.WebService;
import javax.jws.WebMethod;

@WebService
public class StockQuoteProvider {

    @WebMethod
    public Float getLastTradePrice() {
        ...
    }
}

例30-4    リソース・インジェクションにより取得されたWebサービスのコール

@Stateless
public class InvestmentBean implements Investment {

    public void checkPortfolio(...) {
        ...
        @Resource StockQuoteProvider sqp;

        // Get a quote
        Float quotePrice = sqp.getLastTradePrice(...);
        ...
    }
}

 

初期コンテキストの使用方法

Webサービスへの環境参照を定義した後で(「Webサービスへの環境参照の構成」を参照)、例30-5に示すように初期コンテキストを使用してWebサービスをルックアップし、ステートレス・セッションBeanからそのメソッドを起動できます。

例30-5    初期コンテキストから取得されたWebサービスのコール

@Stateless 
public class InvestmentBean implements Investment {

    public void checkPortfolio(...) {
        ...
        // Obtain the default initial JNDI context
        Context initCtx = new InitialContext();
        // Look up the stock quote service in the environment
        com.example.StockQuoteService sqs = (com.example.StockQuoteService)initCtx.lookup(
            "java:comp/env/service/StockQuoteService");
        // Get the stub for the service endpoint
        com.example.StockQuoteProvider sqp = sqs.getStockQuoteProviderPort();
        // Get a quote
        float quotePrice = sqp.getLastTradePrice(...);
        ...
    }
}

戻る 次へ
Oracle
Copyright © 2002, 2008 Oracle Corporation.

All Rights Reserved.
目次
目次
索引
索引