アダプタは、EPNの入出力データを管理します。Oracle Event Processingには、CSV、RMIおよびHTTPなどの各種タイプのデータを処理するために様々な種類のインバウンド・アダプタとアウトバウンド・アダプタが用意されています。すべてのアダプタには、OSGi登録アダプタ・ファクトリ・サービスに対する参照であり、アダプタが処理するデータのタイプを定義するproviderプロパティがあります。
インバウンド・アダプタは、EPNに入るデータ・ストリームからイベント・データを受信し、データをイベント・タイプに応じてイベントに割り当て、データをEPN内の次のステージに送信します。アウトバウンド・アダプタは、EPNによって処理されたイベントを受信し、イベントを出力フォームに変換し、変換したデータを別のEPN、非EPNアプリケーション、CSVファイルまたはWebページなどの出力データ・ソースに送信します。
この章の内容は次のとおりです。
高可用性アダプタの詳細は、「高可用性アプリケーション」を参照してください。
csvgenアダプタとともにロード・ジェネレータを使用してデータ・フィードをシミュレートしてアプリケーションをテストする方法の詳細は、「テスト1-2-3」を参照してください。
ほとんどのアダプタを作成する上で最適な方法は、Oracle JDeveloperを使用する方法です。Oracle JDeveloperコンポーネント・ウィンドウには、インバウンド・アダプタおよびアウトバウンド・アダプタとしてCSV、EDN、RMI、HTTPおよびJMSが用意されています。
他のアダプタの場合、構成ファイルを直接編集します。この章の各アダプタの項では、設定を確認できるようにアセンブリと構成ファイルの構成の例を示します。
アダプタを作成する前に、Oracle JDeveloperを使用して、アダプタに割り当てるイベント・タイプを作成してください。イベント・タイプの作成の詳細は、『Oracle Event Processingスタート・ガイド』のイベント・タイプの作成および登録に関する項を参照してください。
この章では、様々なタイプのアダプタに関するアセンブリおよび構成ファイルの設定について説明します。アダプタ設定の詳細は、『Oracle Event Processing スキーマ・リファレンス』のアダプタに関する項を参照してください。アダプタ・スキーマについては、Oracle Event ProcessingのインストールのOracle/Middleware/my_oep/oep/wlevs_application_config.xsdディレクトリも参照してください。
クラスタ配分機能には、クラスタ内のすべてのサーバーに着信イベントを配分するために様々なOracle Event Processingアダプタ・タイプ用のメカニズムが採用されています。
イベントを配分するために個別アダプタまたはイベントBeanインスタンスを構成でき、この場合、このアダプタによって処理されるすべての入力イベントはクラスタ内のすべてのサーバーに送信(配分)されます。
配分アダプタにより、すべての入力イベントがクラスタ内のすべてのサーバーに確実に送信(配分)されます。入力アダプタを配分アダプタに変換するには、distributeInput要素を追加し、次のように、これをtrueに設定します。distributionThreadsCountプロパティはオプションで、1にデフォルト設定されます。
<wlevs:adapter id="myLoadgenAdapter" provider="loadgen"> <wlevs:instance-property name="distributeToClusterGroup" value="true"/> <wlevs:instance-property name="distributionThreadsCount" value="1"/> </wlevs:adapter>
Oracle Event Processingは、loadgen、CSVインバウンド・アダプタおよびJMSインバウンド(キュー)アダプタ用のクラスタ配分サービスをサポートしています。Oracle Event Processingは、CSVアウトバウンド・アダプタ、JMSインバウンド(トピック)アダプタ、JMSアウトバウンドおよびHTTPパブリッシュ/サブスクライブ・アダプタ用のクラスタ配分サービスはサポートしていません。入力配分に対してトピック宛先を構成するとエラーになります。トピック構成によって警告ログ・メッセージが生成され、トピック構成は無視されます。
前述のアダプタ・タイプ以外にも、次の例に示すように、BeanのプロバイダをclusterGroupDistributorとして指定することにより、受信したすべてのイベントをすべてのクラスタ・メンバーに配分するためのイベントBeanを構成することもできます。
<wlevs:event-bean id="distributor-bean" provider="clusterGroupDistributor"> <wlevs:instance-property name="distributionThreadsCount" value="1"/> ... other event bean properties ... </wlevs:event-bean>
現在、Oracle JDeveloperには、クラスタ配分サービス用のコンポーネントは用意されていません。ただし、Oracle Event Processingアプリケーション用のアセンブリ・ファイルおよび構成ファイルにエントリを追加することにより、クラスタ配分サービスを作成できます。
一部のアダプタには、ユーザー名およびパスワードの子要素があります。Oracle Event Processingには、パスワードが含まれるファイルを暗号化できるようencryptMSAConfigコマンドが用意されています。詳細は、『Oracle Event Processingの管理』のencryptMSAConfigコマンドライン・ユーティリティに関する項を参照してください。
Oracle Event Processingには、アダプタおよびイベントBeanでJava Architecture for XML Binding (JAXB)マッピング機能を使用してXMLオブジェクトとJavaオブジェクト間でイベント・データをマーシャリングおよびアンマーシャリングするための簡易インタフェースが用意されています。
JAXBインタフェースは、JAXB 2.2仕様およびEclipseLink Moxyプロバイダ拡張機能をサポートしています。
マッピング操作は次の方法で構成できます。
一連の注釈付きJavaクラスを出力するために、XMLスキーマからJavaオブジェクトにマップします。
JAXB注釈を使用して、1つのJavaオブジェクト・セットから別のJavaオブジェクト・セットまたはXMLにマップします。
既存のXMLスキーマから既存の事前定義済のJavaオブジェクト表現にマップします。このアプローチでは、EclipseLink Moxy拡張機能を使用し、マッピング詳細が含まれる外部のmetadataファイルを必要とします。metadataファイルは、アプリケーション構成によって参照されます。
EclipseLink Moxyには、注釈を指定せずにXMLスキーマまたはJavaクラスを変更しないで既存のXMLスキーマと事前定義済のJavaクラス間でマップできる拡張機能が用意されています。マッピング情報は、XPath構文を使用して外部メタデータ・ファイルで指定します。
柔軟性の高いEclipseLink Moxy拡張機能を使用すると、複雑な操作を実行できます。たとえば、複雑なXMLデータのサブセットをより簡単なイベント表現にマップできます。また、深くネストしたXMLドキュメントをフラットなJava Beanイベント形式にフラット化し、Oracle CQLによる処理も可能にします。
EclipseLink Moxyの外部のmetadataはXMLで指定します。http://www.eclipse.org/eclipselink/xsds/eclipselink_oxm_2_2.xsdにあるスキーマにアクセスしてください。
JAXB機能を必要とするアダプタまたはイベントBeanは、com.oracle.cep.mappers.api.Mapperインタフェースを実装するBeanのインジェクションによってこの機能を取得します。Mapperインタフェースは、次のようになります。
public interface Mapper {
Marshaller createMarshaller() throws MapperException;
Unmarshaller createUnmarshaller() throws MapperException;
}
アダプタまたは他のEPNコンポーネント・コードでは、インジェクトされたBeanを使用してマーシャリング・オブジェクトおよびアンマーシャリング・オブジェクトを作成します。次に示すcom.oracle.cep.mappers.api.Marshallerおよびcom.oracle.cep.mappers.api.Unmarshaller インタフェースは、ほとんどのアプリケーションに対して機能します。
public interface Marshaller {
void marshal(Object object, javax.xml.transform.Result result)
throws MapperException;
}
public interface Unmarshaller {
Object unmarshal(javax.xml.transform.Source source)
throws MapperException;
}
一部のアプリケーションでは、ターゲット・クラスを引数として使用するアンマーシャリング・メソッドなど、マーシャリングおよびアンマーシャリング用として特別なメソッド・シグネチャが必要な場合があります。このような場合は、かわりにcom.oracle.cep.mappers.jaxb.JAXBMarshallerImpl およびcom.oracle.cep.mappers.jaxb.JAXBUnmarshallerImplインタフェースを使用します。これらのインタフェースには、javax.xml.bind.Marshallerおよびjavax.xml.bind.Unmarshallerインタフェースによってサポートされる完全セットのマーシャリング・メソッドおよびアンマーシャリング・メソッドに対応するメソッドが用意されています。
アセンブリ・ファイル
次のアセンブリ・ファイル・エントリでは、プロパティを使用してマッパーBeanをコールし、イベント・タイプおよびメタデータ・ファイルを指定しています。
<bean id="mapperBean" class="com.oracle.cep.mappers.jaxb.JAXBMapperImpl" > <property name="eventTypeName" value="CallCenterActivity" /> <property name="metadata" value="external_metadata_case1.xml" /> </bean>
ファクトリをコールしてマッパーBeanを作成するには、Bean要素に対して次を指定します。
<bean id="mapperBean" class="com.oracle.cep.mappers.jaxb.JAXBMapperFactory"
factorymethod="create"/>
構成ファイル
次の構成ファイル・エントリは、マッパーBeanに対してプロパティを指定します。
<jaxb-mapper> <name>mapperBean</name> <event-type-name>CallCenterActivity</event-type-name> <metadata>external_metadata_case1.xml</metadata> </jaxb-mapper>
プロパティ
マッパーBeanは、プロパティをサポートしています。metadataMapを除くすべてのプロパティは、アセンブリ・ファイルのプロパティまたは構成ファイルの要素として構成できます。
表4-1 マッパーBeanのプロパティおよび要素
| アセンブリ・ファイルのプロパティ名 | 構成ファイルの要素名 | 説明 |
|---|---|---|
eventTypeName |
event-type-name |
アプリケーションによってイベント・タイプ・リポジトリに登録されているイベント・タイプの名前。イベント・タイプはJavaクラスに対応しています。このクラスのパッケージ名は、マッパーBeanによって表されるJAXBContextを初期化する際にコンテキスト・パスとして使用されます。 この構成では、マッパーによって表される 詳細は、『Oracle Event Processing スキーマ・リファレンス』のcontext-pathに関する項を参照してください。 |
|
|
Javaパッケージ名のコロン区切りリスト。マッパーBeanによって表される この構成では、マッパーによって表される |
|
|
|
|
|
検証に使用されるXMLスキーマ・ファイルのファイル名。 |
|
|
マッピングのカスタマイズ用のEclipseLink Moxy外部メタデータが含まれるファイルの名前。 |
|
該当なし |
|
アプリケーションでEclipseLink Moxy固有の外部metadataが使用される場合、metadataの場所はmetadataプロパティまたはmetadataMapプロパティによって指定されます。contextPath上に複数のパッケージがある場合、metadataMapプロパティが必要です。コンポーネント構成ファイルでのmetadataMapプロパティの指定はサポートされていません。
CSVアダプタは、カンマで区切られたインバウンド・データおよびアウトバウンド・データを処理します。EPNに入力するためにカンマ区切りの値形式でデータを受信するにはCSVInboundアダプタを使用し、EPNから出力するカンマ区切りの値形式でデータを送信するにはCSVOutboundアダプタを使用します。
Oracle Event Processingインストールに用意されているロード・ジェネレータを使用して、CSVインバウンド・アダプタを使用するOracle Event Processingアプリケーションをテストできます。ロード・ジェネレータにより、サンプル・データが含まれるASCIIファイルが読み取られます。CSVインバウンド・アダプタを使用する必要があるのは、CSVインバウンド・アダプタはロード・ジェネレータによって生成されたデータ・パケットを解読するようコーディングされているためです。ロード・ジェネレータとcsvgenアダプタを参照してください。
注:
java.sql.TimeStampタイプの場合、CSVアダプタは、yyyy-mm-dd'T'hh:mm:ss[.fffffffff]の形式でデータの読取りおよび書込みを行います。たとえば、2012-12-12T12:12:12.120のようになります。
CSVアダプタを作成する上で最適な方法は、Oracle JDeveloperコンポーネント・ウィンドウを使用する方法です。Oracle JDeveloperによって生成された次のアセンブリおよび構成ファイルは、CSVのインバウンド・アダプタおよびアウトバウンド・アダプタの構成を示しています。
アセンブリ・ファイル
CSVインバウンド・アダプタは、StockData.csvファイルから読み取られたデータをTradeEventイベント・タイプのイベントに変換します。
wlevs:listener要素は、TradeEventアクティビティについてCSVインバウンド・アダプタをリスニングするコンポーネントを指定します。この例では、リスナーはAdapterOutputChannelです。AdapterOutputChannelコンポーネントは、StockTradeCSVInboundAdapterをリスニングしてここから取引イベントを受信し、次のステージに送信します。
<wlevs:adapter id="StockTradeCSVInboundAdapter" provider="csv-inbound">
<wlevs:listener ref="AdapterOutputChannel"/>
<wlevs:instance-property name="eventType" value="TradeEvent"/>
<wlevs:instance-property name="sourceUrl"
value="file:/scratch/mpawlan/oep9-19/oep/utils/load-generator/StockData.csv"/>
</wlevs:adapter>
アウトバウンド・アダプタのアセンブリ・ファイル構成は、インバウンド・アダプタと類似していますが、append属性が含まれます。trueに設定すると、Oracle Event Processingによって既存の出力ファイルにデータが追加されます。falseに設定すると、Oracle Event Processingによって新規ファイルが作成されるか、同じ名前の既存のファイルが上書きされます。
<wlevs:adapter id="StockTradeCSVOutboundAdapter" provider="csv-outbound">
<wlevs:instance-property name="eventType" value="TradeEvent"/>
<wlevs:instance-property name="outputFile" value="/scratch/mpawlan/oep9-19/oep/utils/load-generator/StockData.csv"/>
<wlevs:instance-property name="append" value="false"/>
</wlevs:adapter>
outputFile値には絶対パスまたは相対パスを指定できます。相対パスの場合、../filename.csv、../result.csvまたはupload/result.csvを指定できます。相対パスを指定する場合、抽象パスに親ディレクトリが含まれることを確認してください。たとえば、UNIXの場合、カレント・ディレクトリ内のファイルを単純にresult.csvとして指定するのではなく./result.csvとして指定します。
構成ファイル
構成ファイル内のアダプタ要素には、アダプタのname属性とその値が示されます。アダプタ名は、アセンブリ・ファイル内のアダプタのid属性と一致する必要があります。
<csv-adapter> <name>StockTradeCSVInboundAdapter</name> <event-interval units="nanoseconds">5</event-interval> </csv-adapter>
<csv-adapter> <name>StockTradeCSVOutboundAdapter</name> </csv-adapter>
イベント配信ネットワーク(EDN)のインバウンド・アダプタおよびアウトバウンド・アダプタは、JAXBを使用してEPNからOracle SOA Suiteイベント・ネットワークへのインタフェースを実現します。
EDNアダプタには、EDN XMLデータ転送をRAW XML (trueの場合)として表すかJAXBを使用してJavaオブジェクトとして表すかを指定するraw-xml-content構成要素があります。JAXBの場合、アダプタは、一連の適切なスキーマ(xjc)によって生成されたクラスがOracle Event Processingアプリケーション・バンドルのクラス・パスに含まれることを想定します。
EDNアダプタは、イベント・タイプおよびEDLファイルへの参照を使用して構成します。初期化時には、構成されたイベント・タイプと一致するイベント定義QNameが含まれるEDLファイルが検索されます。構成されたイベント・タイプがEDL内で見つかった場合は、対応するQNameについてEDNにサブスクリプションが登録されます。
EDNアダプタとEDLファイルの使用方法の詳細は、『Oracle Event Processingスタート・ガイド』のEDNアダプタを使用したアプリケーション作成に関する項を参照してください。
EDNInboundアダプタを使用して、Oracle SOA Suiteイベント・ネットワークからの着信データを受信します。EDN入力アダプタは、指定されたEDNイベント・タイプをサブスクライブし、着信EDNイベントをOracle Event Processingイベント・タイプに変換し、Oracle Event Processingアプリケーションが処理できるようにします。
EDNOutboundアダプタを使用して、Oracle SOA Suiteイベント・ネットワークにアウトバウンド・データを送信します。EDN出力アダプタは、Oracle Event Processingイベントを対応するEDNイベントに変換し、これらをEDNにパブリッシュします。パブリッシュされたイベントは、Oracle Event Processingアプリケーションで生成された新規イベントである場合や、EDN入力アダプタによって受信され、Oracle Event Processingアプリケーションによって処理され、EDN出力アダプタに送信されたEDNイベントである場合があります。
EDNアダプタを作成する上で最適な方法は、Oracle JDeveloperコンポーネント・ウィンドウを使用する方法です。Oracle JDeveloperによって生成された次のアセンブリおよび構成ファイルは、EDNのインバウンド・アダプタおよびアウトバウンド・アダプタの構成を示しています。
EDNアダプタの詳細は、『Oracle Event Processing スキーマ・リファレンス』のedn-adapterに関する項を参照してください。
アセンブリ・ファイル
次のアセンブリ・ファイル・エントリは、『Oracle Event Processingスタート・ガイド』の不正検出アプリケーションに関する項の不正検出ウォークスルーで作成されたインバウンドおよびアウトバウンドのEDNアダプタの要素および属性設定を示します。
EDN入力アダプタは、EDN入力チャネルをリスニングしてFraudCheckRequestタイプのすべてのイベントを検索します。
EDN出力アダプタは、FraudCheckRequestタイプのイベントをEPN内の次のステージに送信します。
<wlevs:adapter id="edn-inbound-adapter" provider="edn-inbound"> <wlevs:listener ref="ednInputChannel"/> <wlevs:instance-property name="eventType" value="FraudCheckRequest"/> </wlevs:adapter> <wlevs:adapter id="edn-outbound-adapter" provider="edn-outbound"> <wlevs:instance-property name="eventType" value="FraudCheckResponse"/> </wlevs:adapter>
構成ファイル
次の構成ファイル・エントリは、『Oracle Event Processingスタート・ガイド』の不正検出アプリケーションに関する項の不正検出ウォークスルーで作成されたEDNインバウンド・アダプタおよびアウトバウンドEDNアダプタの構成設定を示します。
注:
バンドルされたJARファイルの固定パスにEDLファイルおよびスキーマ(xsd)ファイルを配置する必要があります。<edn-adapter> <name>edn-outbound-adapter</name> <edl-file>FraudCheckEvent.edl</edl-file> <validate>false</validate> <raw-xml-content>false</raw-xml-content> <jndi-provider-url>t3://localhost:7101</jndi-provider-url> <jndi-factory>weblogic.jndi.WLInitialContextFactory</jndi-factory> <user>weblogic</user> <password>welcome1</password> </edn-adapter> <edn-adapter> <name>edn-inbound-adapter</name> <edl-file>FraudCheckEvent.edl</edl-file> <schema-file>FraudCheckType.xsd</schema-file> <validate>false</validate> <raw-xml-content>false</raw-xml-content> <jndi-provider-url>t3://localhost:7101</jndi-provider-url> <jndi-factory>weblogic.jndi.WLInitialContextFactory</jndi-factory> <user>weblogic</user> <password>welcome1</password> </edn-adapter>
ファイル・アダプタは、ファイルからデータを読み取ってEPNに書き込み、このデータをイベントに変換します。
現在、Oracle JDeveloperには、ファイル・アダプタ用のコンポーネントは用意されていません。ただし、Oracle Event Processingアプリケーション用のアセンブリ・ファイルおよび構成ファイルにエントリを追加することにより、ファイル・アダプタを作成できます。
アセンブリ・ファイル
pathプロパティは、入力ファイルの場所を示します。アダプタは、入力ファイルからデータを読み取る際に、受信データをOrderArrivalEventタイプのイベントに変換します。ファイル・アダプタがファイルの読取りを開始するまでに5000ナノ秒のinitialDelayがあります。ダウンストリームのOrderArrivalチャネルは、OrderArrivalEventタイプのイベントをリスニングします。
<wlevs:adapter id="inputAdapter" provider="file" >
<wlevs:instance-property name="path"
value="@wlevs.domain.home@/inpOrderArrival.txt"/>
<wlevs:instance-property name="eventType" value="OrderArrivalEvent"/>
<wlevs:instance-property name="initialDelay" value="5000"/>
<wlevs:listener ref="OrderArrival"/>
</wlevs:adapter>
構成ファイル
<adapter>
<name>inputAdapter</name>
</adapter>
HTTPパブリッシャ・アダプタを使用して、JavaScript Object Notation (JSON)イベント・データをEPNからWebベースのユーザー・インタフェースに送信します。HTTPサブスクライバ・アダプタを使用して、EPNに入るJavaScript Object Notation (JSON)イベント・データを受け入れます。JSONイベント・データは、ユーザー・アクションによってイベントを生成するHTTPサーバーから送信されます。
Oracle Event Processing内のHTTPパブリッシュ/サブスクライブ・サーバーは、cometdプロジェクトで提案されているBayeuxプロトコルに基づいています。Bayeuxプロトコルには、クライアントとサーバーがHTTPを介して非同期メッセージで通信するための規約が定義されています。
リモートまたはローカルHTTPパブリッシャ・アダプタおよびリモートHTTPサブスクライバ・アダプタを作成できます。HTTPアダプタがローカルとリモートのどちらであるかは、必要な<server-url>子要素に指定するローカルまたはリモートURLによって決定されます。
HTTPパブリッシュ/サブスクライブ・アダプタを作成する上で最適な方法は、Oracle JDeveloperを使用する方法です。
注:
HTTPパブリッシュ/サブスクライブ・アダプタで使用されるイベント・タイプのプロパティ・タイプとして、バイト配列はサポートされていません。
アセンブリ・ファイル
<wlevs:adapter id="http-pub-adapter" provider="httppub"/>
<wlevs:adapter id="http-sub-adapter" provider="httpsub" />
構成ファイル
すべてのローカル・アダプタおよびリモート・アダプタについて、サーバーのURLをserver-urlプロパティに指定します。サーバーには、Oracle Event Processingサーバー、WebLogic Serverインスタンス、または任意のサード・パーティのHTTPパブリッシュ/サブスクライブ・サーバーを指定できます。
パブリッシュ用のすべてのローカル・アダプタについて、server-context-path要素を追加して、現在のOracle Event ProcessingアプリケーションをホストするOracle Event Processingインスタンスに関連付けられたローカルHTTPパブリッシュ/サブスクライブ・サーバーのパスを指定します。
デフォルトでは、各Oracle Event Processingサーバーは、パス/pubsubを持つHTTPパブリッシュ/サブスクライブ・サーバーを使用して構成されます。新規ローカルHTTPパブリッシュ/サブスクライブ・サーバーを作成したか、デフォルトの構成を変更した場合は、サーバー・ファイル内のサーバーの場所を指定します。ファイル内で、サーバーの場所とともにhttp-pubsub要素のpath値を指定します。Oracle Event Processingインストール内のサーバー・ファイルは、/Oracle/Middleware/my_oep/examples/domains/<my_domain>/defaultserverにあります。
channel子要素は、アダプタがパブリッシュするチャネルまたはサブスクライブするチャネルを指定します。
<http-pub-sub-adapter> <name>http-pub-adapter</name> <server-url>http://myhost.com:9102/pubsub</server-url> <channel>/channel2</channel> <event-type>com.mycompany.httppubsub.PubsubEvent</event-type> <user>wlevs</user> <password>wlevs</password> </http-pub-sub-adapter> <http-pub-sub-adapter> <name>http-sub-adapter</name> <server-url>http://myhost.com:9102/pubsub</server-url> <channel>/channel2</channel> <event-type>com.mycompany.httppubsub.PubsubEvent</event-type> </http-pub-sub-adapter>
HTTPパブリッシュ/サブスクライブ・アダプタは、受信したJavaScript Object Notation (JSON)メッセージをイベント・タイプに変換し、再度戻します。JSONのインバウンド・メッセージおよびアウトバウンド・メッセージをイベント・タイプに変換し、再度戻す方法をカスタマイズするには、カスタム・コンバータBeanを作成します。
HTTPパブリッシュ/サブスクライブ(pub-sub)サーバーはcometdプロジェクトで提案されているBayeuxプロトコルに基づいています。Bayeuxプロトコルには、クライアントとサーバーがHTTPを介して非同期メッセージで通信するための規約が定義されています。pub-subサーバーは、Bayeuxプロトコルを理解するすべてのクライアントと通信できます。
次のフレームワークを使用してWebクライアントを開発できます。
BayeuxプロトコルをサポートするDojo JavaScriptライブラリ。Oracle Event Processingではこのライブラリは提供されません。詳細は、http://dojotoolkit.org/を参照してください。
Bayeuxプロトコルを使用してpub-subサーバーと通信するFlexクライアントの開発を可能にするWebLogic Workshop Flexプラグイン。
HTTP pub-subサーバー・チャネルの保護の詳細は、『Oracle Event Processingの管理』のHTTPパブリッシュ・サブスクライブ・サーバーに関する項を参照してください。
カスタム・コンバータBeanは、次のインタフェースを実装するJavaクラスです。
InboundMessageConverterインタフェース: インバウンドJSONメッセージをイベントに変換します。
OutboundMessageConverterインタフェース: イベントをJSONメッセージに変換します。
これらのAPIの詳細は、Oracle Event Processing Java APIリファレンスを参照してください。
インバウンドHTTP Pub-Sub JSONメッセージ
インバウンドHTTP pub-sub JSONメッセージ用のカスタム・コンバータBeanは、com.bea.wlevs.adapters.httppubsub.api.InboundMessageConverterインタフェースを実装します。このインタフェースは、convertメソッドのみが設定されています。
public List convert(JSONObject message) throws Exception;
messageパラメータは、JSON形式のインバウンドHTTP pub-subメッセージです。戻り値は、EPN内の次のノードに渡すイベントのListです。
アウトバウンドHTTP Pub-Sub JSONメッセージ
アウトバウンドHTTP pub-subメッセージ用のカスタム・コンバータBeanは、com.bea.wlevs.adapters.httppubsub.api.OutboundMessageConverterインタフェースを実装します。このインタフェースは、convertメソッドのみが設定されています。
public List<JSONObject> convert(Object event) throws Exception;
eventパラメータは、EPN内のソース・ノードから送信されてアウトバウンドHTTP pub-subアダプタによって受信されたイベントです。戻り値は、JSONメッセージのListです。
例
次の例は、InboundMessageConverterインタフェースとOutboundMessageConvertインタフェースの両方を実装するカスタム・コンバータBeanを示しています。このBeanは、インバウンドとアウトバウンドの両方のHTTP pub-subアダプタに対して使用できます。
注:
JavaオブジェクトをJSON形式に変換するためにGSON Javaライブラリを使用できます。詳細は、http://www.json.orgおよびhttp://code.google.com/p/google-gsonを参照してください。
package com.sample.httppubsub;
import com.bea.wlevs.adapters.httppubsub.api.InboundMessageConverter;
import com.bea.wlevs.adapters.httppubsub.api.OutboundMessageConverter;
import com.bea.httppubsub.json.JSONObject;
import java.util.List;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
public class TestConverter implements InboundMessageConverter, OutboundMessageConverter {
public List convert(JSONObject message) throws Exception {
List eventCollection = new ArrayList();
PubsubTestEvent event = new PubsubTestEvent();
event.setMessage("From TestConverter: " + message);
eventCollection.add(event);
return eventCollection;
}
public List<JSONObject> convert(Object event) throws Exception {
List<JSONObject> list = new ArrayList<JSONObject>(1);
Map map = new HashMap();
map.put("message", ((PubsubTestEvent) event).getMessage());
list.add(new JSONObject(map));
return list;
}
}
JMSアダプタを使用して、Oracle Event ProcessingのEPNにJava Message Service (JMS)を接続し、JMSメッセージを送受信します。
Oracle Event Processing JMSアダプタは、Java EEに準拠する、Javaクライアントを提供するJMSサービス・プロバイダをサポートします。
JMSインバウンド・アダプタが着信JMSメッセージをOracle Event Processingイベントに変換し、JMSアウトバウンド・アダプタがOracle Event ProcessingイベントをJMSメッセージに変換します。インバウンド変換をカスタマイズするには、独自のJavaクラスを作成します。『Oracle Event Processingのカスタマイズ』の「カスタム・アダプタ」を参照してください。
JMSアダプタを作成する上で最適な方法は、Oracle JDeveloperコンポーネント・ウィンドウを使用する方法です。Oracle JDeveloperによって生成された次のアセンブリおよび構成ファイルは、JMSのインバウンド・アダプタおよびアウトバウンド・アダプタの構成を示しています。
注:
アウトバウンドJMSアダプタに関連付けられたMessageConverterオブジェクトで発生する例外によって基礎となるJMSトランザクションがロールバックされることはありません。アウトバウンドJMSアダプタ内のMessageConverterの外部で例外が発生した場合、既存のJMSトランザクションがロールバックされます。
Oracle Event Processingは、次のサービス・プロバイダに対してテストされます。
Oracle T3プロトコルを使用してOracle WebLogic Serverと通信するJava RMIクライアントであるWebLogic T3クライアント
Oracle WebLogic Server JMSのバージョン10.0、10.3および10.3.1
Tibco EMS JMSの現在のバージョン
使用するサービス・プロバイダがリストにない場合は、使用しているサービス・プロバイダに連絡し、jms-adapter構成に必要なjndi-provider-urlおよびjndi-factoryの情報を取得することにより、使用しているサービス・プロバイダとともに使用するようOracle Event Processing JMSアダプタを構成できます。
アセンブリ・ファイル
<wlevs:adapter id="jms-inbound-adapter" provider="jms-inbound" />
構成ファイル
インバウンド・アダプタは、着信JMSメッセージをTradeEventに変換します。JNDIファクトリおよびサービス・プロバイダは、weblogic.jndi.WLInitialContextFactoryおよびt3://localhost:7101です。着信クライアントは、JNDI名がJNDINameであるアダプタを検索します。JMSアダプタは、JMSメッセージをイベントに変換した後、イベントをQueue1のJNDI宛先に送信します。
オプションのconnection-jndi-name要素は、JMS接続ファクトリのJNDI名を提供します。必須のdestination-jndi-name要素は、JMS宛先のJNDI名を提供します。session-transacted要素がfalseである場合、セッションがトランザクション・セッションではないことを示します。
<jms-adapter>
<name>jms-inbound-adapter</name>
<event-type>TradeEvent</event-type>
<jndi-provider-url>t3://localhost:7101</jndi-provider-url>
<jndi-factory>weblogic.jndi.WLInitialContextFactory</jndi-factory>
<connection-jndi-name>JNDIName</connection-jndi-name>
<destination-jndi-name>Queue1</destination-jndi-name>
<session-transacted>false</session-transacted>
</jms-adapter>
デフォルトでは、インバウンドJMSアダプタはシングルスレッドです。インバウンドJMSアダプタがシングルスレッドであると、イベント順序が保証されます。
スケーラビリティを向上させるために、インバウンドJMSアダプタでマルチスレッドを使用してJMS宛先からメッセージを読み取るように構成できます。インバウンドJMSアダプタがマルチスレッドであると、イベント順序は保証されません。複数のスレッドを使用するには、work-manager子要素を使用してワーク・マネージャとともにアダプタを構成します。アダプタのみが使用する専用のワーク・マネージャを指定するか、他のアダプタやJettyなどのいくつかのコンポーネントでワーク・マネージャを共有できます。
JMSトピックへの恒久サブスクリプション内のクライアントになるように、インバウンドJMSアダプタを構成できます。恒久サブスクリプションでは、アダプタが非アクティブになった場合も、アダプタはパブリッシュされたメッセージを確実に受信します。インバウンド・アダプタがJMSサーバーに接続すると、恒久サブスクリプションが登録されます。それ以降にトピックに送信されるメッセージは、サブスクライバが切断されている間も保持され(期限切れではない場合)、再接続すると配信されます。
恒久サブスクリプションは、JMSメッセージをトピックにパブリッシュしているパブリッシャが永続配信モードを使用していることを前提とします。パブリッシャはOracle Event ProcessingのアウトバウンドJMSアダプタである(つまりdelivery-modeの値は、デフォルト値のpersistentである必要がある)ことに注意してください。
アダプタ内の恒久サブスクリプションの作成
JMSメッセージ・パブリッシャが永続モードでメッセージを配信していることを確認します。
接続ファクトリのクライアントIDを指定します。Oracle WebLogic Serverで、管理上、コンソールを使用して接続ファクトリにクライアントIDを設定できます。恒久サブスクライバを使用している各アダプタ・インスタンスに専用の接続ファクトリが構成されている必要があります。
次の3つのjms-adapterプロパティを設定します。
destination-typeをTOPICに設定します。
durable-subscriptionをtrueに設定します。
durable-subscription-nameを一意のサブスクリプション識別子に設定します。
アウトバウンドJMSアダプタは、イベントをJMSマップ・メッセージに変換し、JMSメッセージをJMS宛先に送信します。イベント・タイプが発信JMSメッセージに変換される方法を厳密に指定する独自のJavaクラスを作成することで、この変換をカスタマイズすることもできます。『Oracle Event Processingのカスタマイズ』の「カスタム・アダプタ」を参照してください。
アセンブリ・ファイル
<wlevs:adapter id="jms-outbound-adapter" provider="jms-outbound"/>
構成ファイル
JMSアウトバウンド・アダプタの構成は、JMSインバウンド・アダプタの構成とほぼ同じです。アウトバウンド・アダプタは、JMS宛先を指定し、JMS宛先にアクセスするためのユーザー名およびパスワードを提供します。このセッションはトランザクション・セッションであり、永続的ではありません。
<jms-adapter>
<name>jms-outbound-adapter</name>
<event-type>TradeEvent</event-type>
<jndi-provider-url>t3://localhost:7101</jndi-provider-url>
<jndi-factory>weblogic.jndi.WLInitialContextFactory</jndi-factory>
<connection-jndi-name>Topic</connection-jndi-name>
<destination-jndi-name>Queue2</destination-jndi-name>
<user>weblogic</user>
<password>welcome1</password>
<session-transacted>true</session-transacted>
<delivery-mode>nonpersistent</delivery-mode>
</jms-adapter>
JMSメッセージとイベント・タイプ間の変換をカスタマイズするには、インバウンド・コンバータBeanおよびアウトバウンド・コンバータBeanを作成し、これらをOracle Event Processingアプリケーションとともにパッケージ化します。
インバウンド・コンバータBeanおよびアウトバウンド・コンバータBeanは、次の2つのインバウンド・インタフェースおよびアウトバウンド・インタフェースでメソッドを実装します。これらのAPIの詳細は、Oracle Event Processing Java APIリファレンスを参照してください。
インバウンド: com.bea.wlevs.adapters.jms.api.InboundMessageConverter。convertメソッドを実装する必要があります。return値は、ダウンストリームで渡されるイベントのListです。
public List convert(Message message)
throws MessageConverterException, JMSException;
messageパラメータ: 着信JMSメッセージに対応します。
アウトバウンド: com.bea.wlevs.adapters.jms.api.OutboundMessageConverterインタフェース。convertメソッドを実装する必要があります。return値は、JMSメッセージのListです。
public List<Message> convert(Session session, Object event)
throws MessageConverterException, JMSException;
sessionパラメータ: メッセージの作成に使用されるjavax.jms.Session。
eventパラメータ: EPN内のソース・ステージから送信されてアウトバウンドJMSアダプタによって受信されるイベント。
Oracle Business Rules (OBR)アダプタは、Oracle Business Rules製品のビジネス・ルール・エンジンをラップするイベントBeanです。OBRアダプタを使用すると、イベントをファクトとしてアサートおよび取消しを行い、ビジネス・ルールをトリガーできます。
イベントを生成し、ビジネス・ロジックをOracle CQLプロセッサのダウンストリームに追加し、イベントを処理するようOBRルールを構成できます。たとえば、ルール・ファイル内でStreamSender.sendInsertEventを起動し、OBRアダプタからデータをイベントとして送信できます。
Oracle JDeveloperでは、アセンブリ・ファイルまたはEPN図に対してドラッグ・アンド・ドロップ・コンポーネントは提供されていませんが、構成ファイルに対してはドラッグ・アンド・ドロップ・コンポーネントが提供されています。
アセンブリ・ファイルにエントリを追加すること、およびOBRアダプタを構成ファイルにドラッグ・アンド・ドロップすることで、OBRアダプタを作成できます。エントリの追加によるOBRアダプタ作成の詳細は、OBRドキュメント(http://www.oracle.com/technetwork/middleware/business-rules/documentation/index.html)を参照してください。
アセンブリ・ファイル
event-type-repository要素は、アプリケーションのイベント・タイプ・リポジトリを指定します。次の例では、リポジトリにはHelloWorldEventという名前の単一のイベント・タイプがあり、リポジトリはHelloWorldEvent.javaクラスによって実装されます。
次のアダプタは、HelloWorldAdapter Javaクラスの値を使用してhelloworldAdapter IDと等しいidを指定します。アダプタはHelloWorldAdapter Javaクラスから作成されます。OBRアダプタ構成には、指定したメッセージ・テキストとともにmessage要素が含まれます。HelloWorldAdapterクラスは、アプリケーションの実行時にmessageを出力します。この例では、HelloWorldAdapterクラスがイベント・ソースです。
チャネルおよびOracle CQLプロセッサの構成の後に、OBRアダプタの宣言である<wlevs:adapter id="OBRAdapter" provider = "obr">が続き、その後ろにdecisionFunctionおよびdictionaryURLプロパティが続きます。dictionaryURLプロパティはルールが含まれるOBRディクショナリ・ファイルへのパスであり、decisionFunctionプロパティは使用するOBR関数です。handler1プロパティは、この情報にアクセスするための他のコンポーネントのハンドルです。
注:
OBRアダプタは、ファクトの自動取消しを処理しません。アップストリーム・プロセッサによってストリームが出力される場合、必要に応じて、またはルールの優先度に応じて最後のルールがトリガーされたら、ルール・ファイル内のファクトを取り消します。
最下部にあるのはHelloWorldBean構成です。HelloWorldBeanは、HelloworldEventおよびHelloWorldAdapterクラスをインスタンス化するJavaクラスです。
<wlevs:event-type-repository>
<wlevs:event-type type-name="HelloWorldEvent">
<wlevs:class>com.bea.wlevs.event.example.helloworld.HelloWorldEvent
</wlevs:class>
</wlevs:event-type>
</wlevs:event-type-repository>
<wlevs:adapter id="helloworldAdapter"
class="com.bea.wlevs.adapter.example.helloworld.HelloWorldAdapter" >
<wlevs:instance-property name="message" value="HelloWorld - The time is:"/>
</wlevs:adapter>
<wlevs:channel id="helloworldInputChannel" event-type="HelloWorldEvent" >
<wlevs:listener ref="helloworldProcessor"/>
<wlevs:source ref="helloworldAdapter"/>
</wlevs:channel>
<wlevs:processor id="helloworldProcessor" />
<wlevs:channel id="helloworldOutputChannel" event-type="HelloWorldEvent"
advertise="true" max-threads="0" max-size="0" >
<wlevs:listener ref="OBRAdapter"/>
<wlevs:source ref="helloworldProcessor"/>
</wlevs:channel>
<wlevs:adapter id="OBRAdapter" provider = "obr">
<wlevs:instance-property name="decisionFunction" value="handler1" />
<wlevs:instance-property name="dictionaryUrl" value="file:helloworld.rules"/>
<wlevs:listener ref="OutputBean"/>
</wlevs:adapter>
<wlevs:event-bean id="OutputBean"
class="com.bea.wlevs.example.helloworld.HelloWorldBean">
</wlevs:event-bean>
構成ファイル
この構成ファイルは、OBRアダプタから受信したHelloworldEventを処理するために使用される問合せルールおよびOracle CQLプロセッサを宣言します。また、OBRルールにアクセスするためのOBRアダプタのハンドラ(handler1)も提供します。dictionary-url要素は、使用する決定関数およびルールが含まれるOBRディクショナリ・ファイルへのパスを指定します。decision-function要素は、使用するOBR決定関数の名前を指定します。
<processor>
<name>helloworldProcessor</name>
<rules>
<query id="helloworldRule">
<![CDATA[ select * from helloworldInputChannel[range 10 slide 5] ]] >
select * from helloworldInputChannel[now]
</query>
</rules>
</processor>
<obr-adapter>
<name>OBRAdapter</name>
<dictionary-url>file:helloworld.rules</dictionary-url>
<decision-function>handler1</decision-function>
</obr-adapter>
Representational State Transfer (REST)インバウンド・アダプタは、HTTPプロトコルを介して外部クライアントからHTTPポスト・データを受信します。RESTアダプタでは、XML、CSVおよびJavaScript Object Notation (JSON)でデータを受信し、そのデータをインバウンドRESTアダプタで構成されたOracle Event Processingイベントに変換できます。
データをイベントに変換するために、RESTアダプタはJava Architecture for XML Binding (JAXB)マッパーおよびCSVマッパーを必要とします。マッパーは、受信データのマーシャリングおよびアンマーシャリングを実装するJavaBeanクラスです。
現在、Oracle JDeveloperには、RESTアダプタ用のコンポーネントは用意されていません。ただし、Oracle Event Processingアプリケーション用のアセンブリ・ファイルおよび構成ファイルにエントリを追加することにより、RESTアダプタを作成できます。
アセンブリ・ファイル
次のアセンブリ・ファイルは、XML、CSVおよびJSONタイプの入力データを処理するインバウンドRESTアダプタの設定を示します。
<bean id="xmlMapperBean" class="com.oracle.cep.mappers.jaxb.JAXBMapperFactory" factory-method="create" /> <bean id="csvMapperBean" class="com.oracle.cep.mappers.csv.CSVMapper" /> <bean id="jsonMapperBean" class="com.oracle.cep.mappers.jaxb.JAXBMapperFactory" factory-method="create" /> <wlevs:adapter id="restInbound" provider="rest-inbound"> <wlevs:instance-property name="mapper" ref="xmlMapperBean" /> <wlevs:instance-property name="csvMapper" ref="csvMapperBean" /> <wlevs:instance-property name="eventTypeName" value="CallCenterActivity" /> <wlevs:instance-property name="contextPath" value="/testhttpadapter" /> </wlevs:adapter>
次のアセンブリ・ファイルは、イベントをXMLまたはJSONコンテンツ・タイプにアンマーシャリングするアウトバウンドRESTアダプタの設定を示します。
<wlevs:adapter id="restXmlOutbound" provider="rest-outbound"> <wlevs:instance-property name="mapper" ref="xmlMapperBean" /> <wlevs:instance-property name="url" value="http://localhost:9002/testadapter" /> </wlevs:adapter> <wlevs:adapter id="restJsonOutbound" provider="rest-outbound"> <wlevs:instance-property name="mapper" ref="jsonMapperBean" /> <wlevs:instance-property name="url" value="http://localhost:9002/testadapter" /> </wlevs:adapter>
構成ファイル
次の構成ファイルは、POSTデータを受信するためのrest-adapter構成と受信XMLおよびJSONデータを処理するためのjaxb-mapper構成を示しています。
<rest-adapter>
<name>restInbound</name>
<event-type-name>CallCenterActivity</event-type-name>
<context-path>/testhttpadapter</context-path>
</rest-adapter>
<jaxb-mapper>
<name>xmlMapperBean</name>
<event-type-name>CallCenterActivity</event-type-name>
<metadata>external_metadata_case1.xml</metadata>
</jaxb-mapper>
<json-mapper>
<name>jsonMapperBean</name>
<event-type-name>CallCenterActivity</event-type-name>
<media-type>application/json</media-type>
</json-mapper>
次の構成ファイルは、イベントをXMLまたはJSONコンテンツ・タイプにアンマーシャリングするアウトバウンドRESTアダプタの設定を示しています。
<rest-adapter> <name>restXmlOutbound</name> <url>http://localhost:9002/testrestadapter</url> </rest-adapter> <rest-adapter> <name>restJsonOutbound</name> <url>http://localhost:9002/testrestadapter</url> </rest-adapter> <jaxb-mapper> <name>xmlMapperBean</name> <event-type-name>CallCenterActivity</event-type-name> <metadata>external_metadata_case1.xml</metadata> </jaxb-mapper> <json-mapper> <name>jsonMapperBean</name> <event-type-name>CallCenterActivity</event-type-name> <media-type>application/json</media-type> </json-mapper>
注:
XMLコンテンツ・タイプをRESTインバウンドおよびアウトバウンドのアダプタでサポートするには、XMLマッパーを使用します。XML注釈の追加またはJAXBバインディング・ファイルの自動生成は、このリリースではサポートされていません。RMIのインバウンド・アダプタおよびアウトバウンド・アダプタを使用して、RMI接続からのイベント情報の読取りおよびRMI接続へのイベント情報の書込みを行います。RMIアダプタを作成する上で最適な方法は、Oracle JDeveloperコンポーネント・ウィンドウを使用する方法です。
Oracle JDeveloperによって生成された次のアセンブリおよび構成ファイルは、RMIのインバウンド・アダプタおよびアウトバウンド・アダプタの構成を示します。
注意:
RMIクライアント接続を閉じることはできません。http://docs.oracle.com/javase/8/docs/technotes/guides/rmi/faq.htmlで、質問F1を参照してください。
アセンブリ・ファイル
インバウンドRMIアダプタにはJNDI名があり、これにより、インバウンド・クライアントはEPNを特定できます。
<wlevs:adapter id="rmi-inbound-adapter" provider="rmi-inbound">
<wlevs:instance-property name="jndiName"
value="TradeReportApplication.TradeReport/rmi-inbound-adapter"/>
</wlevs:adapter>
<wlevs:adapter id="rmi-outbound-adapter" provider="rmi-outbound"/>
構成ファイル
RMIアウトバウンド・アダプタは、JNDI名を使用してイベント・データの出力リソースを特定します。JNDIプロバイダにより、ディレクトリ・サービス実装をJNDIフレームワークにプラグインできるようになります。
次の例では、JNDIプロバイダはデフォルトのOracle WebLogic T3クライアントです。Oracle WebLogic T3クライアントは、Oracle T3プロトコルを使用してOracle WebLogic Serverと通信するJava RMIクライアントです。通常、T3クライアントは他のクライアント・タイプより性能が優れています。
<rmi-adapter>
<name>rmi-outbound-adapter</name>
<jndi-name>RMIOutboundJNDIName</jndi-name>
<jndi-provider-url>t3://localhost:7001</jndi-provider-url>
<jndi-factory>weblogic.jndi.WLInitialContextFactory</jndi-factory>
</rmi-adapter>