文字列結合演算子 + は非文字列オペランドをサポート
オペランド式のうち一方が string
型の場合、他方のオペランドは実行時に文字列に変換されます。
詳細については、Apama ドキュメントの 加算演算子 をご覧ください。
文字列、配列、辞書に新しい便利な組み込みメソッド
EPL言語は、文字列や配列が指定された部分文字列や項目を含むかどうかを確認したり、文字列、配列、辞書が空かどうかを判断するなど、一般的な操作のためのいくつかの便利なメソッドを追加されました。
指定したインデックスに値が存在しない場合にフォールバックのデフォルト値を持つ配列値を取得するメソッドがあります:
mySequence.getOr(100, "default value");
また、正規表現グループ検索を使用して文字列内の最初の一致を見つけ、正規表現の各 “(…)” グループでキャプチャされたテキストを返す強力なメソッドがあります:
// ["Bob", "Eve"] を印刷
print "Today Bob met Eve".groupSearch("([a-zA-Z]) met ([a-zA-Z])").toString();
以下の表は新しいメソッドを一覧にしています:
新しいメソッド |
説明 |
string.contains() , sequence.contains() |
文字列または配列が指定された部分文字列や項目を含むかどうかを判断します。これは find() または indexOf() の整数値をチェックする便利な代替手段です。 |
string.groupSearch() |
この文字列内で最初の正規表現の一致を見つけ、一致した “(…)” グループのリストを返します。 |
string.startsWith() , string.endsWith() |
文字列が指定された接頭辞または接尾辞を持っているかどうかを判断します。 |
string.rfind() |
この文字列内で右側(つまり、文字列の末尾から)から文字列を検索します。 |
string.substringFrom() |
指定した文字から始めて、文字列の最後までの部分を抽出します。 |
string.quote() |
標準EPLイベント表現に従って引用符とエスケープを追加します。このメソッドは、スペースや改行文字を含む可能性のある文字列をログに記録するのに役立つことがあります。これは既存の string.parse() メソッドの逆になります。 |
string.isEmpty() |
文字列の長さがゼロ文字かどうかを判断します。 |
dictionary.isEmpty() , sequence.isEmpty() |
サイズが0かどうかを判断します。 |
any.isEmpty() , optional.isEmpty() , listener.isEmpty() , Channel.isEmpty() , chunk.isEmpty() |
これらの型の既存の empty() メソッドのエイリアスです。新しい isEmpty() メソッドを使用することを推奨しますが、empty() の使用は非推奨ではありません。 |
sequence.getOr() |
指定されたインデックスの値を取得し、インデックスが無効な場合は指定されたフォールバック値を返します。 |
詳細については、EPLのAPIリファレンス (ApamaDoc) を参照してください。
配列[…] アクセスのための負のインデックスのサポート
範囲外例外がスローされる代わりに、負のインデックスを指定することで配列の末尾近くの項目を参照することが可能になりました。たとえば、seq[-1]
は配列の最後の項目を、seq[-2]
はその前の項目を返します。負の配列インデックスは sequence.remove()
および sequence.insert()
メソッドでも使用できます。
any.getEntry()
メソッドを使用して配列項目にアクセスする際には、負の値を指定できないことに注意してください。
混合型の配列および辞書リテラルはデフォルトで <any> として扱われます
異なる型が混在する配列または辞書リテラルの最初の項目の周りに <any>
キャストを追加する必要がなくなりました。たとえば、次の配列リテラルは sequence<any>
を生成します:
[<any> 12345, "a string"]
これが次のように簡略化できます:
[12345, "a string"]
これはApamaドキュメントの EPLの10.15.3での拡張 での機能的な例を簡素化します:setFields
呼び出しで <any>
はもはや必要ありません。
未使用の戻り値の破棄
EPLでは、関数や式の戻り値を破棄し、変数に割り当てないことが可能になりました。これは、関数の副作用だけを取得したいが戻り値は必要ない場合に便利です。プログラムが使用する可能性のある重要な条件を示す戻り値を破棄しないように注意してください。
以前は次のように書く必要がありました:
any _ := Functional(newAlarms).map(Fn.getEntry("alarm")).map(allAlarms.append);
しかし現在は次のように書けます:
Functional(newAlarms).map(Fn.getEntry("alarm")).map(allAlarms.append);
詳細については、Apamaドキュメントの 式をステートメントとして使用 を参照してください。
機能的演算子
com.apama.functional.Fn
および com.apama.functional.Functional
イベントには、キーを変更した辞書コンテナを返す新しいメソッド mapKeys
が追加されました。詳細については、Apama ドキュメントの 機能的演算子 および EPLのAPIリファレンス (ApamaDoc) を参照してください。
機能的リスナー
機能的な onTimeout
アクションは、作成された待機リスナーを返すようになったため、必要に応じて終了することができます。詳細については、Apama ドキュメントの 機能的リスナー を参照してください。
捕捉されない例外の処理
EPLモニタは、特定の場合に捕捉されない例外がスローされるとデフォルトで終了しなくなりました。
プログラミングエラーや受信イベント内の予期しないデータは、EPLで捕捉されない例外を引き起こす可能性があります。これにより、モニタインスタンスが終了し、アプリケーションが使用できなくなります。より良い体験を提供するために、リスナーやストリームリスナーからの捕捉されない例外はもはやモニタインスタンスを終了させず、現在のイベントの処理を停止するだけとなります。
開発者は引き続き、EPL内で例外を正しくキャッチして処理することが推奨されています。例外がスローされてキャッチされない場合、イベントが失われたり正しく処理されない可能性があります。
これは動作の変更です。一部のユーザーは、以前の動作に依存している場合があります。特に ondie()
アクションの組み合わせと。ondie()
アクションを持つEPLは、常にモニタを終了し、ondie()
を呼び出す以前の動作を保持します。以前の動作を保持する必要がある場合は、モニタに空の ondie()
アクションを追加できます。
備考
ストリームクエリ内から呼び出されるアクション(例えば、where
や group by
句、またはウィンドウ定義の一部として)で例外をスローする場合、このアクションはモニタインスタンスを終了させます。
com.apama.cumulocityのイベントの更新
Things Cloud に向けてイベントが送信されているのか、Things Cloud からの更新として受信されているのかの混乱を避けるために、Cumulocityイベント定義APIは以前のリリース(10.5.2.0)で変更され、既存の CHANNEL
定数は非推奨となり、適切に SEND_CHANNEL
または SUBSCRIBE_CHANNEL
定数に置き換えられました。これらの変更でいくつかのイベントが省かれ、これが修正されました。したがって、次のイベントで CHANNEL
定数は非推奨です:
SubscribeMeasurements
UnsubscribeMeasurements
FindManagedObjectResponseAck
FindMeasurementResponseAck
GenericResponseComplete
Subscribe
Unsubscribe
さらに、代わりに次のイベントに新しい SUBSCRIBE_CHANNEL
または SEND_CHANNEL
が追加されました:
SubscribeMeasurements
UnsubscribeMeasurements
Subscribe
Unsubscribe
次のイベントの定数は、それに対応する Response
タイプの SUBSCRIBE_CHANNEL
定数に置き換えられます:
FindManagedObjectResponseAck
FindMeasurementResponseAck
GenericResponseComplete
EPLのAPIリファレンス (ApamaDoc) は、確認イベントは常に対応するレスポンスイベントと同じチャネルで受信されることを明確にし、混乱を避けるために、これらの確認イベントで定義されていた CHANNEL
定数は非推奨とされています。