ヘッダーをスキップ
Oracle Fusion Middlewareリリース・ノート
11gリリース1(11.1.1) for HP-UX Itanium
B55937-01
  目次
目次

戻る
戻る
 
次へ
次へ
 

24 Oracle Complex Event Processing

この章では、Oracle Complex Event Processing(Oracle CEP)に関連する問題について説明します。内容は次のとおりです。

24.1 一般的な問題および回避方法

この項では、一般的な問題および回避方法について説明します。内容は次のとおりです。

24.1.1 非推奨のAPIおよびスキーマ

表24-1に、11gリリース1(11.1.1)で非推奨のJava APIとその代替API(存在する場合)を示します。

表24-1 非推奨のJava API

非推奨のAPI 代替API

com.bea.wlevs.ede.api.Stream

com.bea.wlevs.ede.api.EventChannel

com.bea.wlevs.ede.api.EventSender

com.bea.wlevs.ede.api.RelationSender

com.bea.wlevs.ede.api.StreamSender

com.bea.wlevs.ede.api.EventSink

com.bea.wlevs.ede.api.RelationSink

com.bea.wlevs.ede.api.StreamSink

com.bea.wlevs.ede.api.EventSource

com.bea.wlevs.ede.api.RelationSource

com.bea.wlevs.ede.api.StreamSource

イベントの記録および再生に関連するcom.bea.wlevs.management.configuration.StageMBeanのメソッド

com.bea.wlevs.management.configuration.RecordPlaybackMBean

RecordPlaybackMBeanを返すcom.bea.wlevs.management.configuration.StageMBeanのメソッドgetRecordPlaybackMBean


表24-2に、11gリリース1(11.1.1)で非推奨のOracle CEPスキーマとその代替スキーマ(存在する場合)を示します。

表24-2 非推奨のOracle CEPスキーマ

非推奨のスキーマ アセンブリ・ファイルで非推奨か コンポーネント構成ファイルで非推奨か 代替スキーマ

wlevs:stream

はい

はい

wlevs:channel

wlevs:metadata

はい

N/A

wlevs:property

wlevs:functionの属性epl-name

はい

N/A

wlevs:functionの属性function-name

wlevs:adapterの属性manageable

はい

N/A

なし。

wlevs:channelの属性manageable

はい

N/A

なし。

wlevs:adapterの属性monitoring

N/A

はい

なし。

wlevs:channelの属性monitoring

N/A

はい

なし。

wlevs:processorの属性monitoring

N/A

はい

なし。


非推奨のOracle CQL構文の詳細は、次の項を参照してください。

24.1.2 アダプタの変更

アダプタのプログラミング・モデルの変更箇所は、次のとおりです。

アウトバウンド・アダプタ

以前はインバウンド・アダプタのみでしたが、現在はアウトバウンド・アダプタもあります。

アダプタのライフサイクル・コールバック・メソッド

アダプタのSpringタグには、現在、EPNアセンブリ・ファイルを通じてライフサイクル・コールバック・メソッドを設定するための属性が含まれます。

実行可能アダプタ

スレッドで実行するアダプタでは、現在、そのJavaクラスでcom.bea.wlevs.ede.api.RunnableBeanを実装する必要があります。

アダプタ・ファクトリ

プログラマは、アダプタの作成時にアダプタ・ファクトリを作成する必要がなくなりました。アダプタ・ファクトリを作成する必要があるのは、アプリケーション間でアダプタを共有する場合のみです。

アダプタ・プロバイダの公開

アダプタ・プロバイダは、OSGiサービス・レジストリを通じて公開されるアダプタのファクトリです。

以前は、アダプタ・プロバイダを公開する唯一の方法は、次のようにSpring-DMを使用することでした。

<osgi:service interface="com.bea.wlevs.ede.api.AdapterFactory" ref="myBean">
    <osgi:service-properties>
        <entry key="type" value="SocketAdapterType"/>
    </osgi:service-properties>
</osgi:service>

ただし、Spring-DMでは同じアプリケーションでのOSGiサービスのエクスポートとインポートがサポートされないため、前述の方法は非推奨です。

現在は、次のようにwlevs:factoryタグを使用してプロバイダを宣言する必要があります。

<wlevs:factory provider-name="SocketAdapterType" ref="myBean">

この方法は、アダプタが同じアプリケーションに存在するかどうかにかかわらず、動作します。

現在、アダプタとプロバイダが同一の場所に(両方とも同じアプリケーションに)存在する場合、プロバイダの使用はオプションです。アダプタは、直接インスタンス化できるためです。

この変更に従わないと、アプリケーションが起動せず、最終的にタイムアウトする可能性があります。

OracleStockTickに置き換えられたStockTickイベント・タイプ

loadgenアダプタを使用する場合、StockTickイベントの名前がOracleStockTickになったことに注意してください。

24.1.3 デプロイヤ・ツールの新規および非推奨のオプション

デプロイヤ・ツールの-startおよび-stopコマンドは、非推奨になりました。

-installコマンドを使用してアプリケーションをインストールすると、Oracle CEPにより、すべての内部初期化タスクの完了後にそのアプリケーションが自動的に起動されます。その後、Oracle CEPサーバー・インスタンスを停止および起動すると、アプリケーションはそれに応じて自動的に停止および起動します。

デプロイヤ・ツールには、-suspendおよび-resumeという2つの新規オプションがあります。現在実行中のアプリケーションを一時停止する場合には-suspendを使用し、アプリケーションの実行を再開する場合には-resumeを使用してください。

詳細は、『Oracle CEP Administrator's Guide』のデプロイヤのコマンドライン・リファレンスに関する項を参照してください。

24.1.4 管理、監視およびJMXの変更

Oracle CEPの管理フレームワークは、今回のリリースで修正されました。

Oracle CEPでは、JRMPプロトコルがサポートされなくなりました。かわりに、JMXクライアントでは、Oracle CEP JMXサーバーにローカルおよびリモートからアクセスするために、よりセキュアなMSAプロトコルを使用する必要があります。localhost上またはリモート・ホスト上で稼働するOracle CEP JMXサーバーに接続する場合、常にMSAコネクタを使用するように、必ずJMX URL service:jmx:msarmi://HOST-NAME:PORT/jndi/jmxconnectorを使用する必要があります(HOST-NAMElocalhostまたはリモート・ホスト名で、PORTはOracle CEPサーバーのJNDIポートです)。

詳細は、次を参照してください。

  • 『Oracle CEP Administrator's Guide』のOracle CEP JMXサーバーへのアクセスに関する項

  • 『Oracle CEP Administrator's Guide』のJMXの構成に関する項

24.1.5 同じホストに存在する複数のサーバーでのstopwlevs.shの使用

同じホストで2つのサーバーを起動する環境について検討します。たとえば、ポート9002でリスニングするサーバー1と、ポート9022でリスニングするサーバー2があるとします。このとき、サーバー1のドメイン・ディレクトリでstopwlevs.shを使用すると、ポート9002でリスニングするサーバーは停止します。その後、サーバー2のドメイン・ディレクトリでstopwlevs.shを使用すると、接続リセット・エラーのために停止操作に失敗します。

回避方法: stopwlevs.shコマンドラインの引数-urlまたは-listenPortを使用して、9002以外のポートを指定します。

24.1.6 監視サービスがアプリケーション・タイムスタンプ・チャネルの待機時間を過少に見積る問題

監視サービスは、アプリケーション・タイムスタンプ・チャネルが使用されており、is-totally-orderedが有効化されていない場合、CQLプロセッサを通じて処理されているイベントの待機時間を過少に見積る可能性があります。

24.1.7 JConsoleを使用してOracle CEPサーバーに接続するとスローされるNULLポインタ例外

wlevsjconsole.shスクリプトの有無にかかわらず)JConsoleを使用してOracle CEPサーバーに接続すると、JConsoleでjava.lang.NullPointerExceptionがスローされることがあります。

回避方法: 例外のダイアログ・ボックスで「OK」をクリックし、操作を続けます。この例外は、JMX接続やOracle CEPサーバーに影響しません。

24.1.8 今回のリリースでサポートされない可変期間の非イベント検出

固定期間の非イベント・パターン検出は、11gリリース1(11.1.1)でサポートされます。固定期間の非イベント検出用の問合せを作成する場合、定数値と時間単位(DURATION 5 SECONDSなど)または定数値のみ(DURATION 5など)を含むDURATION句を使用できます。

可変期間の非イベント・パターン検出は、11gリリース1(11.1.1)でサポートされません。つまり、DURATION c1+4などの任意の演算式を含むDURATION句は、使用できません

繰返しの非イベント・パターン検出は、11gリリース1(11.1.1)でサポートされますが、固定期間のみが対象です。つまり、MULTIPLES OF句を含むDURATION句は、使用できますが、定数値の期間のみが対象です。

この問題に関連するドキュメントの訂正箇所は、24.3.7項「今回のリリースでサポートされない可変期間の非イベント検出」を参照してください。

24.1.9 新規接続およびユーザー/パスワード用のJMSAdapterMBean getterメソッド

次のメソッドがcom.bea.wlevs.management.configuration.JMSAdapterMBeanに追加されました。

  • getConnectionUser

  • getConnectionPassword

  • getConnectionEncryptedPassword

次の属性がwlevs_application_config.xsdの要素jms-adapterに追加されました。

  • connection-user

  • connection-password

  • connection-encrypted-password

Oracle CEPでJNDI InitialContextを取得する場合、userおよびpassword(またはencrypted-password)設定を使用します。

Oracle CEPでjavax.jms.ConnectionFactorycreateConnectionメソッドをコールしてJMS宛先(JMSキューまたはトピック)に対する接続を作成する場合、connection-userおよびconnection-password(またはconnection-encrypted-password)設定を使用します(構成されている場合)。それ以外の場合、Oracle CEPではuserおよびpassword(またはencrypted-password)設定を使用します。

1つのセキュリティ・プロバイダがJNDIアクセスに使用されており、もう1つのセキュリティ・プロバイダがJMSアクセスに使用されているアプリケーションでは、connection-userおよびconnection-password(またはconnection-encrypted-password)設定を使用できます。

24.2 構成の問題および回避方法

この項では、構成に関する問題およびその回避方法について説明します。内容は次のとおりです。

24.2.1 WindowsでのFirefoxバージョン3.0によるシグナル生成ダッシュボードへのアクセス

WindowsでFirefoxブラウザ・バージョン3.0を使用してシグナル生成サンプル・ダッシュボード(URL http://localhost:9002/signalgeneration/dashboard.html)にアクセスすると、「開始」のクリック時にエラーが発生します。

回避方法: Internet Explorerバージョン7を使用してシグナル生成サンプル・ダッシュボードにアクセスします。

24.2.2 デプロイ済アプリケーションのないドメインでのサーバーの起動

デプロイ済アプリケーションのないドメインでサーバーを起動すると、サーバーが正常に起動しても、サーバー起動スクリプトを実行したコマンド・ウィンドウにサーバーの起動を示すメッセージが表示されないことがあります。

24.2.3 VPNソフトウェアとマルチキャスト・トラフィック

アクティブなVPNソフトウェアは、マルチキャスト・トラフィックにおいて予期しない動作をすることが知られています。また、Cisco VPNとNortel VPNの両方をインストールすると、マルチキャスト・トラフィックに障害が発生します。

24.2.4 FirefoxでのOracle CEP Visualizerの起動

Firefoxブラウザ(バージョン3.0、SSLおよびJDK 1.6)でOracle CEP Visualizerを使用すると、Oracle CEP Visualizerのページに最初にアクセスしたときに、レンダリングに時間がかかります(最大30秒かかることもあります)。

24.2.5 FirefoxおよびSSLによるOracle CEP Visualizerを使用したファイルのアップロード

Oracle CEP Visualizerの使用時に、FirefoxブラウザとSSLを使用してファイルをアップロードしようとすると、エラーが発生することがあります。

これは、Oracle CEP Visualizerに影響するAdobe Flexの既知の問題です(http://bugs.adobe.com/jira/browse/FP-226)。

24.2.6 Oracle CQLプロセッサに接続されている場合にチャネルで外部ステージを使用できない問題

チャネルがOracle CQLプロセッサに接続されている場合、そのチャネルに外部ステージは使用できません。

24.2.7 FireFoxでOracle CEP Visualizerを使用する場合にスローされる例外

FireFoxでOracle CEP Visualizerを使用する場合:

  • Jettyスクラッチ・ディレクトリに空白を含んだパスを設定しないでください。設定すると、FileNotFoundExceptionが発生します。

  • サーバー側でスローされるEOFExceptionは無視してください。これらの例外により、クライアント側で障害が発生することはありません。

24.2.8 Linux上のFireFox 3の必須ライブラリと互換性のないOracle CEP IDE for Eclipse

Oracle CEP IDE for Eclipseでは、Linux上のFireFox 3の必須ライブラリと互換性のないEclipse 3.3を使用します。そのため、Eclipseは、起動時に次のようなJVMコア・ダンプおよびエラー・メッセージとともにクラッシュします。

# An unexpected error has been detected by Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x00bc80ac, pid=18044, tid=3086637584
#
# Java VM: Java HotSpot(TM) Client VM (11.3-b02 mixed mode, sharing
linux-x86)
# Problematic frame:
# C  [libc.so.6+0x710ac]  memcpy+0x1c
#
# An error report file with more information is saved as:
# /usr/local/bt/workspace/testruntime/eclipse/hs_err_pid18044.log

回避方法: 次の手順を実行します。

  1. Linuxマシンでrootユーザーに変更します。

  2. 次のように、コア・ダンプ・エラー・メッセージに記録されているlibc.soをEclipseでロードしないようにします。

    mv libc.so libc.so.orig
    

    注意:

    これにより、FireFox 3は現在のマシンで無効化されます。FireFox 3を使用するには、このライブラリの名前をlibc.soに戻す必要があります。

  3. 次のEclipse Linuxクラッシュ・サポートWikiページに記載されている指示に従います。

    http://wiki.eclipse.org/IRC_FAQ#I_just_installed_Eclipse_on_Linux.2C_but_it_does_not_start._What_is_the_problem.3F

    特に、Eclipseと組み合せて使用しているJVMが次の要件を満たしていることを確認します。

    • JVMがeclipse.iniファイルで明示的に指定されていること

    • JDK 1.6以上であること

24.2.9 IPv6を使用したLinux上でのOracle CEPネイティブ・クラスタリングの構成

IPv6と組み合せてLinux上でOracle CEPネイティブ・クラスタリングを使用すると、クラスタ・メンバーの再起動後に例24-1のようなエラーが発生することがあります。

例24-1 Oracle CEPサーバー・ログのevs4jエラー

<Error> <evs4j> <BEA-2049005> <The cluster member 3 is considered to have failed>

回避方法: 次の手順を実行します。

  1. 任意のエディタを使用して、関連するOracle CEPサーバー用のstartwlevs.shスクリプトを開きます。

    startwlevs.shサーバー起動スクリプトは、メイン・ドメイン・ディレクトリ内のサーバー・ディレクトリにあります。たとえば、HelloWorldドメインのデフォルト・サーバー・ディレクトリの場所は、ORACLE_CEP_HOME/ocep_11.1/samples/domains/helloworld_domain/defaultserverです(ORACLE_CEP_HOMEは、/oracle_cepなどのメインのOracle CEPインストール・ディレクトリを示します)。

  2. startwlevs.shスクリプトを編集し、次のように-Djava.net.preferIPv4Stack=trueプロパティをjavaコマンドラインに追加します。

    "$JAVA_HOME/bin/java" $JVM_ARGS $DEBUG_ARGS -Djava.net.preferIPv4Stack=true  -Dwlevs.home="$USER_INSTALL_
    DIR" -Dbea.home="$BEA_HOME" -jar "${USER_INSTALL_DIR}/bin/wlevs.jar" $ARGS
    
  3. startwlevs.shスクリプトを保存して閉じます。

  4. 変更したstartwlevs.shスクリプトを使用して、関連するOracle CEPサーバーを起動します。

24.2.10 loadgenでサポートされないマルチバイト・キャラクタ

loadgenユーティリティでは、ASCII文字のみがサポートされます。マルチバイト・キャラクタ・セットはサポートされません。

24.2.11 キーストアと秘密鍵のパスワードが異なる場合にOracle CEPサーバーが起動しない問題

キーストアのパスワードとSSL秘密鍵の別名は、同じである必要があります。異なる場合、Oracle CEPサーバーは起動しません。

詳細は、24.3.12項「キーストアと秘密鍵のパスワードが異なる場合にOracle CEPサーバーが起動しない問題」を参照してください。

24.3 ドキュメントの訂正箇所

この項では、ドキュメントの訂正箇所を示します。内容は次のとおりです。

24.3.1 インストーラ・ファイル名の間違い

次の項のインストーラ・ファイルの名前は、間違っています。

  • 『Oracle CEP Getting Started』のグラフィカル・モードでのOracle CEPのインストールに関する項

  • 『Oracle CEP Getting Started』のコンソール・モードでのOracle CEPのインストールに関する項

表24-3に、サポートされる各プラットフォームの正しいインストーラ・ファイル名を示します。

表24-3 Oracle CEPインストーラ

プラットフォーム インストーラ・ファイル名

Linux 32ビット

ofm_ocep_linux_11.1.1.1.0_32_disk1_1of1.bin

Linux x86 64ビット

ofm_ocep_linux_11.1.1.1.0_64_disk1_1of1.bin

Solaris 64ビット

ofm_ocep_solaris_11.1.1.1.0_64_disk1_1of1.bin


24.3.2 追加のOracle CEPサンプルに関する記載の欠落

『Oracle CEP Getting Started』のディストリビューション・キットで提供されるサンプルの概要に関する項には、次の情報が必要です。

「追加のOracle CEPサンプル・コードは、http://www.oracle.com/technology/sample_code/products/event-driven-architectureで入手できます。」

24.3.3 Colt集計関数の不完全な出力例

『Oracle CEP CQL Language Reference』のColt集計関数に関する項には、次の関数の不完全な出力例が含まれます。

  • AUTOCORRELATION

  • DURBINWATSON

  • HARMONICMEAN

  • SAMPLESTANDARDDEVIATION

  • TRIMMEDMEAN

24.3.4 インタフェースを実装しないユーザー定義の単一行関数

『Oracle CEP CQL Language Reference』のユーザー定義の単一行関数の実装方法に関する項の導入部分に、次の記載があります。

「ユーザー定義の単一行関数を実装するには、SingleElementFunctionインタフェースを実装するJavaクラスを実装します。」

正しくは、次のようになります。

「ユーザー定義の単一行関数を実装するには、パブリック・コンストラクタと、関数の実行時に起動されるパブリック・メソッドを提供するJavaクラスを実装します。」

この説明の手順2は、正しくは次のとおりです。

例24-2に示すとおり、ユーザー定義関数のJava実装クラスをコンパイルし、そのクラスをOracle CEPアプリケーション・アセンブリ・ファイルに登録します。

例24-2 Oracle CQLプロセッサ用のユーザー定義の単一行関数

<wlevs:processor id="testProcessor">
    <wlevs:listener ref="providerCache"/>
    <wlevs:listener ref="outputCache"/>
    <wlevs:cache-source ref="testCache"/>
    <wlevs:function function-name="mymod" exec-method="execute" />
        <bean class="com.bea.wlevs.example.function.MyMod"/>
    </wlevs:function>
</wlevs:processor>

wlevs:function要素のexec-method属性を使用して、関数の実行時に起動するメソッドを指定します。このメソッドは、パブリックであり、その名前で一意に識別される必要があります(つまり、オーバーライドされていないメソッドです)。

詳細は、『Oracle CEP IDE Developer's Guide for Eclipse』のwlevs:functionに関する項を参照してください。」

24.3.5 JMSアダプタ・プロパティのトピックの欠落

『Oracle CEP Visualizer User's Guide』のステージ構成の表示および変更に関する項には、JMSアダプタ・ステージに関するトピックが欠落しています。

24.3.6 個別モジュールの重大度を構成する手順から欠落しているコンポーネント名の定数

『Oracle CEP Administrator's Guide』の個別モジュールの重大度の構成に関する項には、使用できる有効なロギング・コンポーネント名の定数が欠落しています。表24-4に、完全なリストを示します。

表24-4 ロギング・コンポーネント名の定数

コンポーネント名の定数 説明

Adapters

Oracle CEPサーバー上で稼働するアダプタ・インスタンスからのログ・メッセージに適用されます。

Cache

Oracle CEPサーバー上で稼働するキャッシュ・システムおよびキャッシュ・インスタンスからのログ・メッセージに適用されます。

Channel

Oracle CEPサーバー上で稼働するチャネルからのログ・メッセージに適用されます。

CQLProcessor

Oracle CEPサーバー上で稼働するOracle CQLプロセッサからのログ・メッセージに適用されます。

EplProcessor

Oracle CEPサーバー上で稼働するEPLプロセッサからのログ・メッセージに適用されます。

Ede

イベントドリブン環境(Oracle CEPサーバーのイベント・ディスパッチ・インフラストラクチャ)からのログ・メッセージに適用されます。

EventTrace

InfoまたはDebugに設定すると、すべてのアプリケーションのEPNを経由するイベントをトレースできます。このログ・キーの重大度は、Oracle CEP Visualizerを使用して動的に変更できます。

Infoの重大度では、次のようなログ・メッセージが出力されます。

<May 26, 2009 5:53:49 PM PDT> <Info> <EventTrace> 
<BEA-000000> <Application [helloworld], Stage 
[helloworldOutputChannel] received insert event>

Debugの重大度では、ログ・メッセージに次のようなイベントの詳細が含まれます。

<May 26, 2009 6:02:34 PM PDT> <Debug> <EventTrace> 
<BEA-000000> <Application [helloworld], Stage 
[helloworldOutputChannel] received insert event [HelloWorldEvent: HelloWorld 
- the current time is: 6:02:34 PM]>

Lifecycle

Oracle CEPサーバーおよびアプリケーション・ライフサイクル操作からのログ・メッセージに適用されます。

Management

Oracle CEPサーバーの一般的なJMX関連の管理API操作からのログ・メッセージに適用されます。

Monitor

Oracle CEPサーバーの監視サービスからのログ・メッセージに適用されます。

Recplay

Oracle CEPサーバーのイベント記録および再生操作からのログ・メッセージに適用されます。

Spring

Springコンテナ操作からのログ・メッセージに適用されます。

Stream

Oracle CEPサーバー上で稼働するストリーム・インスタンスからのログ・メッセージに適用されます。


24.3.7 今回のリリースでサポートされない可変期間の非イベント検出

『Oracle CEP CQL Language Reference』のDURATION句に関する項には、非イベント検出用のDURATION句の使用について記載されています。この項では、次の検出タイプを区別する必要があります。

  • 固定期間の非イベント検出では、定数値と時間単位、または定数値のみを含むDURATION句を使用します。

  • 可変期間の非イベント検出では、任意の演算式を含むDURATION句を使用します。

  • 繰返しの非イベント検出では、MULTIPLES OF句を含むDURATION句を使用します。

固定期間の非イベント・パターン検出は、11gリリース1(11.1.1)でサポートされます。固定期間の非イベント検出用の問合せを作成する場合、定数値と時間単位(DURATION 5 SECONDSなど)または定数値のみ(DURATION 5など)を含むDURATION句を使用できます。

可変期間の非イベント・パターン検出は、11gリリース1(11.1.1)でサポートされません。つまり、DURATION c1+4などの任意の演算式を含むDURATION句は、使用できません

繰返しの非イベント・パターン検出は、11gリリース1(11.1.1)でサポートされますが、固定期間のみが対象です。つまり、MULTIPLES OF句を含むDURATION句は、使用できますが、定数値の期間のみが対象です。

『Oracle CEP CQL Language Reference』の非イベント検出に関する項は、正しくは固定期間の非イベント検出に関する項になります。

24.3.8 DURATION句の例の間違い

『Oracle CEP CQL Language Reference』のDURATION句に関する項の次の例は、間違っています。正しくは次のようになります。

  • 例15-8 DURATION句を含むMATCH_RECOGNIZEのストリーム出力

    Timestamp   Tuple Kind  Tuple11000:      +           10,8825000:      +           10,38000:      +           
    10,1850000:      +           10,1962000:      +           1
    0,
    
  • 例15-11 DURATION MULTIPLES OF句を含むMATCH_RECOGNIZEのストリーム出力

    Timestamp   Tuple Kind  Tuple 11000:     +           10,88,637 25000:     +           10,, 38000:     +           
    10,18,18 48000:     +           10,19,37 58000:     +           10,19,37 68000:     +           
    10,20,57 82000:     +           10,, 92000:     +           10,,102000:     +           
    10,,112000:     +           10,,
    

例15-8の後にある次の段落は、間違っています。

「11000の時点までに到着する追加のタプルは、すべてBに一致します。期間が10のため、1000+10000=11000の時点で一致が出力されます。正規表現パターンAB*のワイルド・カード*は、可能なかぎり多くのBと一致させることを示すため、Bに一致するタプルの最後が選択されます(値15を含むもの)。1000〜11000のタプルの順序は、パターンAB*のみに一致しているため、一致は11000の時点でレポートされます。」

この記載は、正しくは次のとおりです。

「期間が10のため、1000+10000=11000の時点で入力が取得されると同時に一致が出力されます(値12を含むもの)。1000〜9000のタプルの順序は、パターンAB*のみに一致しているため、一致は11000の時点で入力が取得されると同時にレポートされます。」

24.3.9 非推奨の外部結合演算子(+)

『Oracle CEP CQL Language Reference』の比較条件に関する項には、非推奨の外部結合演算子(+)について記載されています。(+)結合演算子は使用しないことをお薦めします。後述するLEFT OUTER JOINおよびRIGHT OUTER JOIN構文を使用してください。

『Oracle CEP CQL Language Reference』の外部結合に関する項には、非推奨の外部結合演算子(+)について記載されています。この項は、正しくは次のようになります。

外部結合は、単純な結合の結果を拡張します。外部結合は、結合条件を満たすすべての行を返すと同時に、一方の表の行が結合条件を満たさなくても、他方の表の一部または全部の行を返します。

例24-3は、ストリームS0(スキーマ(c1 integer, c2 float)付き)とS1(スキーマ(c1 integer, c2 float)付き)で左側外部結合を使用する問合せq5の作成方法を示しています。

例24-3 外部結合

<query id="q5"><![CDATA[
    SELECT a.c1+b.c1
    FROM S0[range 5] AS a LEFT OUTER JOIN S1[range 3] AS b
    ON b.c2 = a.c2
    WHERE b.c2 > 3
]]></query>

ON句を使用して結合条件を指定します。これにより、WHERE句の検索条件またはフィルタ条件とは別に結合条件を指定できます。

次のタイプの外部結合を実行できます。

24.3.9.1 左側外部結合

ストリームAおよびBの外部結合を実行し、Aからのすべてのストリーム要素を返す問合せ(左側外部結合)を記述するには、例24-4のようにFROM句でLEFT OUTER JOIN構文を使用します。Bのストリーム要素に一致しないAのすべてのストリーム要素に関して、Oracle CEPは、Bのストリーム要素を含む任意の選択リスト式に対してNULLを返します。

例24-4 左側外部結合

<query id="q5"><![CDATA[
    SELECT a.c1+b.c1
    FROM S0[range 5] AS a LEFT OUTER JOIN S1[range 3] AS b
    ON b.c2 = a.c2
    WHERE b.c2 > 3
]]></query>

24.3.9.2 右側外部結合

ストリームAおよびBの外部結合を実行し、Bからのすべてのストリーム要素を返す問合せ(右側外部結合)を記述するには、例24-5のようにFROM句でRIGHT OUTER JOIN構文を使用します。Aのストリーム要素に一致しないBのすべてのストリーム要素に関して、Oracle CEPは、Aのストリーム要素を含む任意の選択リスト式に対してNULLを返します。

例24-5 右側外部結合

<query id="q5"><![CDATA[
    SELECT a.c1+b.c1
    FROM S0[range 5] AS a RIGHT OUTER JOIN S1[range 3] AS b
    ON b.c2 = a.c2
    WHERE b.c2 > 3
]]></query>

24.3.10 パッチ・クライアントに関する項の欠落

『Oracle CEP Getting Started』のOracle CEPのインストールに関する項には、パッチ・クライアントの使用に関する情報が欠落しています。

詳細は、『Oracle Smart Update Installing Patches and Maintenance Packs』を参照してください。

24.3.11 Oracle CEP Visualizerのアクセスにおけるシングル・ポイント障害の回避

『Oracle CEP Administrator's Guide』のOracle CEPネイティブ・クラスタリングを使用したOracle CEPマルチサーバー・ドメインの作成に関する項と、『Oracle CEP Administrator's Guide』のOracle Coherenceを使用したOracle CEPマルチサーバー・ドメインの作成に関する項には、次の手順が含まれます。

「パフォーマンスを向上するため、ドメイン内の1つを除くすべてのサーバーに対するOracle CEP Visualizerのアクセスを無効化することを検討してください。」

この記載は、正しくは次のとおりです。

「シングル・ポイント障害を回避するため、ドメイン内にあるn台のマシンの小規模なサブセットでOracle CEP Visualizerを有効化することを検討してください。特定のOracle CEPサーバーでOracle CEP Visualizerを有効化すると、Oracle CEP Visualizerのワークロードによっては、サーバーのパフォーマンスが影響を受けます。」

24.3.12 キーストアと秘密鍵のパスワードが異なる場合にOracle CEPサーバーが起動しない問題

『Oracle CEP Administrator's Guide』のグラフィカル・モードの構成ウィザードを使用したOracle CEPスタンドアロン・サーバー・ドメインの作成に関する項には、手順11に次の記載があります。

「Oracle CEPドメイン・アイデンティティ・キーストアのパスワードを入力して確認します。

デフォルトでは、証明書の秘密鍵のパスワードはアイデンティティ・キーストアと同じになります。異なるパスワードにする場合、キーストア・パスワードの使用の選択を解除し、秘密鍵のパスワードを入力します。」

この記載は、正しくは次のとおりです。

「Oracle CEPドメイン・アイデンティティ・キーストアのパスワードを入力して確認します。

デフォルトでは、証明書の秘密鍵のパスワードはアイデンティティ・キーストアと同じになります。異なる場合、Oracle CEPサーバーは起動しません。キーストア・パスワードの使用の選択を解除して秘密鍵のパスワードを入力しないでください。」

『Oracle CEP Administrator's Guide』のネットワーク・トラフィックを保護するためのSSLの構成に関する項には、次の手順が欠落しています。

24.3.12.1 キーストアを手動で作成する方法

デフォルトでは、構成ウィザードにより、evsidentity.jksというデフォルトのキーストア証明書ファイルがDOMAIN_DIR/servername/sslディレクトリに作成されます。そのパスワードは、構成ウィザードでサーバーを作成したときに入力したものと同じです。オプションで、独自のキーストアを手動で作成できます。

キーストアを手動で作成する手順:

  1. JDK keytoolコマンドを使用してキーストアを生成します。

    keytool -genkey -alias evsidentity -keyalg RSA -validity 10958 -keystore evsidentity.jks -keysize 1024
    
  2. プロンプトに従って、キーストアのパスワードを入力します。

    Enter keystore password:
    
  3. プロンプトに従って、キーストアの属性を入力します。

    What is your first and last name?
      [Unknown]:  CEP
    What is the name of your organizational unit?
      [Unknown]:  SOA
    What is the name of your organization?
      [Unknown]:  ORACLE
    What is the name of your City or Locality?
      [Unknown]:  SF
    What is the name of your State or Province?
      [Unknown]:  CA
    What is the two-letter country code for this unit?
      [Unknown]:  US
    Is CN=CEP, OU=SOA, O=ORACLE, L=SF, ST=CA, C=US correct?
      [no]:  y
    
  4. キー・パスワードを要求されても、パスワードを入力せずに[Enter]を押します。

    Enter key password for <evsidentity>
            (RETURN if same as keystore password):
    

    注意:

    証明書の秘密鍵のパスワードがアイデンティティ・キーストアのパスワードと異なる場合、Oracle CEPサーバーは起動しません。

  5. 任意のXMLエディタを使用してOracle CEPサーバーのconfig.xmlファイルを開きます。

    デフォルトでは、構成ウィザードにより、ORACLE_CEP_HOME/user_projects/domains/DOMAIN_DIR/servername/configディレクトリにconfig.xmlファイルが作成されます(ORACLE_CEP_HOMEd:/oracle_cepなどのOracle CEPインストール・ディレクトリを、DOMAIN_DIRmy_domainなどのドメイン・ディレクトリを、servernameserver1などのサーバー・インスタンス・ディレクトリを示します)。

  6. ssl要素を構成します。

    例24-6に、構成ウィザードで作成されるデフォルトのssl要素を示します。

    例24-6 デフォルトのssl要素

    <ssl>
        <name>sslConfig</name>
        <key-store>KEYSTORE_PATH</key-store>
        <key-store-pass>
            <password>PASSWORD</password>
        </key-store-pass>
        <key-store-alias>KEYSTORE_ALIAS</key-store-alias>
        <key-manager-algorithm>SunX509</key-manager-algorithm>
        <ssl-protocol>TLS</ssl-protocol>
        <enforce-fips>false</enforce-fips>
        <need-client-auth>false</need-client-auth>
    </ssl>
    

    変数の意味は次のとおりです。

    • KEYSTORE_PATHは、キーストア・ファイルへのファイル・パスです(ファイル名は、keytoolコマンドの-keystore引数に基づきます)。

    • PASSWORDは、クリアテキストのキーストア・パスワードです。

    • KEYSTORE_ALIASは、キーストア別名です(keytoolコマンドの-alias引数に基づきます)。

  7. config.xmlファイルを保存して閉じます。

  8. encryptMSAConfigユーティリティを使用して、config.xmlファイルのkey-store-pass要素のpassword子要素に含まれるクリアテキスト・パスワードを暗号化します。

    『Oracle CEP Administrator's Guide』のencryptMSAConfigコマンドライン・ユーティリティに関する項を参照してください。

24.3.13 サポートされないColt関数のDurbinWatsonおよびsampleStandardDeviation

Oracle CEPでは、Colt関数のDurbinWatsonおよびsampleStandardDeviationはサポートされません。

次の項は省略してください。

  • 『Oracle CEP CQL Language Reference』のDURBINWATSONに関する項

  • 『Oracle CEP CQL Language Reference』のSAMPLESTANDARDDEVIATIONに関する項

24.3.14 小文字にする必要のあるOracle CQL組込み関数の名前

次の項では、すべての組込み関数の名前を小文字にする必要があります。

  • 『Oracle CEP CQL Language Reference』の単一行関数に関する項

  • 『Oracle CEP CQL Language Reference』の集計関数に関する項

  • 『Oracle CEP CQL Language Reference』のColt単一行関数に関する項

  • 『Oracle CEP CQL Language Reference』のColt集計関数に関する項

  • 『Oracle CEP CQL Language Reference』のjava.lang.Math関数に関する項

24.3.15 アダプタのサンプル・ソースで使用されている非推奨のAPI

『Oracle CEP IDE Developer's Guide for Eclipse』のイベント・ソースおよびイベント・シンクに関する項には、非推奨のEventSourceおよびEventSink APIが記載されています。かわりに、API StreamSinkおよびRelationSinkと、StreamSourceおよびRelationSourceを使用する必要があります。

同様に、『Oracle CEP IDE Developer's Guide for Eclipse』の次の項でも、非推奨のEventSourceおよびEventSink APIのかわりにAPI StreamSinkおよびRelationSinkと、StreamSourceおよびRelationSourceを使用する必要があります。

24.3.15.1 イベント・ソースとしてのアダプタまたはイベントBeanの実装

『Oracle CEP IDE Developer's Guide for Eclipse』のイベント・ソースとしてのアダプタまたはイベントBeanの実装に関する項は、正しくは次のようになります。

この項では、イベント・ソースとして機能するインバウンド・アダプタの作成方法について説明します。このアダプタは、着信データを受信し、EPNの次のコンポーネントに送信するイベントを生成します。イベントBeanは、機能的に同じものであるため、このガイドラインはイベント・ソースとして機能するイベントBeanのプログラミングにも適用されます。

インバウンド・アダプタ・クラスは、通常、マーケット・データ・フィードなどから着信データのストリームを読み取り、それを残りのアプリケーションが認識できるOracle CEPイベント・タイプに変換します。その後、そのイベントをネットワーク内の次のコンポーネントに送信します。

次の例は、HelloWorldサンプルのアダプタ・クラスを示しています。太字のJavaコードに対応するコーディング・ガイドラインについて、例の後の説明を参照してください。

package com.bea.wlevs.adapter.example.helloworld;

import java.text.DateFormat;
import java.util.Date;

import com.bea.wlevs.ede.api.RunnableBean;
import com.bea.wlevs.ede.api.StreamSender;
import com.bea.wlevs.ede.api.StreamSource;
import com.bea.wlevs.event.example.helloworld.HelloWorldEvent;

public class HelloWorldAdapter implements RunnableBean, StreamSource {

    private static final int SLEEP_MILLIS = 300;

    private DateFormat dateFormat;
    private String message;
    private boolean suspended;

    private StreamSender eventSender;

    public HelloWorldAdapter() {
        super();
        dateFormat = DateFormat.getTimeInstance();
    }

    public void run() {
        suspended = false;
        while (!isSuspended()) { // Generate messages forever...

            generateHelloMessage();

            try {
                synchronized (this) {
                    wait(SLEEP_MILLIS);
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    public void setMessage(String message) {
        this.message = message;
    }

    private void generateHelloMessage() {
        String message = this.message + dateFormat.format(new Date());
        HelloWorldEvent event = new HelloWorldEvent();
        event.setMessage(message);

        eventSender.sendInsertEvent(event);
    }

    public void setEventSender(StreamSender sender) {
        eventSender = sender;
    }

    public synchronized void suspend() {
        suspended = true;
    }

    private synchronized boolean isSuspended() {
        return suspended;
    }
}

アダプタJavaクラスをプログラミングする場合、次のガイドラインに従ってください(ガイドラインのコード・スニペットは、前述の例で太字で示されています)。

  • Oracle CEP APIのインタフェースとクラスをインポートします。

    import com.bea.wlevs.ede.api.StreamSender;
    import com.bea.wlevs.ede.api.StreamSource;
    import com.bea.wlevs.ede.api.RunnableBean;
    

    アダプタは、イベント・ソースであるため、StreamSourceインタフェースを実装する必要があります。アダプタをスレッドで実行する場合、RunnableBeanも実装する必要があります。StreamSenderインタフェースは、アプリケーション・ネットワーク内の次のコンポーネントにイベント・タイプを送信します。これらのAPIの詳細は、『Oracle CEP Java API Reference』を参照してください。

  • アプリケーションで使用されるイベント・タイプを表すアプリケーション固有のクラスをインポートします。

    import com.bea.wlevs.event.example.helloworld.HelloWorldEvent
    

    com.bea.wlevs.event.example.helloworld.HelloWorldEventクラスは、アプリケーションで使用されるイベント・タイプを表すJavaBeanです。

  • アダプタ・クラスは、イベント・ソースであり、独自のスレッドで実行するため、StreamSourceおよびRunnableBeanインタフェースを実装する必要があります。

    public class HelloWorldAdapter implements RunnableBean, StreamSource {
    

    StreamSourceインタフェースは、イベントの送信に使用されるStreamSenderを提供します。

  • アダプタでは、RunnableBeanインタフェースを実装するため、run()メソッドを実装する必要があります。

    public void run() {...
    

    この部分に、マーケット・フィードなどから着信データを読み取り、Oracle CEPイベント・タイプに変換して、そのイベントをネットワーク内の次のコンポーネントに送信するコードを配置する必要があります。着信データの読取り方法の詳細は、使用しているデータ・フィード・プロバイダのドキュメントを参照してください。ベンダーAPIがサード・パーティJARファイルにパッケージされている場合に、それらのAPIに確実にアクセスする方法の詳細は、サード・パーティJARファイルへのアクセスに関する項を参照してください。

    HelloWorldの例では、アダプタ自体がgenerateHelloMessage()プライベート・メソッドを使用して着信データを生成します。これは、単なる説明目的の例であり、現実的な使用例ではありません。generateHelloMessage()メソッドには、次のように典型的な他のイベント・タイプ・プログラミング・タスクも含まれます。

    HelloWorldEvent event = new HelloWorldEvent();
    event.setMessage(message);
    
    eventSender.sendInsertEvent(event);
    

    HelloWorldEventは、HelloWorldの例で使用されるイベント・タイプです。イベント・タイプは、JavaBeanで実装され、<wlevs:event-type-repository>タグの使用によりEPNアセンブリ・ファイルに登録されます。詳細は、Oracle CEPイベント・タイプの作成に関する項を参照してください。setMessage()メソッドは、イベントのプロパティを設定します。典型的なアダプタの実装では、この方法により、着信データの特定のプロパティをイベント・タイプのプロパティに変換します。最後に、StreamSender.sendEvent()メソッドで、この新しいイベントをネットワーク内の次のコンポーネントに送信します。

  • アダプタではStreamSourceを実装するため、setEventSender()メソッドを実装し、イベントの送信に使用されるStreamSenderを渡す必要があります。

    public void setEventSender(StreamSender sender) { ...
    
  • よくあることですが、アダプタでSuspendableBeanを実装する場合、アプリケーションのアンデプロイ時などにアダプタを停止するsuspend()メソッドを実装する必要があります。

    public synchronized void suspend() throws Exception { ...
    

24.3.15.2 イベント・シンクとしてのアダプタまたはイベントBeanの実装

『Oracle CEP IDE Developer's Guide for Eclipse』のイベント・シンクとしてのアダプタまたはイベントBeanの実装に関する項は、正しくは次のようになります。

次のサンプル・コードは、イベント・シンクとして機能するHelloWorldアプリケーションのSpring Beanを示しています。太字のコードについて、例の後の説明を参照してください。

package com.bea.wlevs.example.helloworld;

import com.bea.wlevs.ede.api.StreamSink;
import com.bea.wlevs.event.example.helloworld.HelloWorldEvent;

public class HelloWorldBean implements StreamSink {

    public void onInsertEvent(Object event) {
        if (event instanceof HelloWorldEvent) {
            HelloWorldEvent helloWorldEvent = (HelloWorldEvent) event;
            System.out.println("Message: " + helloWorldEvent.getMessage());
        }
    }

}

前述の例に示されているプログラミング・ガイドラインは、次のとおりです。

  • 使用するBeanでは、アプリケーションのイベント・タイプ(HelloWorldの場合はHelloWorldEvent)をインポートする必要があります。

    import com.bea.wlevs.event.example.helloworld.HelloWorldEvent;
    
  • 使用するBeanでは、com.bea.wlevs.ede.api.StreamSinkインタフェースを実装する必要があります。

    public class HelloWorldBean implements StreamSink {...
    
  • StreamSinkインタフェースには、実装する必要のある単一のメソッド(onInsertEvent(java.lang.Object))が含まれます。このメソッドは、イベントを受信するためのコールバック・メソッドです。メソッドのパラメータは、イベントの送信元であるコンポーネントからBeanが受信した実際のイベントを表すObjectです。

    public void onInsertEvent(Object event)
    
  • イベントのデータ型は、アプリケーションのEPNアセンブリ・ファイルに登録されているイベント・タイプにより決定されます。この例の場合、イベント・タイプはHelloWorldEventです。コードでは、受信したイベントが本当にHelloWorldEventであるかどうかを最初に確認します。

    if (event instanceof HelloWorldEvent) {
        HelloWorldEvent helloWorldEvent = (HelloWorldEvent) event;
    

    このイベント・タイプは、次のようなEPNアセンブリ・ファイルに構成されたJavaBeanです。

    <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>
    

    EPNアセンブリ・ファイルの作成手順の詳細は、EPNアセンブリ・ファイルの作成に関する項を参照してください。リファレンス情報は、付録D「スキーマ・リファレンス: EPNアセンブリspring-wlevs-v11_0_0_0.xsd」を参照してください。

  • イベントは、適切なJavaBeanのインスタンスであるため、標準のgetXXX()メソッドを使用して個別のプロパティにアクセスします。この例では、HelloWorldEventmessageというプロパティがあります。

    System.out.println("Message: " + helloWorldEvent.getMessage());
    

この項に記載されているOracle CEP APIの完全なAPIリファレンス情報は、『Oracle CEP Java API Reference』を参照してください。

24.3.15.3 com.bea.wlevs.management.Activate

『Oracle CEP IDE Developer's Guide for Eclipse』の@Activateアノテーションの例に関する項は、正しくは次のようになります。

package com.bea.wlevs.adapter.example.helloworld;
...
import com.bea.wlevs.configuration.Activate;
import com.bea.wlevs.ede.api.RunnableBean;
import com.bea.wlevs.ede.api.StreamSender;
import com.bea.wlevs.ede.api.StreamSource;
import com.bea.wlevs.event.example.helloworld.HelloWorldEvent;

public class HelloWorldAdapter implements RunnableBean, StreamSource {
...
    @Activate
    public void activateAdapter(HelloWorldAdapterConfig adapterConfig) {
        this.message = adapterConfig.getMessage();
    }
...
}

24.3.15.4 com.bea.wlevs.management.Prepare

『Oracle CEP IDE Developer's Guide for Eclipse』の@Prepareアノテーションの例に関する項は、正しくは次のようになります。

package com.bea.wlevs.adapter.example.helloworld;
...
import com.bea.wlevs.configuration.Prepare;
import com.bea.wlevs.ede.api.RunnableBean;
import com.bea.wlevs.ede.api.StreamSender;
import com.bea.wlevs.ede.api.StreamSource;
import com.bea.wlevs.event.example.helloworld.HelloWorldEvent;

public class HelloWorldAdapter implements RunnableBean, StreamSource {
...
    @Prepare
    public void checkConfiguration(HelloWorldAdapterConfig adapterConfig) {
        if (adapterConfig.getMessage() == null
                || adapterConfig.getMessage().length() == 0) {
            throw new RuntimeException("invalid message: " + message);
        }
    }
...
}

24.3.15.5 com.bea.wlevs.management.Rollback

『Oracle CEP IDE Developer's Guide for Eclipse』の@Rollbackアノテーションの例に関する項は、正しくは次のようになります。

package com.bea.wlevs.adapter.example.helloworld;
...
import com.bea.wlevs.configuration.Rollback;
import com.bea.wlevs.ede.api.RunnableBean;
import com.bea.wlevs.ede.api.StreamSender;
import com.bea.wlevs.ede.api.StreamSource;
import com.bea.wlevs.event.example.helloworld.HelloWorldEvent;

public class HelloWorldAdapter implements RunnableBean, StreamSource {
...
    @Rollback
    public void rejectConfigurationChange(HelloWorldAdapterConfig adapterConfig) {
    }