diff --git a/Bachelorarbeit.tex b/Bachelorarbeit.tex index 9c64510..b395455 100644 --- a/Bachelorarbeit.tex +++ b/Bachelorarbeit.tex @@ -503,6 +503,29 @@ Hat man in der Verarbeitung der Ereignisse durch CEP-Regeln alle Register gezoge \end{itemize} Das Domänenwissen kann somit verwendet werden, um einer durch Ereignisdaten beschriebenen Situation einen eindeutigen Kontext zuzuordnen und somit die Interpretation der Daten stark zu erleichtern. Hat die Ereignisverarbeitung beispielsweise festgestellt, dass die durchschnittliche Drehzahl eines Motors bei 4200 Umdrehungen pro Minute liegt, so kann über das Domänenwissen nachgeschlagen werden, in welchem Fahrzeug der betroffene Motor montiert ist, von welchem Typen das Fahrzeug ist, und ob die Motordrehzahl für diesen Fahrzeugtypen zulässig ist. +\paragraph{Auslösen von Aktionen} +Um mit einer CEP-Regel nun auf die durch sie erkannten Sachverhalte reagieren zu können, können nahezu beliebige Aktionen im \texttt{ACTION}-Teil der Regel definiert werden. Diese lassen sich hauptsächlich in zwei Kategorien einteilen: +\begin{itemize} +\item Erzeugung eines höherwertigen Ereignis mit den gewonnen Erkenntnissen und Wiedereinspeisung dessen in den Verarbeitungsprozess +\item Anstoßen eines externen Dienstes beziehungsweise Ausführen von Programmcode +\end{itemize} +Sehr häufig werden die Auswertungsergebnisse einer CEP-Regel als höherwertiges Ereignis wieder in den Verarbeitungsprozess injiziert. Dies ist gerade dann nützlich, wenn durch eine mehrstufige Verarbeitung mit weiteren CEP-Regeln detailliertere Ergebnisse erzielt werden können. Um in dem \texttt{ACTION}-Teil einer CEP-Regel ein neues Ereignis auszulösen, wird ein mit dem Schlüsselwort \texttt{new} ein Ereignistyp wie zum Beispiel \texttt{CarAccelerationEvent} wie folgt instanziiert, wobei seine Attributwerte als Parameter übergeben werden: +\begin{lstlisting} +new CarAccelerationEvent(carID=eventA.pkwID, speed=eventC.speed-eventB.speed) +\end{lstlisting} +Um den Anstoß eines externen Dienstes beziehungsweise das Ausführen von Programmcode zu notieren, wird ein Methodenaufruf notiert, der zur Verdeutlichung mit \texttt{call} beginnt und Parameter übergeben bekommen kann. Der Aufruf eines \texttt{PushMessageService}, der einen Parameter \texttt{msg} erwartet, könnte wie folgt aussehen: +\begin{lstlisting} +callPushMessageService(msg="PKW mit ID"+eventA.pkwID+" hat ein Problem gemeldet.") +\end{lstlisting} +Erweitert man nun die CEP-Regel aus Listing~\ref{lst:abstract_cep_rule_two} mit einem Dienstaufruf, der den Fahrer des PKW auf Basis der \texttt{pkwID} benachrichtigen würde, so könnte dies so aussehen: +\begin{lstlisting}[mathescape=true,label={lst:abstract_cep_rule_three},caption={CEP-Regel benachrichtigt Fahrer des PKW im Notfall}] +CONDITION ($(A\ AS\ a)\rightarrow (\neg B) \rightarrow (C\ AS\ c)$) + $\wedge$ a.pkwID = c.pkwID +ACTION + callNotifyCarDriver(pkwID=a.pkwID) +\end{lstlisting} + +Mit den in diesem Kapitel vorgestellten Werkzeugen können abstrakte CEP-Regeln formuliert werden, die später zur Implementierung in die CEP-Sprache einer CEP-Engine übersetzt werden können. Insgesamt liegt die Herausforderung von CEP darin, in kürzester Zeit große Datenströme von Ereignissen mit Hintergrundwissen anzureichern, diese zu höherwertigen Ereignissen zu kombinieren und bestimmte Muster zu finden, sowie die Ergebnisse mit möglichst geringer Verzögerung in Echtzeit ausgeben zu können oder Reaktionen einzuleiten.