![]() ![]() ![]() ![]() |
この章では、データ サービスを業界標準 Web サービスとして公開する方法と、その Web サービスを介してデータ サービスを呼び出すクライアント アプリケーションの作成方法について説明します。
ALDSP ネイティブな Web サービス機能を使用して、web サービスにデータ サービスを直接マップすることができます。 クライアント アプリケーションは、Data Services Mediator API により web サービスを使用してデータにアクセスします。
ヒント : | Java クライアントからのデータ サービスの呼び出しでは、Mediator API について詳しく説明します。web サービス対応アプリケーションを開発する前に、その章を参照してください。 |
データ サービスを Web サービスとして公開すると、他の Java Web サービス クライアント、Microsoft ADO.NET およびその他の非 Java アプリケーション、その他の Web サービスなど、さまざまなクライアントから情報資産にアクセスできます。図 4-1 は、クライアント アプリケーション開発者がデータ サービスと Web サービスの統合に使用できるさまざまな方法について示しています。Web サービス WSDL 処理は、サーバ上のデータ サービス処理に直接マップします。
ヒント : | データ サービス処理 (読み取り、作成、更新、削除、libraryFunction および libraryProcedure) の作成の詳細については、『データ サービス開発者ガイド』を参照してください。 |
この章は、web サービスによるデータ サービスを呼び出すクライアント アプリケーションを書く Java 開発者向けです。
ヒント : | web services の詳細については、e-docs の WebLogic Server ドキュメントの「WebLogic Web サービス入門」を参照してください。このドキュメントは、web サービスおよびWebLogic サーバに対して web サービスを開発するための詳細情報を提供します。 |
この節では、データ サービスと対話する Java クライアント アプリケーションを書くための基本的な手順を示します。
Web サービスを使用してデータ サービスを呼び出す Java クライアントを開発する場合の基本的な手順は以下のとおりです。
ヒント : | ほとんどのユースケースに対しては一般的に静的 Mediator API が推奨されます。静的 Mediator API は型セーフで一般的に動的 Mediator API よりも簡単に使用できます。 |
CLASSPATH の設定は、静的または動的 MediatorAPI のどちらを使用するかによって異なります。
静的 Java Mediator API クライアント CLASSPATH
静的 Mediator API を使用する場合は、Java アプリケーションの CLASSPATH に次の JAR が含まれていることが必要です。
注意 : | 静的 Mediator API を使用する場合のみ、この最初の入力が必要です。この入力は以下にリストされている入力に優先する必要があります。Web サービス Mediator クライアント JAR の生成手順については、『データ サービス開発者ガイド』を参照してください。通常は、このファイルはデータ サービス開発者によって生成されます。 |
動的 Java Mediator API クライアント CLASSPATH
静的 Mediator API を使用する場合は、Java アプリケーション の CLASSPATH に次の JAR が含まれている必要があります。
始める方法については、この章では提供されたサンプル アプリケーション コードを実行します。静的および動的 Mediator API を使用するサンプルは含まれています。サンプルでは、データの取得、変更および更新のような簡単で一般的なユースケースを示します。詳細については、「静的 Mediator アプリケーションのサンプル」および「動的 Mediator アプリケーションのサンプル」を参照してください。
この節では、コピー、コンパイルおよび実行できる簡単な Java プログラムが提供されます。プログラムは次の基本的なタスクを行うために WSDL オペレーションを呼び出すには静的 Mediator API を使用します: 基本的なタスクは、クライアントの認証、サーバでデータの取得、変更および更新することです。静的 Mediator API の概要については、「動的および静的 Mediator API」を参照してください。
ここで示すサンプル アプリケーションは、サンプル データ サービスで作業するために設計されています。操作を続ける前に、このデータ サービスを作成してサーバをコンフィグレーションする必要があります。このサンプル アプリケーションが必要とするデータ サービスの作成の詳細については、「サンプル データ サービスの設定」を参照してください。
上記の例を実行するために、Web サービス マップ ファイルを生成する必要があります。これは、Data Services Studio を使用して簡単に行うことができます。詳細については、『データ サービス開発者ガイド』を参照してください。
Data Services Studio を使用してファイルを作成するには、以下の手順に従います。
ヒント : | Data Services Studio、ALDSP コンソール、または Ant スクリプトを使用して Web サービス マップ ファイルを生成することができます。これらのメソッドの詳細については、『データ サービス開発者ガイド』を参照してください。 |
この章でリストされたサンプル Java アプリケーションを実行する前に、Web サービス Mediator クライアント JAR ファイルを生成する必要があります。この JAR に存在するクラスは「WSDL オペレーション」を呼び出すタイプセーフ メソッドを含めます。
ヒント : | Data Services Studio、ALDSP コンソール、または Ant スクリプトを使用して Web サービス Mediator クライアント JAR ファイルを生成することができます。これらのメソッドの詳細については、『データ サービス開発者ガイド』を参照してください。この例の場合、Data Services Studio を使用します。 |
Data Services Studio を使用して Web サービス Mediator クライアント JAR ファイルを生成するには、以下の手順に従います。
ヒント : | JAR ファイルで生成したクラス名は、「生成されたクラスの命名規約」に説明された命名規約の通りにある必要があります。 |
コード リスト 4-1 に WSDL オペレーションを呼び出すために静的 Mediator API を使用するサンプル Java クライアントを表示します。このアプリケーションはデータ ストアから DataObject を取得します。さらに、オブジェクトを変更してデータストアに返します。この例では、Data Services Studio を使用することを前提としています。ただし、必要に応じて IDE またはビルド環境を使用することも可能です。この例の場合は、「MediatorWSClient」という Java プロジェクトを設定します。
注意 : | CLASSPATH に含まれている必要のあるインポートされたクラス PhysicalCUSTOMERDAS および PhysicalCUSTOMER は、Web サービス Mediator クライアント JAR ファイルから取得されます。 |
package com.bea.ws.sample;
import das.ws.ld.PhysicalCUSTOMERDAS;
import physicaldss.physicalcustomer.PhysicalCUSTOMER;
import com.bea.dsp.das.DASResult;
import com.bea.dsp.sdo.SDOUtil;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
public class StaticWSSampleApp {
public static void main(String[] args) throws Exception {
// メディエータの InitialContext を作成します。
Hashtable<String, String> hash = new Hashtable<String, String>();
hash.put(Context.INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory");
hash.put(Context.SECURITY_PRINCIPAL,"weblogic");
hash.put(Context.SECURITY_CREDENTIALS,"weblogic");
Context ctx = new InitialContext(hash);
String wsdlURL = "http://localhost:7001/MediatorTest/PhysicalCUSTOMER.ws?WSDL";
// Context およびデータスペース名で DataAccessService ハンドルを作成します。
PhysicalCUSTOMERDAS das = PhysicalCUSTOMERDAS.getInstance(ctx, wsdlURL);
// 基本の「すべての顧客を取得する」関数をよびだします。
DASResult<PhysicalCUSTOMER> result = das.PhysicalCUSTOMER();
// 最初の PhysicalCUSTOMER DataObject を取得します。
PhysicalCUSTOMER customer = result.next();
// 結果を反復する場合、常に dispose() を呼び出します。
result.dispose();
//その PhysicalCUSTOMER に対して変更追跡を有効にします。
SDOUtil.enableChanges(customer);
// 顧客を変更します。
customer.setFIRST_NAME("StaticWSMediator");
customer.setEMAIL_ADDRESS("staticwsmediator@example.com");
// 変更を DSP に返します。 - 更新関数は
// PhysicalCUSTOMER の配列を取ります
das.updatePhysicalCUSTOMER(new PhysicalCUSTOMER[] { customer });
}
}
アプリケーションをテストするには、サーバを起動して Java アプリケーションとしてJava クライアントを実行します。常に、Data Services Studio で Java ファイルを右クリックして、[実行|Java アプリケーション] を選択します。
Java クライアントが実行されることを確認するには、データ サービスを再テストします。
この節では、コード リスト 4-1 で示した Java のサンプルの部分について説明します。この節では、サンプル コードの以下のコンポーネントを検査します。
最初の 2 つのインポートされたクラスは、生成された Web サービス Mediator クライアント JAR ファイルから取得されます。
PhysicalCUSTOMERDAS クラスは、生成されている DataAccessService クラスです。このクラスは、WSDL オペレーションを呼び出すための Java メソッドを含みます。メソッド名はそれらに対応する WSDL オペレーションと同じです。このクラスは、実際の WSDL オペレーションにマップするタイプセーフ メソッドを含めています。PhysicalCUSTOMER クラスは、データ サービスから返された DataObjects を操作するために SDO インタフェースを提供します。
import das.ws.PhysicalCUSTOMERDAS;
import physicaldss.physicalcustomer.PhysicalCUSTOMER;
import com.bea.dsp.das.DASResult;
import com.bea.dsp.sdo.SDOUtil;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
DataAccessService オブジェクトによって、データ サービスでメソッドを呼び出すことはできます。このクラスの詳細については、Javadoc を参照してください。静的 Mediator API に対して、DataAccessService (DAS) クラスでは、ハンドルを返すために「getInstance()」と言うファクトリ メソッドがあります。
getInstance() メソッドは、ハンドルを返すには以下の 2 つのパラメータを必要とします。
Hashtable<String, String> hash = new Hashtable<String, String>();
hash.put(Context.INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory");
hash.put(Context.SECURITY_PRINCIPAL,"weblogic");
hash.put(Context.SECURITY_CREDENTIALS,"weblogic");
Context ctx = new InitialContext(hash);
String wsdlURL = "http://localhost:7001/MediatorTest/PhysicalCUSTOMER.ws?WSDL";
// Context およびデータスペース名で DataAccessService ハンドルを作成します。
PhysicalCUSTOMERDAS das = PhysicalCUSTOMERDAS.getInstance(ctx, wsdlURL);
注意 : | 静的および動的 Mediator API の両方もファイルか WSDL URL かのどちらかを受け取ります。次に例を示します。 |
注意 : | file:///C:/RTLApp/DataServices/RTLServices/Customer.wsdl |
注意 : | Customer.wsdl は、ローカル ハード ドライブで格納されている WSDL ファイルです。 |
生成された DataAccessService メソッドの PhysicalCUSTOMER() は データ サービスから結果セットを取得します。このメソッドは データ サービスからすべての顧客のオブジェクトを返します。戻り値型は、反復子と同じ作業する DASResult オブジェクトです。戻り値型の詳細については、「DASResult について」を参照してください。
DASResult<PhysicalCUSTOMER> result = das.PhysicalCUSTOMER();
DASResult.next() メソッドは Java メソッドの Iterator.next() と同じように作業します。これは、SDO DataObject である次の PhysicalCUSTOMER を返します。SDO は、データへのアクセスやデータの更新に使用する、Java ベースのデータ プログラミング モデル (API) およびアーキテクチャです。SDO の詳細については、『ALDSP コンセプト ガイド』の「サービス データ オブジェクト (SDO) の使用 」を参照してください。
PhysicalCUSTOMER customer = result.next();
結果オブジェクトを通じて反復を終了した後で、DASResult.dispose() を呼び出すことは必要です。dispose() の詳細については、「DASResult オブジェクトの削除」を参照してください。
result.dispose();
DataObject を取得した後で変更することができます。ただし、変更された内容を ALDSP サーバに戻す場合は、変更をする前に DataObject で変更追跡を有効にする必要があります。SDOUtil.enableChanges() メソッドによって、単一の DataObject または DataObject の配列に対して変更追跡を有効にすることができます。メソッドの詳細については、「データ オブジェクトの取り扱い」を参照してください。顧客のオブジェクトで変更追跡を有効にした後で、顧客のオブジェクトでの特定の値を変更するために生成されたセッターが呼び出されます。
ヒント : | ゲッターおよびセッターは Mediator API ではなく SDO API の一部です。SDO の詳細については、「データ プログラム モデルと更新のフレームワーク」を参照してください。 |
SDOUtil.enableChanges(customer);
customer.setFIRST_NAME("StaticWSMediator");
customer.setEMAIL_ADDRESS("staticwsmediator@example.com");
最後に、生成された DataAccessService.updatePhysicalCUSTOMER() のメソッドが次のように単一のパラメータ付きで呼び出される。 PhysicalCUSTOMER オブジェクトの配列メソッドは、該当するデータ サービス関数を呼び出し、データの新しく変更された行でデータベースを更新する。
das.updatePhysicalCUSTOMER(new PhysicalCUSTOMER[] { customer });
この節では、コピー、コンパイルおよび実行できる簡単な例を示します。この例は次の基本的なタスクを行うために動的 Mediator API を使用します。基本的なタスクは、 クライアントの認証、サーバでデータの取得、変更および更新することです。
このサンプル コードを実行するには、「静的 Mediator アプリケーションのサンプル」を参照してください。サンプル データ サービスを作成する、CLASSPATH の設定およびプログラムの実行のための手順は、静的 Mediator サプルと同じです。しかし、動的 Mediator API を使用する時、Web サービス Mediator クライアント JAR ファイルを生成または参照する必要はありません。
package com.bea.ws.sample;
import com.bea.dsp.das.DataAccessServiceFactory;
import com.bea.dsp.das.DataAccessService;
import com.bea.dsp.das.DASResult;
import com.bea.dsp.sdo.SDOUtil;
import commonj.sdo.DataObject;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
public class DynamicWSSampleApp {
public static void main(String[] args) throws Exception {
// メディエータ用の InitialContext を作成します。
Hashtable<String, String> hash = new Hashtable<String, String>();
hash.put(Context.INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory");
hash.put(Context.SECURITY_PRINCIPAL,"weblogic");
hash.put(Context.SECURITY_CREDENTIALS,"weblogic");
Context ctx = new InitialContext(hash);
String wsdlURL = "http://localhost:7001/MediatorTest/PhysicalCUSTOMER.ws?WSDL";
//Context およびデータスペース名、およびデータ サービス URI で
// DataAccessService ハンドルを作成します。
DataAccessService das = DataAccessServiceFactory.newDataAccessService
(ctx, wsdlURL);
//引数なしの基本の「すべての顧客を取得する」
// 関数を呼び出します。
DASResult<Object> result = das.invoke("PhysicalCUSTOMER", new Object[0]);
// 最初の PhysicalCUSTOMER DataObject を取得します。
DataObject customer = (DataObject) result.next();
// 結果を通じて反復し終えた場合、常に dispose() を呼び出します。
result.dispose();
// その PhysicalCUSTOMER に対して変更追跡を有効にします。
SDOUtil.enableChanges(customer);
// 顧客を変更します。
customer.set("FIRST_NAME", "DynamicWSMediator");
customer.set("EMAIL_ADDRESS", "dynamicwsmediator@bea.com");
das.invoke("updatePhysicalCUSTOMER", new Object[] { customer });
result.dispose();
}
}
この節では、コード リスト 4-2 に示した Java サンプルの部分について説明します。この節で、サンプル コードの以下のコンポーネントを検査します。
サンプルはこれらのクラスを必要とします。クラスの詳細については、e-docs の Javadoc を参照してください。
import com.bea.dsp.das.DataAccessServiceFactory;
import com.bea.dsp.das.DataAccessService;
import com.bea.dsp.das.DASResult;
import com.bea.dsp.sdo.SDOUtil;
import commonj.sdo.DataObject;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
DataAccessService オブジェクトによって、データ サービスでのメソッドを呼び出し、変更を送信することができます。 DataAccessServiceFactory は、ハンドルを返すために以下の 2 つのパラメータを必要とします。
Hashtable<String, String> hash = new Hashtable<String, String>();
hash.put(Context.INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory");
hash.put(Context.SECURITY_PRINCIPAL,"weblogic");
hash.put(Context.SECURITY_CREDENTIALS,"weblogic");
Context ctx = new InitialContext(hash);
String wsdlURL = "http://localhost:7001/MediatorTest/PhysicalCUSTOMER.ws?WSDL";
// Context 、データスペース名、およびデータ サービス URI で DataAccessService
// ハンドルを作成します。
DataAccessService das = DataAccessServiceFactory.newDataAccessService
(ctx, wsdlURL);
注意 : | 静的および動的 Mediator API の両方のファイルか WSDL URL かのどちらかを受け入れます。次に例を示します。 |
注意 : | file:///C:/RTLApp/DataServices/RTLServices/Customer.wsdl |
注意 : | Customer.wsdl は、ローカル ハード ドライブに格納されている WSDL ファイルです。 |
この例では、invoke() のメソッドは WSDL オペレーションの PhysicalCUSTOMER を呼び出します。このメソッドは データ サービスからすべての顧客のオブジェクトを返します。メソッドは、反復子と同じ作業する DASResult オブジェクトを返します。戻り値型の詳細については、「DASResult について」を参照してください。注意: PhysicalCUSTOMER のオプレショーンは「引数なし」です。この署名は、WSDL オプレショーンを呼び出すデータ サービス関数に対応します。
DASResult<Object> result = das.invoke("PhysicalCUSTOMER", new Object[0])
DASResult.next() メソッドは Java メソッドの Iterator.next() と同じように動作します。このメソッドは結果セットの次のオブジェクトを返します。PhysicalCUSTOMER データ サービス メソッドは、SDO 固有の DataObjects を返すので、DataObject に戻り値をキャストすることができます。SDO は、データへのアクセスやデータの更新に使用する、Java ベースのデータ プログラミング モデル (API) およびアーキテクチャです。SDO の詳細については、『ALDSP コンセプト ガイド』の「サービス データ オブジェクト (SDO) の使用」を参照してください。また、「SDO とは」も参照してください。
DataObject customer = (DataObject) result.next();
結果オブジェクトを通じて反復を終了した後で、DASResult.dispose() を呼び出すことが必要です。dispose() の詳細については、「DASResult オブジェクトの削除」を参照してください。
result.dispose();
DataObject を取得した後で変更することができます。しかし、変更された内容を ALDSP サーバに送信する場合は、変更をする前に DataObject で変更追跡を有効にする必要があります。SDOUtil.enableChanges() メソッドによって、単一の DataObject または DataObject の配列に対して変更追跡を有効にすることができます。メソッドの詳細については、「データ オブジェクトの取り扱い」を参照してください。顧客のオブジェクトで変更追跡を有効にした後で、顧客のオブジェクトでの特定の値を変更するためにセットメソッドが呼び出されます。
// その PhysicalCUSTOMER に対して変更追跡を有効にします。
SDOUtil.enableChanges(customer);
// 顧客を変更します。
customer.set("FIRST_NAME", "DynamicWSMediator");
customer.set("EMAIL_ADDRESS", "dynamicwsmediator@bea.com");
最後に、更新 WSDL 処理で DataAccessService の invoke() メソッドが呼び出されます。この処理は単一のパラメータ (PhysicalCUSTOMER オブジェクトの配列) を取得します。データ サービスの関数は、新しい変更された行でデータベースを更新します。
das.invoke("updatePhysicalCUSTOMER", new Object[] { customer });
web サービス インタフェースを通じてクライアント トランザクションを送信する方法はないので、トランザクションは web サービスを通じてクライアントからサーバに伝播されません。障害が発生し、トランザクションがクライアント側にある場合、クライアントの障害処理方法に応じてトランザクションはロールバックされます。ただし、トランザクションはサーバには伝播されません。
static com.bea.dsp.RequestConfig.ReadTransactionMode object で属性を設定して、サーバでトランザクションを処理する方法をコンフィグレーションすることができます。
3 番目の NOT_SUPPORTED 属性は web サービス 処理でサポートされません。Mediator API によるトランザクション動作の詳細については、「トランザクション動作について」を参照してください。
コード リスト 4-3 に com.bea.dsp.RequestConfig.ReadTransactionMode 属性の設定について説明します。
RequestConfig config = new com.bea.dsp.RequestConfig();
RequestConfig requestConfig = request.getConfig();
if(readTransactionRequired) {
config.setEnumAttribute(RequestConfig.ReadTransactionMode.REQUIRED);
}
ALDSP ネイティブな Web サービスは以下のセキュリティ機能をサポートします。
ヒント : | これらのセキュリティ オプションをコンフィグレーションする詳細については、『データ サービス開発者ガイド』の「Web サービス アプリケーション用のセキュリティのコンフィグレーション」を参照してください。 |
一般的に、セキュリティ コンフィグレーションはサーバ側で管理者またはデータ サービス開発者によって行われます。クライアント開発者として、必要な権限を満たすために必要な値をサーバに渡すことが求められます。コード リスト 4-4 では、1 つのサンプルを示します。
注意 : | ネイティブな Web サービス機能によって、HTTP および HTTPS 転送プロトコルのみがサポートされます。他の転送プロトコルを使用する場合、ALDSP の AquaLogic Service Bus 転送.を使用します。この転送によって、ALSB で ALDSP データ サービスをエクスポーズすることができます。 |
基本認証が有効化された場合、Mediator API でコンテキスト オブジェクトを使用して以下のプロパティを渡す必要があります。WebLogic JNDI コンテキスト オブジェクトの詳細については、e-docs の『WebLogic JNDI のプログラマーズ ガイド』を参照してください。
コード リスト 4-4 では、データ アクセス サービス用の web サービス セキュリティを設定する 1 つの方法について説明します。この場合は、ID としてパブリック キー インフラストラクチャの標準 X.509 を使用するクライアント側の BinarySecurityToken 資格 プロバイダが作成されます。この資格プロバイダが Context オブジェクトでプロパティとして設定され、データ アクセス サービスを作成するために使用されます。資格プロバイダ、セキュリティ トークン、ユーザ名トークン、および信頼マネージャは基準の web サービス セキュリティ プロパティです。
詳細については、web サービス セキュリティに関する WebLogic Service ドキュメントを参照します。また、『データ サービス開発者ガイド』の「Web サービス アプリケーション用のセキュリティのコンフィグレーション」も参照してください。
Hashtable h = new Hashtable();
h.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
// 資格プロバイダ用の空リストを作成します。.
List credProviders = new ArrayList();
//証明書および主なパラメータに基づいて ID として X.509 を使用する
// クライアント側の BinarySecurityToken 資格プロバイダを作成します。
CredentialProvider cp = new ClientBSTCredentialProvider(cert, key);
credProviders.add(cp);
String userid = "weblogic";
String password = "weblogic";
// ユーザ名およびパースワード パラメータに基づいてクライアント側の UsernameToken 資格プロバイダ
// を作成します。
cp = new ClientUNTCredentialProvider(userid.getBytes(), password.getBytes());
credProviders.add(cp);
h.put(WSSecurityContext.CREDENTIAL_PROVIDER_LIST, credProviders);
h.put(WSSecurityContext.TRUST_MANAGER, userTrustMgrImpl);
Context context = new InitialContext(h);
![]() ![]() ![]() |