0

CEPのアプリケーションニーズに合わせてESPERを実装しました。EPLを使用しているときに、次のような特定のシナリオに遭遇しました。

2つのイベントを左外部結合と組み合わせて、最初の各イベントがステートメントをトリガーでき、特定のプロパティを含む2番目のストリームのイベントのみが発生するようにしました。いくつかのフィールドに基づいて一意のデータを格納するためのビューを作成しました。私のEPLは

@Name ('StmtCombinedEvent')
Insert into CombinedEvent 
    Select S as T1,
    L as T2,
    From pattern[every S= bussinessObject.Type1].std:unique(S.Id) as S 
    left outer join 
    bussinessObject.Type2.std:unique(name) as L
    on S.name = L.name;


@Name ('StmtGroupingEvent')
Insert into Position
Select 
    G.T1 as T1
    G.T2 as T2
    From CombinedEvent.std:unique(T1.Id) as G;

構成ファイルのCombinedEventdataTypeにjava.util.Mapタイプを使用しています

次に、テストシナリオを検討します

  1. IDが異なるが同じ名前のタイプT1の2つのイベントがシステムに入力されました
  2. タイプT2の1つのイベントがシステムに入力されます

ビュー仕様により、タイプT1の両方のイベントがビューに存在し、タイプT2のイベントがシステムに入ると、タイプEvent BeanのNewDataパラメーターにはT1の両方のイベントが含まれます(コードでイベントリスナーを使用していた場合)が、最初のEPLステートメントとして'StmtGroupingEvent'に対してタイプT2のイベントを予期していたが、代わりにイベントBeanを検出したため、2番目のステートメントに挿入するように指定します。タイプが一致しないエラーを検出します。

そのため、EPLで配列型のデータを処理する必要があります。これは面倒です。

一方、シナリオが次の場合:

  1. タイプT1の1つのイベントのみがシステムに入力されます。
  2. タイプT2の1つのイベントがシステムに入力されます。

このシナリオでは、イベントBeanがタイプT2にタイプキャストされたため、エラーは発生しません。

だから私にこれを行う別の方法を提案してください。

ありがとう

4

1 に答える 1

0

「タイプが一致しないエラーが見つかりました」とはどういう意味ですか? ログに記録された例外があった場合は、それを投稿し、再現するために小さなテスト クラスを投稿してください。また、Esper の最新バージョンを使用していることを確認してください。バグがある場合は、新しいバージョンで修正されている可能性があります。

また、pattern[every S= bussinessObject.Type1].std:unique(S.Id)" の代わりに "from bussinessObject.Type1.std:unique(S.Id)" を使用します。同じ。

于 2012-10-19T11:09:56.453 に答える