Oracle® Fusion Middleware Oracle Fusion Middlewareカスタム・テクノロジ・アダプタの開発 12c (12.2.1.1) E77340-01 |
|
前へ |
次へ |
この章では、Oracle JDeveloperを使用してカスタム・アダプタを開発する方法について説明します。
Oracle JDeveloperを使用して、独自のカスタム・アダプタを開発できます。このためには、基本の開発フレームワークについて理解しておく必要があります。
JcaAdapterWizard
拡張クラスを使用すると、初期ウィザード・ページを追加できます。その後はいつでも追加のウィザード・ページを追加できます。たとえば、ほとんどのアダプタ・ウィザードで、操作タイプ(インバウンド/アウトバウンド)の選択後にウィザードのページが追加されます。ユーザーの気が変わって、別の操作タイプを選択した場合、ウィザードのページは削除され、新しいページが追加されます。
各ウィザード・ページで、ユーザー入力が収集されます。また、アダプタ固有のコンテキストを登録して、ウィザード・ページ間で情報を共有できるようにすることも可能です。
ユーザーが「終了」ボタンを選択すると、フレームワークによって各ウィザード・ページで、ページが表示されていた順序でbuildDataModel()
メソッドが呼び出されます。各ページのbuildDataModel()
は、ページの画面データをデータ・モデルにコピーする処理を担当します。
フレームワークによって、データ・モデルからアーティファクトが作成されます。アダプタでは、フレームワークでの処理の終了前または終了後に呼び出すインタフェースを登録することもできます。
注意:
アダプタ・フレームワークでは、すべてのWSDL生成が処理されます。(古い) buildWsdl()
メソッドも各ウィザード・ページで引き続き呼び出されますが、ほとんどのウィザード・ページでは、このメソッドをオーバーライドできません。そして、WSDL処理をスーパー・クラスに委ねる必要があります。
次の表とダイアグラムは、カスタム・アダプタを構成する様々なクラスを示しています。この次に、クラスのダイアグラムを示します。
表3-1 カスタム・アダプタのクラス
クラス | 説明 |
---|---|
SOA Diagram |
composite.xmlのグラフィカル・エディタ。 |
SCA Endpoint |
SOAダイアグラムとアダプタ・フレームワークとの間のプロキシを提供します。 |
JcaAdapterWizard |
初期ウィザード・ページの追加を可能にします。 |
CustomAdapterWizard |
パブリック・メソッドをオーバーライドできるようにJcaAdapterWizardを拡張します。 |
JcaServiceName Page |
「サービス名」ページを提供します。 |
CustomConnectionPage |
コネクション・ファクトリを求めるプロンプトを表示して、この情報をデータ・モデルに格納するページを作成します。 |
CustomWSDLSelectionPage |
デフォルトのWSDLを生成するのではなく、既存のWSDL、ポートタイプおよび操作を選択するオプションをユーザーに与えます。 |
CustomOperationPage |
選択された操作に基づいてウィザードのページを追加したり削除したりします。 |
CustomPropertyPage |
ユーザーがアクティブ化および相互作用の仕様プロパティを設定できるようにします。 |
基本を理解すれば、実装の詳細の理解へと進むことができます。
SCAEndpoint
は、JDeveloperの「コンポーネント・パレット」から新規アダプタがSOAダイアグラムにドロップされたとき(SCAEndpoint.createImplementation
)、既存のアダプタがJDeveloperのSOAダイアグラム内でダブルクリックされたとき(setInterfaceInfo
およびdisplayServiceEditor
)またはアダプタがSOAダイアグラムから削除されたとき(SCAEndpoint.delete
)に呼び出されます。
SCAEndpoint
の実装は、SOAダイアグラムとアダプタ・フレームワークとの間のプロキシです。これは、アダプタ・ウィザードのメイン・コンストラクタの呼出しを担当します。
createEndpoint
メソッドおよびupdateEndpoint
メソッドは、JcaAdapterWizard
拡張クラスのdisplay()
メソッドを呼び出します。
この例は、oracle.tip.tools.ide.pm.wizard.adapter.custom.CustomScaEndpointImpl.java
を参照してください。
oracle.tip.tools.ide.pm.wizard.adapter.jca.JcaAdapterWizard
クラスを拡張し、その抽象メソッドを実装することによって、アダプタ・ウィザードでJCAアダプタ・フレームワークを使用できるようになります。
このクラスの抽象メソッドとしては、getAdapterTypeString()
およびgetWelcomeMessage
があり、これらのメソッドによって、汎用ウィザード・ページに必要なテキストが入力されます。
抽象メソッドaddInitialWizardPages()
によって、アダプタ・ウィザードのページが追加されます。このメソッドでは、初期ページ、つまりユーザーの入力に関係なく常にナビゲーション先となるページのみが追加されます。
初期ページは通常、JcaServiceNamePage
,、ConnectionPage
(接続が必要な場合)およびWsdlSelectionPage
(アダプタでサポートされる場合。次の詳細を参照)から開始します。
アダプタでWsdlSelectionPage
がサポートされない場合、最後の初期ウィザード・ページは通常OperationPage
になります。
WsdlSelectionPage
およびOperationPage
でのユーザー入力によって、ウィザードでのナビゲーションを変更できます(つまり、表示されるページを変更できます)。また、ユーザーがこれらのページで「次へ」ボタンを選択したときに、追加のウィザード・ページが追加されます。
オプションで、JcaAdapterWizard
のパブリック・メソッドをオーバーライドできます。これらのメソッドには次のものがあります。
すべてのページで使用可能なアダプタ固有のメソッドを登録するには、getAdapterSpecificContext
をオーバーライドします。
ユーザーが「終了」ボタンを選択したときに呼び出されるようにAdapterWizardFinishInterface
を登録できます。JcaAdapterWizard
拡張クラスのgetAdapterWizardFinish
メソッドをオーバーライドすることによって、このインタフェースを登録します。
デフォルトのデータ・モデルを使用するのではなく、独自のデータ・モデルにアクセスする場合は、readJCADataModel
をオーバーライドします。ただし、これは推奨されていません。
パブリック・メソッドのオーバーライドの例は、<JDEV_HOME>\jdeveloper\integration\adapters\samples\custom
のoracle.tip.tools.ide.pm.wizard.adapter.custom.CustomAdapterWizard.java
を参照してください。
アダプタ・ウィザードのページすべてで、techAdapterWizardPage
(Jpanel
から継承)を拡張する必要があります。
ページ・コンストラクタでは、ウィザードにページを追加して、必要なその他のコンテキスト情報を設定するsetContextAndPage()
を呼び出す必要があります。oracle.tip.tools.ide.pm.wizard.adapter.custom.CustomConnectionPage.java
の例を参照してください。
ユーザーが「終了」ボタンを選択すると、アダプタ・フレームワークによって各ウィザード・ページで、ページが表示されていた順序でbuildDataModel()
メソッドが呼び出されます。buildDataModel()
メソッドは、ページの画面データをデータ・モデルにコピーする処理を担当します。これは、単に、次のようなコードを使用して実行できます。
JcaDataInterface jdata = (JcaDataInterface)getDataModel();
jdata.setProperty(propname,screenField.getText().trim());
JcaAdapterContext
は、すべてのページで使用できます。このとき、有用な情報を取得するための多くのアクセッサ・メソッドが使用されます。ウィザード・ページで一般的に使用されるアクセッサのリストの一部を次に示します。
表3-2 JcaAdapterContextアクセッサ・メソッド
アクセッサ・メソッド | 説明 |
---|---|
|
Adapterコンテキスト・オブジェクト。 |
|
データ・モデルを取得します。 |
|
ほとんどのJDev相互作用に必要なJDeveloperのProjectオブジェクトを取得します。これには、プロジェクト名も含まれます。 |
|
これは、新規ダイアログまたはポップアップ・エラー・メッセージの呼出し時に必要なFrameオブジェクトを返します。 |
|
これは、新規ダイアログまたはポップアップ・エラー・メッセージの呼出し時に必要なFrameオブジェクトを返します。 |
|
既存のアダプタが更新されていることを示します。 |
|
サービス名を取得します。 |
|
サービス・タイプを取得します。 |
|
既存のWSDLが選択されなかった場合はNULLです。これは、WsdlSelectionPageでユーザーが選択したWsdl/porttypeのWsdlInfoになります。 |
|
操作名を取得します。 |
|
アダプタがインバウンド(Read、Get)の場合、Trueです。 |
|
データベース・アダプタなど、接続オブジェクトを使用するアダプタの接続を取得します。 |
最初から開発したウィザード・ページの例は、oracle.tip.tools.ide.pm.wizard.adapter.custom.CustomPropertiesPage.java
を参照してください。
JcaDataInterface
のほとんどのメソッドに、次の2つのバージョンがあります。
1つ目が、仕様を認識するバージョンで、プロパティまたは属性の所属先のアクティブ化または相互作用の仕様を示す(activationまたはinteraction) spec引数を取ります。
もう1つが、仕様を認識しないバージョンで、spec引数は取りません。このドキュメントの例ではすべて仕様非認識APIが使用されています。
これらのメソッドの仕様非認識バージョンは、一度に1つの仕様のみをサポートするアダプタ・ウィザード向けです。たとえば、FileAdapterインスタンスでは、ファイルの読取りかファイルへの書込みのいずれかを実行できます。単一インスタンスで両方を実行することはできません。
仕様認識メソッドは、複数の仕様をサポートするアダプタ・ウィザードで使用する必要があります。たとえば、MQアダプタでは、非同期コールバックも使用する読取り操作がサポートされています。
この場合、MQアダプタ・ウィザードでは、アクティブ化の仕様と相互作用の仕様が生成されます。このため、MQアダプタ・ウィザードでは、プロパティまたは属性の所属先がどちらの仕様であるかを明確にするために、仕様認識メソッドを使用する必要があります。
spec引数には、spec文字列のみが含まれます。
仕様非認識APIでは、アクティブ化または相互作用の仕様を追加する前にプロパティを設定できる古いアダプタもサポートされます。
「ようこそ」ページ、「サービス名」ページおよび「終了」ページはすべてのアダプタ・ウィザードに共通です。これらのページは、アダプタ・フレームワークによって制御されるため、ウィザードに追加する必要はありませんが、「ようこそ」ページ(JcaAdapterWizard
内)および「終了」ページのコンテンツをオーバーライドするためのアクセッサ・メソッドがあります。
フレームワーク・ページを使用する際は、アダプタによってこれらのページを拡張する必要があります。次に、各タイプの拡張について説明します。
すべてではありませんが、ほとんどのアダプタ・ウィザードに接続ページが必要です。たとえば、AQアダプタには、ユーザーが使用可能なキューのリストを問い合せて、表示できるようにするデータベース接続ページが必要です。
アダプタ・ウィザードにデータベース接続が必要な場合、addInitialWizardPages
にJcaDBConnectionPage
を追加して、このメソッドをそのまま使用します。AdapterWizardContext
で次のアクセッサを使用することによって、後続のページでJDeveloperの接続オブジェクトを使用できるようになります。
Connection getConnection();
DatabaseConnectionInfo getDBConnectionInfo();
このガイドで示しているカスタム・アダプタは、独自の接続タイプを持ち、JcaDBConnectionPage
は使用しないアダプタの一例です。
この場合、CustomConnectionPage
によって、コネクション・ファクトリの場所を求めるプロンプトが出され、この情報が次のようなコードとともにデータ・モデルに配置されます。
JcaDataInterface jdata = (JcaDataInterface)getDataModel(); jdata.setConnectionFactoryAtrribute(JcaDataInterface. CONNECTION_FACTORY _LOCATION_ATTRIBUTE,connectionTextField.getText().trim());
多くのアダプタ・ウィザード(ファイル、FTP、AQ、MQおよびJMSアダプタのウィザードなど)では、デフォルトのWSDLを生成するのではなく、ユーザーに対して、既存のWSDL、ポートタイプおよび操作を選択するオプションが用意されています。基本的に、操作の選択によって、アダプタで使用することになるスキーマが定義されます。
ただし、既存のWSDLの選択は、独自のスキーマを提供または生成するアダプタではサポートされません(たとえば、DB、B2B、BAMおよびOracle Applicationアダプタでは、独自のスキーマが生成されます)。
一部のアダプタ・ウィザードではこれら2つが複合されており、既存のWSDLが選択されると、必須スキーマを有する特定の操作が無効になります。
アダプタで既存のWSDLをサポートする必要がある場合は、WsdlSelectionPage
を拡張するクラスを作成する必要があります。
この例は、CustomWsdlSelectionPage
を参照してください。このクラスを拡張するために実装する必要のある抽象メソッドが3つあります。
boolean adapterSupportsSynchRead()
: アダプタに同期読取りオプションがある場合はtrueが返されます。これによって、output要素が含まれるWSDL操作をWsdlSelectionページで選択できるようになります。
boolean adapterSupportsCallback()
: アダプタでコールバック(インバウンドまたはアウトバウンド)を使用できる場合はtrueが返されます。trueの場合、WsdlSelection
ページでユーザーは2つのポート・タイプを選択できます。
createPagesForOperation()
:ユーザーがWSDL操作を選択した後に、開発者は新規ウィザード・ページを追加できます。
注意:
後続のウィザード・ページでは、選択した操作でサポートされない操作および機能を無効にする必要があります。たとえば、ファイル・アダプタおよびFTPアダプタの場合、選択された操作にoutput要素が含まれるときは、「操作」ページ上の、同期読取り操作以外のすべての操作を無効にする必要があります。詳細は、JcaOperationPage
の箇所を参照してください。
既存のWSDLを選択した場合でも、アダプタ・フレームワークではWSDLが生成されますが、ポート・タイプ、操作、メッセージおよびスキーマはそのWSDLでは生成されず、ユーザーが選択したWSDLがインポートされます。ラッパーWSDLで、選択されたWSDLがインポートされます。これには、importおよびpartnerlinkTypesのみが含まれます。
partnerLinkType
を使用しないWSDLをユーザーが選択したときは、ラッパーWSDLの生成はその方法において、BPELの場合と同様です。
また、アダプタ・ラッパーWSDLでは、partnerLinkTypes
が定義される上、ユーザー選択のWSDLでは使用できないヘッダー・メッセージを定義できます。
すべてのウィザード操作ページ(Read/WriteやGet/Putなどの操作を選択するページ)では、JcaOperationPage
をオーバーライドする必要があります。これは、JcaOperationPage
では、操作名に基づいてWSDLオブジェクト作成が扱われるためです。
操作名は、抽象メソッドgetOperationName()
を実装することによって指定されます。
ほとんどの操作ページで、選択された操作に基づいてウィザードのページが追加および削除されます。アクセッサ・メソッドremovePages()
では、現在のページのみでなくすべてのウィザード・ページが削除されます。
「操作」ページのbuildDataModel()
メソッドは、次のようなコードを使用して、データ・モデル内のアクティブ化または相互作用の仕様を設定する処理を担当します。
JcaDataInterface jdata = (JcaDataInterface)getDataModel(); if (readRB.isSelected()){ jdata.setActivationSpec (THIS_ADAPTERS_ACTIVATION_SPEC); ) else{ jdata.setInteractionSpec(THIS_ADAPTERS_INTERACTION_SPEC); }
注意:
更新モードの場合、OperationPages
で、ユーザーによる操作タイプまたは操作名の変更を可能にすることはできません。これは、その操作の存在に依存する参照にアダプタ・インタフェースがワイヤリングされる可能性があるためです。
この例は、oracle.tip.tools.ide.pm.wizard.adapter.custom.CustomOperationPage.java
を参照してください。
アダプタによっては、CustomPropertyPage
を使用または拡張して、ユーザーがアクティブ化および相互作用の仕様プロパティを設定できるようにすることが可能です。
ただし、ほとんどの新しいアダプタには、独自のプロパティ・ページがあります。このことによって、プロパティの表示方法(たとえば、値のリスト、UIコントロールまたは検証)をアダプタでより高度に制御できるようになるためです。
カスタム・アダプタで構成ファイルの読取りに使用されるクラスCustomAdapterConfig
はpublicなので、他のアダプタで使用したり拡張したりできます。
CustomAdapterConfig
クラスでは、使用可能な仕様、プロパティおよびコネクション・ファクトリのリストが、構成ファイルcustomAdapter-config.xml
(デフォルトのカスタム・アダプタ構成ファイル)から取得されます。このクラスを拡張し、getConfigFilePath()
メソッドをオーバーライドすることによって、別の構成ファイルを使用できます。
属性displayResourceKey
およびresourceBundle
はオプションです。activation-spec、interaction-spec、またはproperty要素にdisplayResourceKey
が含まれている場合、フレームワークでは、getDisplayString()
またはtoString()
メソッドで使用可能なリソース・バンドルから表示可能なテキストを取得するキーとして、属性値が使用されます。リソース・バンドルが使用できない場合やバンドルにキーがない場合は、キー自体が表示可能なテキストとして使用されます(このため、リソース・バンドルをクラスに含める必要はありません)。
リソース・バンドルをこのクラスのコンストラクタに渡すことができますが、構成ファイル内の<connection-factory>要素のresourceBundle
属性によってリソース・バンドルをオーバーライドすることもできます。
多くのアダプタ・ウィザードで、ユーザーは、単一スキーマまたはリクエスト/リプライ・スキーマを選択して、アダプタで使用するメッセージを定義できます。
このようなウィザードでは、CommonAdapterSchemaPage
(一方向操作を使用するアダプタ向け)またはCommonAdapterInOutSchemaPage
(一方向操作とリクエスト/リプライ操作を両方とも使用するアダプタ向け)が、スキーマに関連したオプション(typeChooser、NXSDウィザード、不透明なスキーマおよびWSDL生成)で拡張されます。
CommonAdapterSchemaPage
クラス拡張では、getIntroPrompt()
を実装して、ページ上部の導入テキストを変更することのみが必要です。
この例は、oracle.tip.tools.ide.pm.wizard.adapter.custom.CustomSchemaPage
を参照してください。
CommonAdapterInOutSchemaPage
には、オーバーライド可能なパブリック・メソッドがいくつか含まれています。次の表を参照してください。
表3-3 CommonAdapterInOutSchemaPageのパブリック・メソッド
メソッド | 説明 |
---|---|
|
ページ上部の導入テキストを変更します。 |
|
インバウンド・スキーマ・パネルのラベルを設定します。 |
|
アウトバウンド・スキーマ・パネルのラベルを設定します。 |
|
インバウンド・パネルおよびアウトバウンド・パネルの表示順を変更します。デフォルトの表示では、インバウンド・スキーマ・パネルが先です。 |
|
スキーマ・パネルの表示を設定または設定解除します。 |
この例は、oracle.tip.tools.ide.pm.wizard.adapter.mq.MQAdapterInOutSchemaPage
を参照してください。
ウィザードで「終了」ページが表示されるときに「終了」ボタンが表示されるようにするのではなく、ウィザード・フローの早い段階でウィザードに「終了」ページを追加する必要があります。「終了」ページには、まだ表示されていない他のページで必要なサマリー情報が表示されます。
このようなページの優先順位を指定できるように、techAdapterWizardPage
に2つのヘルパー・メソッドaddFinishPage()
およびsetFinishPageContents()
が用意されています。
addFinishPage()
では、コンテンツのない終了ページがウィザードに追加されます。ほとんどのウィザードでは、ページの削除または追加の際に「終了」ページが追加されます。
setFinishPageContents(String title, Object contents)
では、ユーザーがウィザードの最後のページで「次へ」ボタンを選択したときに、setFinishPageContents
が(wizardValidatePage()
から)呼び出されます。
「終了」ページのコンテンツとして、コンポーネントまたは文字列を指定できます。「終了」ページのコンテンツを文字列に設定すると、MultiLineLabelが自動的に作成されます。
各アダプタでは、JcaAdapterWizard
拡張クラスのgetAdapterWizardFinish()
メソッドをオーバーライドすることによって、AdapterWizardFinishInterface
の実装を登録できます。これによって、アダプタで、終了時に追加のアクティビティを実行できるようになります。
たとえば、ファイル・アダプタでは、この終了処理のオーバーライドを使用して、FileAdapterHeader
スキーマが現行プロジェクトであるかどうかを確認し、このスキーマが現行プロジェクトでない場合は、ファイル・アダプタでヘッダー・ファイルがプロジェクト・ディレクトリにコピーされるように設定できます。
AdapterWizardFinishInterface
には、アダプタのアーティファクト(WSDLファイルおよび.jca
ファイル)の作成前と作成後のいずれかに制御を得る次の2つのメソッドが含まれます。
beforeWSDL()
メソッドは、falseを返し、アダプタのアーティファクトを作成してはいけないことを示します。
afterWSDL()
メソッドは、WSDLファイルの作成後に呼び出されます。
これらのメソッドはどちらも、実装で必要に応じて使用できます。
次の要素は、sca-config.xml
に追加され、カスタム・アダプタで使用するアイコンとSCAEndpoint実装クラスについてSOAダイアグラムに通知して、追加情報を提供します。サブ要素の定義として、次のものがあります。
name: リソース・バンドルから取得されます。
description: リソース・バンドルから取得されます。
tooltip: リソース・バンドルから取得されます(グラフィックでマウス・カーソルの下に表示されます)。
icon16x16: パレットで使用されるアイコン。
icon20x20: グラフィックで使用されるアイコン。
他の4つのアイコンは使用されません。
<adapterType resourceBundle="oracle.tip.tools.ide.pm.modules.biz integration.adapter.custom.resource.CustomStringResourceBundle"> <name>${CUSTOM_ADAPTER_COMPONENT_NAME_L}</name> <bindingType>jca</bindingType> <bindingSubType>custom</bindingSubType <implementationClass>oracle.tip.tools.ide.pm.modules.bizintegration.adapter.custom.CustomScaEndpointImpl</implementationClass> <description>${CUSTOM_ADAPTER_COMPONENT_DESC}</description> <tooltip>${CUSTOM_ADAPTER_COMPONENT_DESC}</tooltip> <icon16x16>/oracle/tip/tools/ide/pm/modules/bizintegration/adapter/custom/resource/custom_adapter_16x16.png</icon16x16> <icon20x20>/oracle/tip/tools/ide/pm/modules/bizintegration/adapter/custom/resource/custom_adapter_20x20.png</icon20x20> <topSectionIcon>oracle/tip/tools/ide/fabric/resource/image/visuals_rd1/whiteServiceTop.png</topSectionIcon> <middleSectionIcon>oracle/tip/tools/ide/fabric/resource/image/visuals_rd1/whiteServiceMiddle.png</middleSectionIcon> <bottomSectionIcon>oracle/tip/tools/ide/fabric/resource/image/visuals_rd1/whiteServiceBottom.png</bottomSectionIcon> <collapsedSectionIcon>oracle/tip/tools/ide/fabric/ resource/image/visuals_rd1/whiteServiceCollapsed.png</collapsedSectionIcon> </adapterType> <collapsedSectionIcon>oracle/tip/tools/ide/fabric/resource/image/ visuals_rd1/whiteServiceCollapsed.png</collapsedSectionIcon> </adapterType>
sca-config.xml
の<adapterType>には、リソース・バンドルのクラス名を格納する必要のあるリソース・バンドル属性が含まれます。このリソース・バンドルは、SOAダイアグラマで、ダイアグラムのエンドポイントのラベル付けに使用する変換済テキストの取得に使用されます。
たとえば、カスタム・アダプタのエントリを参照する場合、ダイアグラムにカスタム・アダプタを表示する際に、ダイアグラムではCustomStringResourceBundle
でCUSTOM_ADAPTER_COMPONENT_NAME_L
が検索されます。
アダプタ・ウィザードの内部で、ダイアグラムではリソース・バンドルを使用して、ウィザード内のすべてのラベルのテキストが取得されます。カスタム・アダプタの場合、同じバンドルが使用されます。
このSDKのクラスには、アダプタ・ウィザード全体を通して使用されているユーティリティ・メソッドが含まれています。次の表は、これらのメソッドを示しています。
メソッド | 備考 |
---|---|
|
|
|
複数のフレーバを使用できます。 |
|
|
|
|
|
|
|
一方向操作の定義オブジェクトからスキーマを削除します。 |
|
リクエスト/リプライ操作の定義オブジェクトから入力/出力スキーマを削除します。 |