Oracle Containers for J2EE Enterprise JavaBeans開発者ガイド 10g(10.1.3.1.0) B31852-03 |
|
この項の内容は次のとおりです。
詳細は、『Oracle Application Server Web Services開発者ガイド』を参照してください。
ステートレス・セッション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として実装できます。
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サービスを取得してそのメソッドを起動できます。
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サービスにアクセスできます。
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からそのメソッドを起動できます。
@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(...);
...
}
}
|
![]() Copyright © 2002, 2008 Oracle Corporation. All Rights Reserved. |
|