<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2968075504254452265</id><updated>2012-02-15T23:49:38.232-08:00</updated><category term='drl'/><category term='Rule-Engine'/><category term='App'/><category term='OSGi'/><category term='Figaro'/><category term='Konfiguration'/><category term='Regel'/><category term='Regeln'/><category term='Testen'/><category term='Einführung'/><category term='Java'/><category term='Internetradio'/><category term='Konfiguratio'/><category term='Java User Group Görlitz'/><category term='Drools'/><category term='JMX'/><category term='Fakten'/><category term='Maven'/><category term='Hello-World'/><category term='Jax-WS'/><category term='JUnit'/><category term='Rule-Engines'/><category term='Android'/><category term='Monitoring'/><category term='Archetypen'/><title type='text'>Max Wielsch und die Informatik</title><subtitle type='html'>Thema soll alles sein, was im weitesten Sinne mit Informatik zu tun hat. Mein Ziel ist Selbstreflexion von neuem Wissen oder von dem, was hoffentlich mal zu Wissen wird. Allerdings freue ich mich dennoch über Fragen bzw. Reaktionen zu den Beiträgen</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://max-wielsch.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2968075504254452265/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://max-wielsch.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Max Wielsch</name><uri>http://www.blogger.com/profile/00441215734899831031</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-5fEptKrHWX4/Thhc46-z_KI/AAAAAAAAAEU/PXfklqO2pfw/s220/me.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>8</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2968075504254452265.post-7792408029109490624</id><published>2012-01-09T10:02:00.000-08:00</published><updated>2012-01-09T10:02:13.257-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='App'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Archetypen'/><category scheme='http://www.blogger.com/atom/ns#' term='Maven'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><category scheme='http://www.blogger.com/atom/ns#' term='Konfiguratio'/><title type='text'>Android und Maven</title><content type='html'>In einem aktuellen Projekt habe ich mit Webservices und Android zu tun. Wenn ich bisher mit Java EE zu tun hatte, habe ich Maven als Projektverwaltungstool benutzt. Nun möchte ich auch das Android-Projekt von Maven verwalten lassen. Im Netz habe ich unter folgendem Link einen extra Archetype für solche Maven-Projekte gefunden.&lt;br /&gt;&lt;a href="https://github.com/akquinet/android-archetypes/wiki/android-quickstart-archetype"&gt;https://github.com/akquinet/android-archetypes/wiki/android-quickstart-archetype&lt;/a&gt;&lt;br /&gt;Dort ist ein ganz einfaches Beispiel beschrieben, wie ein solches Maven-Projekt aufgesetzt wird. Dies sieht wie folgt aus:&lt;br /&gt;&lt;div style="background-color: #d8f6ce; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0.5cm; margin-top: 0.5cm; padding: 0.5cm;"&gt;&lt;pre&gt;&lt;code&gt; mvn archetype:generate&lt;br /&gt;  -DarchetypeArtifactId=android-quickstart&lt;br /&gt;  -DarchetypeGroupId=de.akquinet.android.archetypes&lt;br /&gt;  -DarchetypeVersion=1.0.7&lt;br /&gt;  -DgroupId=your.company&lt;br /&gt;  -DartifactId=my-android-application &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;Dies funktionierte ohne Probleme. Danach kopierte ich die Dateien eines bestehenden Android-Projekts in das durch Maven generierte Projekt. Die danach aufgetretenen Fallstricke möchte ich in diesem Post kurz erklären.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Das ist zwar ein Standardfehler, bei meinen Android Projekten, aber er trat wieder auf. Wenn wieder mal Eclipse neu eingerichtet wird und dann das Android-Eclipse-Plugin für Android installiert wird, sollte man nicht vergessen den Installationspfad zum SDK zu setzen.&lt;/li&gt;&lt;li&gt;Ebenso ist der Pfad in der Maven-Konfiguration des Android-Build-Plugins zu setzen.&lt;/li&gt;&lt;li&gt;Das Build-Plugin fordert ebenso eine minimale Maven-Version, die ich ebenso nachinstallieren musste. Dies ist die Version 3.0.3.&lt;/li&gt;&lt;li&gt;Im Android-Manifest sollte man die benötigte Android-API-Version (android:minSdkVersion)noch prüfen.&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2968075504254452265-7792408029109490624?l=max-wielsch.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://max-wielsch.blogspot.com/feeds/7792408029109490624/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://max-wielsch.blogspot.com/2012/01/android-und-maven.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2968075504254452265/posts/default/7792408029109490624'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2968075504254452265/posts/default/7792408029109490624'/><link rel='alternate' type='text/html' href='http://max-wielsch.blogspot.com/2012/01/android-und-maven.html' title='Android und Maven'/><author><name>Max Wielsch</name><uri>http://www.blogger.com/profile/00441215734899831031</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-5fEptKrHWX4/Thhc46-z_KI/AAAAAAAAAEU/PXfklqO2pfw/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2968075504254452265.post-9136521466429702487</id><published>2011-10-26T20:00:00.000-07:00</published><updated>2011-10-29T04:42:54.199-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java User Group Görlitz'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android: Der Vortrag in der Java User Group Görlitz</title><content type='html'>Hallo an alle Android-Interessierten!&lt;br /&gt;&lt;br /&gt;in diesem Post möchte ich die Folien und das Eclipse-Android-Projekt vom Java-User-Group-Vortrag zum Download zur Verfügung stellen. Bei dem Projekt handelt es sich um eine ganz primitive Memo-App. Wer noch Fragen hat, ist dazu angehalten diese zu stellen.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Hier die zwei Links:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://dl.dropbox.com/u/3538883/Downloads_Max_Blog/Android-Programmierung.pdf"&gt;die Päsentation (PDF)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://dl.dropbox.com/u/3538883/Downloads_Max_Blog/MyMemos.zip"&gt;Die Projektdateien (ZIP)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Weiterhin gibt es noch die gratis Version des Buches "Android - Grundlagen und Programmierung" (Arno Becker und Marcus Pant) unter folgendem Link zum Download:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.androidbuch.de/download/android-buch.pdf"&gt;Android-Buch&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Beim Durcharbeiten ist bitte zu beachten, dass an einigen Stellen Fehler enthalten sind, bzw. einige Erläuterungen fehlen. Dazu sind auf der Website zum Buch unter der Rubrik &lt;a href="http://www.androidbuch.de/index.php/errata.html"&gt;Errata&lt;/a&gt; Korrekturen und Anmerkungen zu lesen, die dann hilfreich sind, wenn irgendetwas im Buch nicht nachvollziehbar ist.&lt;br /&gt;&lt;br /&gt;Viel Spaß&lt;br /&gt;&lt;ul&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2968075504254452265-9136521466429702487?l=max-wielsch.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://max-wielsch.blogspot.com/feeds/9136521466429702487/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://max-wielsch.blogspot.com/2011/10/android-der-vortrag-in-der-java-user.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2968075504254452265/posts/default/9136521466429702487'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2968075504254452265/posts/default/9136521466429702487'/><link rel='alternate' type='text/html' href='http://max-wielsch.blogspot.com/2011/10/android-der-vortrag-in-der-java-user.html' title='Android: Der Vortrag in der Java User Group Görlitz'/><author><name>Max Wielsch</name><uri>http://www.blogger.com/profile/00441215734899831031</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-5fEptKrHWX4/Thhc46-z_KI/AAAAAAAAAEU/PXfklqO2pfw/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2968075504254452265.post-4138850240674537579</id><published>2011-10-06T08:12:00.000-07:00</published><updated>2011-10-25T10:44:41.107-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Konfiguration'/><category scheme='http://www.blogger.com/atom/ns#' term='Testen'/><category scheme='http://www.blogger.com/atom/ns#' term='Rule-Engine'/><category scheme='http://www.blogger.com/atom/ns#' term='JUnit'/><category scheme='http://www.blogger.com/atom/ns#' term='Regeln'/><title type='text'>Ein paar Gedanken zum Testen von Regeln</title><content type='html'>&lt;span dir="none"&gt;&lt;/span&gt;&lt;br /&gt;​Da man mit Hilfe von Regeln fest einprogrammierte Logik aus einem System in diese stets veränderbaren Regeln hinauszieht, muss diese Logik natürlich auch getestet werden. Es steht also die Frage im Raum, wie ich Regeln Testen kann. Insbesondere die Frage nach der Testumgebung ist interessant.&lt;br /&gt;Fest steht:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Die unmittelbare Ausführungsumgebung der Regeln ist die Rule-Engine (Regelmaschine).&lt;/li&gt;&lt;li&gt;Eigentlich ist bei Tests darauf zu achten, dass der Ausgangszustand immer derselbe ist. Für Regeln ist dies jedoch nicht sinnvoll. Denn gerade das Zusammenspiel von Regeln und das Wiedereinführen von Entscheidungen der Rule-Engine bilden das reele Verhalten von Rule-Engines und Regeln ab.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Entsprechende Fakten werden je nach Testfall in die Regelmaschine eingefügt. Je nachdem, welche Regel erwartungsgemäß aktiviert werden sollte, muss die Faktenbasis präpariert werden.&lt;/li&gt;&lt;/ul&gt;Tests per JUnit ausführen zu lassen, wäre möglich. Es ist die Frage, ob  dies sinnvoll ist, da nie klar ist, welche Regeln es geben wird, da  diese nach Bedarf bzw. nach Anforderung erstellt wird. Sie werden also  während der Laufzeit erstellt, erweitert bzw. modifiziert. Der  Ausführungszeitpunkt von Unit-Tests ist hingegen vor der Inbetriebnahme  des Systems. Daher sollte es eine Komponente geben, die eine  Testumgebung bereitstellt, die man nach Bedarf konfigurieren kann. In  dieser müsste man dann zur Betriebszeit die Regeln austesten können. Da  bei Aktivierung von Regeln eine Konsequenz ausgeführt wird, die auf das  Produktivsystem bzw. Umgebungssysteme Auswirkungen hat, müsste man an  dieser Stelle eventuelle Modifikationen ermöglichen, die unerwünschte  Auswirkungen für den Test zu unterdrücken.&lt;br /&gt;&lt;br /&gt;Für den Test von Regeln interessiert hauptsächlich, ob eine bestimmte  Regel aktiviert wird, weniger, ob eine Konsequenz ausgeführt wird. Wenn  eine Regel also zur Aktivierung markiert ist (man sagt, sie ist auf der  Agenda), dann ist die Ausführung der Konsequenz gewiss. Da die Logik der  Konsequenz entkoppelt ist, kann man davon ausgehen, dass diese auch  separat getestet worden ist.&lt;br /&gt;Lediglich für den Fall, dass in einer Konsequenz Modifikationen an der  Faktenbasis vorgenommen werden, sollte man diese Ausführung auch  zulassen.&lt;br /&gt;Heißt also, auch die Aktivierung der Regel muss für den Test konfiguriert werden können.&lt;br /&gt;&lt;span id="ms-rterangecursor-end" style="display: inline-block;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2968075504254452265-4138850240674537579?l=max-wielsch.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://max-wielsch.blogspot.com/feeds/4138850240674537579/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://max-wielsch.blogspot.com/2011/10/ein-paar-gedanken-zum-testen-von-regeln.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2968075504254452265/posts/default/4138850240674537579'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2968075504254452265/posts/default/4138850240674537579'/><link rel='alternate' type='text/html' href='http://max-wielsch.blogspot.com/2011/10/ein-paar-gedanken-zum-testen-von-regeln.html' title='Ein paar Gedanken zum Testen von Regeln'/><author><name>Max Wielsch</name><uri>http://www.blogger.com/profile/00441215734899831031</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-5fEptKrHWX4/Thhc46-z_KI/AAAAAAAAAEU/PXfklqO2pfw/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2968075504254452265.post-8113983372203284808</id><published>2011-08-18T10:08:00.000-07:00</published><updated>2011-09-17T03:45:00.568-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hello-World'/><category scheme='http://www.blogger.com/atom/ns#' term='Rule-Engine'/><category scheme='http://www.blogger.com/atom/ns#' term='Regel'/><category scheme='http://www.blogger.com/atom/ns#' term='Einführung'/><category scheme='http://www.blogger.com/atom/ns#' term='Drools'/><title type='text'>Ein Beispiel-Szenario für Drools-Regeln</title><content type='html'>In dem Post &lt;a href="http://max-wielsch.blogspot.com/2011/07/drools-fur-meine-rules.html"&gt;"Drools für meine Rules"&lt;/a&gt; habe ich auf ein später folgendes Hello-World-Beispiel verwiesen. Nun ist es soweit.&lt;br /&gt;&lt;br /&gt;Das Beispiel-Szenario bezieht sich auf das Projekt des &lt;i&gt;Human Task Service &lt;/i&gt;(&lt;a href="http://www.humantaskservice.blogspot.com/"&gt;http://www.humantaskservice.blogspot.com/&lt;/a&gt;). Eine Task-Instanz (TI) ist im Kontext dieses Systems das technische Äquivalent zu dem abstrakteren Begriff des &lt;i&gt;Human Tasks&lt;/i&gt;. Die TI gehört also zum Domänen-Modell des &lt;i&gt;Human Task Service&lt;/i&gt; (HTS). Für dieses Beipiel ist ein vereinfachtes Modell die Grundlage.&lt;br /&gt;&lt;br /&gt;Jede TI wird zum Erzeugungszeitpunkt mit einem Zeitstempel versehen. Weiterhin ergibt sich aus der zugewiesenen Task-Beschreibung die maximale Dauer für die Bearbeitung einer Task-Instanz bzw. den &lt;i&gt;Human Task&lt;/i&gt;. Diese muss für in jedem Fall zugesichert werden können, damit der HTS als wirtschaftliche Dienstleistung angeboten werden kann. Neben der Erfüllungsdauer gibt es noch weitere Gütemerkmale von Diensten. Diese werden in sog. &lt;i&gt;Service Level Agreements &lt;/i&gt;definiert. Es muss für die Verwendung der Rule-Engine &lt;i&gt;Drools&lt;/i&gt; also eine Regel formuliert werden, die den erklärten Sachverhalt erfüllt.&lt;br /&gt;&lt;br /&gt;Hier kommt die Regel dazu:&lt;br /&gt;&lt;div style="background-color: #d8f6ce; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin-bottom: 0.5cm; margin-top: 0.5cm; padding: 0.5cm;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;lt;package &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; name="de.saxsys.hti.monitoring.controller" &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; xmlns="http://drools.org/drools-5.0" &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; xs:schemaLocation="http://drools.org/drools-5.0 drools-4.0.xsd"&amp;gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;import name="de.saxsys.hti.monitoring.domain.*"/&amp;gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;import name="de.saxsys.hti.monitoring.util.mail.*"/&amp;gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;import name="de.saxsys.hti.monitoring.util.deadline.*"/&amp;gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;import name="de.saxsys.hti.monitoring.handler.*"/&amp;gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;import name="javax.xml.datatype.*"/&amp;gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;import name="java.math.BigDecimal"/&amp;gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;import name="java.util.*"/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;function &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return-type="String" &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; name="prepareMessageText"&amp;gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;parameter &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; identifier="$ti" &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; type="TaskInstance"/&amp;gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;body&amp;gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; StringBuffer sb = new StringBuffer(); &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sb.append("An task instance with state '").append($ti.getState().value()); &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sb.append("' has passed the half of the deadline!\n"); &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sb.append("--------------------------------------------\n"); &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sb.append("Detailed data:\n\n"); &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sb.append("id: ").append($ti.getId()).append("\n");&amp;nbsp; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sb.append("name: ").append($ti.getName()).append("\n"); &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sb.append("creation: ").append($ti.getCreationTime()).append("\n"); &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Date creationDate =&amp;nbsp;&amp;nbsp;&amp;nbsp; $ti.getCreationTime(); &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; String duration = $ti.getTaskDescription().getServiceLevelAgreement().getDeadline().getTimeSpan(); &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sb.append("deadline: ").append(DeadlineChecker.getEndDate(creationDate, duration)); &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return sb.toString(); &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/body&amp;gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/function&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;rule name="deadline is half passed"&amp;gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;lhs&amp;gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;pattern object-type="TaskInstance" identifier="$ti"&amp;gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;and-constraint-connective&amp;gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;field-constraint field-name="state"&amp;gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;qualified-identifier-restriction evaluator="!="&amp;gt;State.COMPLETED&amp;lt;/qualified-identifier-restriction&amp;gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/field-constraint&amp;gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;field-constraint field-name="state"&amp;gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;qualified-identifier-restriction evaluator="!="&amp;gt;State.FAILED&amp;lt;/qualified-identifier-restriction&amp;gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/field-constraint&amp;gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/and-constraint-connective&amp;gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/pattern&amp;gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;eval&amp;gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; DeadlineChecker.halfOfDeadlineHasPassed($ti.getCreationTime(), $ti.getTaskDescription().getServiceLevelAgreement().getDeadline().getTimeSpan()) &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/eval&amp;gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/lhs&amp;gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;rhs&amp;gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $ti.setPriority(Prioritizer.increase($ti.getPriority())); &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println("... increase priority to: " + $ti.getPriority().value()); &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println("... inform responsible person of half passed deadline"); &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; String message = prepareMessageText($ti); &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; HTIReactionHandler htiRH = (HTIReactionHandler) ReactionHandlerFactory.getReactionHandler(ReactionHandlerType.HTI_HANDLER); &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; htiRH.sendMail("department_chief@anycompany.com", "Warning", message, $ti.getAttachment()); &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/rhs&amp;gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/rule&amp;gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;lt;/package&amp;gt;&lt;/span&gt;&lt;/div&gt;Nun die Erläuterung des Dokuments:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Zuerst das Wurzelelement: &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;lt;package&lt;/span&gt;&amp;gt;&amp;lt;/package&amp;gt; Mit dem Attribut&lt;i&gt; &lt;/i&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;name&lt;/span&gt; wird eine Bezeichnung angegeben, welche die in diesem Dokument enthaltenen Regeln im Speicher der Rule-Engine eindeutig von anderen Regeln unterscheidet.&lt;/li&gt;&lt;li&gt;In den Regeln kann Java-Codeenthalten sein. Die genutzten Klassen werden durch den&amp;nbsp; &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;import&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;-&lt;/span&gt;Tag geladen.&lt;/li&gt;&lt;li&gt;Regeln werden durch das Element &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;lt;&lt;/span&gt;rule&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;/&amp;gt;&lt;/span&gt; ausgedrückt. Ein Regel besteht aus einem Bedingungsteil (&lt;i&gt;left hand side&lt;/i&gt;) und dem Konsequenzteil (&lt;i&gt;right hand side&lt;/i&gt;). Die Tags &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;lt;&lt;/span&gt;lhs&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;/&amp;gt;&lt;/span&gt; und &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;lt;&lt;/span&gt;rhs&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;/&amp;gt;&lt;/span&gt; besitzen diese Semantik und werden als Kindelemente des rule&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;-&lt;/span&gt;Tags eingefügt.&lt;/li&gt;&lt;/ol&gt;Der Bedingungsteil: &lt;br /&gt;&lt;ol&gt;&lt;li&gt;Eine Bedingung wird in Drools durch sog. &lt;i&gt;Patterns&lt;/i&gt;, also Muster, ausgedrückt. Man beschreibt mit Patterns wie entsprechende Datenobjekte ausehen sollen, welche die Bedingung erfüllen sollen. Mit dem Attribut &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;object-type &lt;/span&gt;wird der Typ bzw. die Klasse des Objekts festgelegt. Über einen Bezeichner, der mit dem Attribut &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;identifier &lt;/span&gt;angegeben wird, kann man in dem Dokument auf das aktuelle Objekt zugreifen.&lt;/li&gt;&lt;li&gt;Bisher würde die Bedingung lauten: "Objekte müssen vom Typ &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;TaskInstance&lt;/span&gt; sein, damit der Konsequenzteil (&lt;i&gt;rhs&lt;/i&gt;) aktiviert wird.". Darum werden mit Feld-Beschränkungen (Restriktionen) genauere Angaben zu dem Objekt gemacht. Mit dem&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt; field-constraint-&lt;/span&gt;Tag wird beschrieben, welche Felder das Objekt haben muss.&lt;/li&gt;&lt;li&gt;Als Kindelemente des &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;field-constraint-&lt;/span&gt;Tags können zum Beispiel folgende Elemente verwendet werden, um die Werte der Felder zu beschränken:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Um Enumerationen anzugeben, wird eine &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;qualified-identifier-restriction&lt;/span&gt; verwendet.&lt;/li&gt;&lt;li&gt;Für alle anderen (primitiven bzw. standard) Typen kann der folgende XML-Tag benutzt werden:&lt;span style="font-size: small;"&gt; &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;lt;literal-restriction evaluator="&amp;gt;" value="0"/&amp;gt;&lt;/span&gt;&lt;span style="font-family: inherit;"&gt; Mit &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: inherit;"&gt;solchen Restriktionen können Felder mit Zahlen oder Zeichenketten ausgezeichnet werden. Mit dem &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;evaluator&lt;/span&gt;-Attribut wird angegeben, wie der jeweilige Wert des Feldes auzuwerten oder zu interpretieren  ist.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Um solche Feld-Restriktionen können nun noch logische Verknüpfungen (&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;lt;and-constraint-connective/&amp;gt;, &amp;lt;or-restriction-connective/&amp;gt;&lt;/span&gt;) geschachtelt werden.&lt;/li&gt;&lt;li&gt;Um die Patterns können weiterhin Negationen (&amp;lt;not/&amp;gt;), der Existenz- (&amp;lt;exists/&amp;gt;) und der All-Quantor (&amp;lt;forall/&amp;gt;) geschachtelt werden.&lt;/li&gt;&lt;li&gt;Neben den Patterns zur Beschreibung der Beschaffenheit eines Objekts gibt es noch die Möglichkeit, diese durch eigenen Java-Code zu prüfen. Dafür wird der Tag &amp;lt;eval&amp;gt;&amp;lt;/eval&amp;gt; benutzt. In ihm kann beliebige Logik formuliert sein, die weitere Objektmerkmale prüfen kann. Die einzige Einschränkung ist, dass der Ausdruck zu einem Boolschen Wert evaluiert.&lt;/li&gt;&lt;/ol&gt;Der Konsequenzteil:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Im Konsequenzteil der Regel kann nun jedweder Java-Code stehen. Entsprechende Importe sind dafür nicht zu vergessen.&amp;nbsp;&lt;/li&gt;&lt;li&gt;Um auf das aktuelle Objekt zuzugreifen und die Konsequenz für ein solches auszuführen, benötigt man eine Referenz darauf. Diese konnte durch die angabe eines Bezeichners (&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;identifier&lt;/span&gt;) im Pattern angelegt werden. Damit haben wir nun Zugriff auf die Daten des Objekts. Für ein besseres Verständnis sorgt es, wenn in den Regelbedingungen angelegte Bezeichner mit beispielsweise dem Dollar-Zeichen den Unterschied zu im Java-Code definierten Bezeichnern singnalisieren.&lt;/li&gt;&lt;li&gt;Typisch für XML ist der Overhead, der durch die Dokumentstruktur entsteht. Aus diesem Grund, und für die Wiederverwendbarkeit ist es sinnvoll, Logik zu kapseln. Einfacherweise macht man dies in Java-Klassen, die nur eingebunden und aufgerufen werden brauchen. Eine zweite Möglichkeit ist, die Verwendung von Dokument-Internen Funktionen. Ein Exemplar davon ist genau unter den Import-Beschreibungen des Beispieldokuments zu finden. Weiterer Erklärung bedarf es nach all den Erläuterungen nicht. Wie zu sehen, kann im Funktionsrumpf wieder Java-Code stehen. Funktionen sind vor allem dafür geeignet, regelspezifische Logik im Regeldokument zu kapseln. Logik, die in unterschiedlichen Regeldokumenten gebraucht wird, sollte besser in Javaklassen verpackt werden.&lt;/li&gt;&lt;/ol&gt;Nachdem nun die Syntax des Regeldokuments recht ausgiebig erklärt wurde, folgt nun eine kurze Beschreibung der Semantik. Was soll die Regel tun?&lt;br /&gt;&lt;br /&gt;Für jede Task-Instanz, die noch nicht im Zustand &lt;i&gt;beendet&lt;/i&gt; (COMPLETED) oder &lt;i&gt;fehlgeschlagen&lt;/i&gt; (FAILED) ist, und deren Bearbeitungsfrist bereits zur Hälfte überschritten wurde, soll eine Konsequenz ausgeführt werden.&lt;br /&gt;Sinn der Regel ist das Scheitern des&lt;i&gt; Human Tasks&lt;/i&gt; zu verhindern. Darum lautet die Konsequenzhandlung: Es muss eine zuständige Person, z.B. ein Abteilungsleiter, per E-Mail über den dringenden Zustand informiert werden.&lt;br /&gt;&lt;br /&gt;Alle Sprachelemente und Funktionen konnten natürlich nicht gezeigt werden, jedoch wurde in diesem Post eine kleine Einführung in Drools-XML-Regeln gegeben. &lt;br /&gt;&lt;ol&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2968075504254452265-8113983372203284808?l=max-wielsch.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://max-wielsch.blogspot.com/feeds/8113983372203284808/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://max-wielsch.blogspot.com/2011/08/ein-beispiel-szenario-fur-drools-regeln.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2968075504254452265/posts/default/8113983372203284808'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2968075504254452265/posts/default/8113983372203284808'/><link rel='alternate' type='text/html' href='http://max-wielsch.blogspot.com/2011/08/ein-beispiel-szenario-fur-drools-regeln.html' title='Ein Beispiel-Szenario für Drools-Regeln'/><author><name>Max Wielsch</name><uri>http://www.blogger.com/profile/00441215734899831031</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-5fEptKrHWX4/Thhc46-z_KI/AAAAAAAAAEU/PXfklqO2pfw/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2968075504254452265.post-6023153747810153948</id><published>2011-07-24T06:13:00.000-07:00</published><updated>2011-07-24T06:13:00.542-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='App'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Figaro'/><category scheme='http://www.blogger.com/atom/ns#' term='Internetradio'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android: Eine kleine Radio-App</title><content type='html'>Oft hat es mich bereits gefrustet, dass es vom MDR bereits für Jump eine Android-App gab, mit der man den Internetradio-Stream hören konnte, aber für mein geliebtes Figaro dagegen nicht. Einen Livestream haben Sie zwar schon, jedoch ist dieser nur über die Internetseite von MDR Figaro abspielbar.&lt;br /&gt;&lt;br /&gt;Nun ja, das stimmt nicht ganz, man kann auch noch eine Wiedergabeliste dafür herunterladen. Ein beliebiger Player kann den Stream dann abspielen. Nachdem ich mir die Wiedergabeliste, eine pls-Datei, mal im Texteditor angeschaut hatte, war mir klar, dass ich auch selbst was damit anstellen könnte.&lt;br /&gt;&lt;br /&gt;So schaut eine pls-Datei aus:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;[playlist] &lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;numberofentries=1 &lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;File1=http://c22033-l.i.core.cdn.streamfarm.net/22007mdrfigaro/live/3087mdr_figaro/live_de_128.mp3 &lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Length1=-1&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;Gestern früh kam mir dann der Gedanke: Jetzt wo ich selbst ein Android-Telefon besitzte und ich auch noch Java kann, sollte ich mir doch mal eine eigene Figaro-App schreiben.&lt;br /&gt;&lt;br /&gt;Den entsprechend geeigneten Player zu finden , der von Android für Internet-Audiostreams geboten wird, war nicht schwer. Der &lt;i&gt;AsyncPlayer&lt;/i&gt; ist sehr einfach zu benutzen. Man übergibt einen URI und sagt ihm, dass er den Stream abspielen soll. Nach ein paar Sekunden beginnt er. Will man die Wiedergabe anhalten, ruft man die Stop-Methode auf. Mehr kann man mit diesem Player nicht anstellen. Folgender Code zeigt ein Beispiel:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;android.media.AsyncPlayer player = new AsyncPlayer("StreamPlayer");&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;Uri uri = Uri.parse("http://c22033-l.i.core.cdn.streamfarm.net/22007mdrfigaro/live/3087mdr_figaro/live_de_128.mp3");&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;player.play(this, uri, true, AudioManager.STREAM_MUSIC);&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;// Der Stream läuft&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;player.stop();&lt;/span&gt;&lt;/div&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;// Der stream ist gestoppt. Pause gibt es nicht.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Die App kommt aufgrund der Einfachheit mit einer Activity aus. Leider habe ich doch mehr als 5 Stunden daran gesessen. Grund dafür ist die bescheidene Android-Oberflächengestalltung. Das Layout macht nie das, was es soll :-) Die Beschreibung der View in XML ist eine saubere Sache, da Logik und Anzeige getrennt werden. Jedoch wäre es meines Erachtens nach gut gewesen, sich bei der Beschreibung der Oberfäche an XHTML und CSS zu orientieren. Lange Rede, kurzer Sinn: Die entworfene Oberfläche ist sehr einfach gehalten. Ein Play/Pause-Button und ein Stop-Button sowie ein Hintergrundbild habe ich für die View verwendet.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;Wer Interesse an der App hat, kann Sie sich unter folgendem Link herunterladen.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://dl.dropbox.com/u/3538883/Downloads_Max_Blog/MDRFigaroWebRadio.apk"&gt;http://dl.dropbox.com/u/3538883/Downloads_Max_Blog/MDRFigaroWebRadio.apk&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2968075504254452265-6023153747810153948?l=max-wielsch.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://max-wielsch.blogspot.com/feeds/6023153747810153948/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://max-wielsch.blogspot.com/2011/07/android-eine-kleine-radio-app.html#comment-form' title='3 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2968075504254452265/posts/default/6023153747810153948'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2968075504254452265/posts/default/6023153747810153948'/><link rel='alternate' type='text/html' href='http://max-wielsch.blogspot.com/2011/07/android-eine-kleine-radio-app.html' title='Android: Eine kleine Radio-App'/><author><name>Max Wielsch</name><uri>http://www.blogger.com/profile/00441215734899831031</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-5fEptKrHWX4/Thhc46-z_KI/AAAAAAAAAEU/PXfklqO2pfw/s220/me.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2968075504254452265.post-8366600085876289039</id><published>2011-07-10T06:03:00.000-07:00</published><updated>2011-07-14T06:45:09.783-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hello-World'/><category scheme='http://www.blogger.com/atom/ns#' term='drl'/><category scheme='http://www.blogger.com/atom/ns#' term='Rule-Engine'/><category scheme='http://www.blogger.com/atom/ns#' term='Drools'/><title type='text'>Drools für meine Rules :-)</title><content type='html'>Schon seit ein paar Tagen habe ich mich mit &lt;i&gt;Drools&lt;/i&gt; beschäftigt. Jetzt endlich kann ich sagen welche &lt;i&gt;Rule Engine&lt;/i&gt; die jenige ist, die ich fürs &lt;i&gt;Monitoring&lt;/i&gt; benutzen kann. Was habe ich also die letzten Tage gemacht?&lt;br /&gt;&lt;br /&gt;Zuerst einmal findet man im Netz relativ viel Material zu &lt;i&gt;Drools&lt;/i&gt;. Die Beispiele für Regeldefinitionen haben mich natürlich am meisten interessiert. Schnell hatte ich einige gefunden, die ganz gut aussahen. Daher begann ich mich näher mit &lt;i&gt;Drools&lt;/i&gt; zu beschäftigen um ein kleines Hello-World-Projekt aufzusetzen. Damit fingen die Probleme an.&lt;br /&gt;&lt;br /&gt;Nachdem ich alle Ressourcen heruntergeladen&amp;nbsp; und eingebunden hatte, habe ich ein &lt;i&gt;Rule-File&lt;/i&gt; nach den Beispielen im Netz geschrieben. Leider lief nichts. Bei der Fehlersuche verwirrte mich Anfangs, dass es noch so viele andere Sprachen für &lt;i&gt;Drools&lt;/i&gt; gab. Das genau ist der Punkt!&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Drools&lt;/i&gt; hat erstens sein eigenes Regelformat namens &lt;i&gt;"drl&lt;/i&gt;" (kein &lt;i&gt;XML&lt;/i&gt;) und zweitens unterstützt es außerdem noch Regeldefinition via &lt;i&gt;XML&lt;/i&gt;. Das Tückische daran ist, dass &lt;i&gt;Drools&lt;/i&gt;, aktuell in der Version 5.2.0 vorliegend, eine sehr starke Entwicklung durchlaufen hat. So gibt es einige verschiedene &lt;i&gt;XML&lt;/i&gt;-Formate, die alle nicht mehr aktuell sind. Die Materialien, die man im Netz dazu findet, sind oft für die alten Formate gewesen. Wenn man das weiß, stellt es kein Problem dar :-)&lt;br /&gt;&lt;br /&gt;Mein Hello-World-Beispiel habe ich zum laufen bekommen. Es ist das Ergebnis dieses Wochenendes. Eine komische Fehlermeldung wird jedoch nach wie vor angezeigt. Trage ich die Schemaversionen analog zum Versionsstand (5) von &lt;i&gt;Drools&lt;/i&gt; ein, findet er das Schema nicht. Trage ich die Version 4 ein, wie es in der aktuellen Dokumentation von der Drools-Seite zu lesen ist, bekomme ich die Meldung, dass ich doch bitte mal Version 5 eintragen soll. Seltsam!&lt;br /&gt;&lt;br /&gt;Mein Hello-World-Beispiel kommt später.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2968075504254452265-8366600085876289039?l=max-wielsch.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://max-wielsch.blogspot.com/feeds/8366600085876289039/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://max-wielsch.blogspot.com/2011/07/drools-fur-meine-rules.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2968075504254452265/posts/default/8366600085876289039'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2968075504254452265/posts/default/8366600085876289039'/><link rel='alternate' type='text/html' href='http://max-wielsch.blogspot.com/2011/07/drools-fur-meine-rules.html' title='Drools für meine Rules :-)'/><author><name>Max Wielsch</name><uri>http://www.blogger.com/profile/00441215734899831031</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-5fEptKrHWX4/Thhc46-z_KI/AAAAAAAAAEU/PXfklqO2pfw/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2968075504254452265.post-8151163198842591613</id><published>2011-07-09T08:04:00.000-07:00</published><updated>2011-07-11T00:35:43.422-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Rule-Engines'/><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><category scheme='http://www.blogger.com/atom/ns#' term='Fakten'/><title type='text'>Auswahl einer Rule-Engine</title><content type='html'>&lt;span id="goog_435949241"&gt;&lt;/span&gt;&lt;span id="goog_435949242"&gt;&lt;/span&gt;&lt;a href="http://www.blogger.com/"&gt;&lt;/a&gt;Wie im vorigen Post beschrieben kann man &lt;i&gt;Rule-Engines&lt;/i&gt; nutzen, um &lt;i&gt;Business&lt;/i&gt;-Logik in Regeln zu kapseln. Vorteile sind:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Der Code ist leichter verständlicher. Die Regeln sind in einem extra Dokument, von wo aus man zentral alle Regeln bearbeiten/betrachten kann.&lt;/li&gt;&lt;li&gt;Auch bei großen Datenmengen können die &lt;i&gt;Business-Rules&lt;/i&gt; noch schnell ausgeführt bzw. die Daten noch schnell ausgewertet werden.&lt;/li&gt;&lt;li&gt;Die Regeln können an aktuelle Anforderungen angepasst werden, ohne das System bis ins Detail kennen zu müssen ... und (!) man kann die Regeln von Außen zur Laufzeit gut manipulieren.&lt;/li&gt;&lt;/ul&gt;Wie funktionieren Rule-Engines nun?&lt;br /&gt;&lt;br /&gt;Prozesse oder Daten müssen auf bestimmte Eigenschaften ausgewertet werden. Wird eine bestimmte Bedingung erfüllt, muss eine dafür geplante Aktion ausgeführt werden.&lt;br /&gt;&lt;br /&gt;Diese Sachverhalte kann man in Regeln formulieren. Unsere Regeln bestehen also aus:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;einer Bedingung, auf die ein Eingabedatum geprüft werden muss&lt;/li&gt;&lt;li&gt;und ein Folgeaktion, die nur dann ausgeführt wird, wenn die Bedingung erfüllt worden ist.&lt;/li&gt;&lt;/ol&gt;&lt;i&gt;Regeln&lt;/i&gt; werden auf eine Menge von &lt;i&gt;Fakten&lt;/i&gt; angewandt. &lt;i&gt;Fakten&lt;/i&gt; sind unsere Geschäfts- oder Prozessdaten. Das Anwenden bzw. Ausführen der Regeln übernimmt die &lt;i&gt;Rule-Engine&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;Implementierung von &lt;i&gt;Rule-Engines&lt;/i&gt; für &lt;i&gt;Java&lt;/i&gt; gibt es einige (Vgl. &lt;a href="http://java-source.net/open-source/rule-engines"&gt;http://java-source.net/open-source/rule-engines&lt;/a&gt;). Das Problem bei der Auswahl ist die Sprache, mit der die Regeln verwendet werden. Aktuell gibt es noch nicht wirklich einen Standard für solche Sprachen. Es gibt Sprachen, mit &lt;i&gt;XML&lt;/i&gt;-Syntax, mit &lt;i&gt;Lisp&lt;/i&gt;-ähnlicher Syntax, und diverse andere &lt;i&gt;DSLs (Mehr Interessantes zu DSLs auf: &lt;a href="http://raik-bieniek.blogspot.com/"&gt;http://raik-bieniek.blogspot.com/&lt;/a&gt;)&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;Bei der Suche nach einer geeigneten &lt;i&gt;Rule-Engine&lt;/i&gt; für das &lt;i&gt;Monitoring&lt;/i&gt; ist also die Regel-Sprache wichtig. als Regelsprache werde ich eine &lt;i&gt;XML&lt;/i&gt;-Sprache verwenden. Die Manipulation von &lt;i&gt;XML&lt;/i&gt; ist sehr einfach, da es für &lt;i&gt;XML&lt;/i&gt; genügend Werkzeuge dafür gibt. In wie weit es genügend gute Werkzeuge für proprietäre Sprachen gibt, ist mir nicht bekannt. Das Suchen danach liegt momentan nicht in meinem Fokus. Daher soll es &lt;i&gt;XML&lt;/i&gt; sein.&lt;br /&gt;Weiterhin ist es von Vorteil, wenn die &lt;i&gt;Rule-Engine&lt;/i&gt; für &lt;i&gt;OSGi&lt;/i&gt; geeignet ist, sprich es sollte eine &lt;i&gt;OSGi&lt;/i&gt;-Version davon geben. Dies ist jedoch kein &lt;i&gt;"Muss"&lt;/i&gt;, mehr ein &lt;i&gt;"Nice-To-Have&lt;/i&gt;".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2968075504254452265-8151163198842591613?l=max-wielsch.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://max-wielsch.blogspot.com/feeds/8151163198842591613/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://max-wielsch.blogspot.com/2011/07/auswahl-einer-rule-engine.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2968075504254452265/posts/default/8151163198842591613'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2968075504254452265/posts/default/8151163198842591613'/><link rel='alternate' type='text/html' href='http://max-wielsch.blogspot.com/2011/07/auswahl-einer-rule-engine.html' title='Auswahl einer Rule-Engine'/><author><name>Max Wielsch</name><uri>http://www.blogger.com/profile/00441215734899831031</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-5fEptKrHWX4/Thhc46-z_KI/AAAAAAAAAEU/PXfklqO2pfw/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2968075504254452265.post-4390297869012079916</id><published>2011-07-09T07:29:00.000-07:00</published><updated>2011-07-11T00:30:49.155-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Rule-Engines'/><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Jax-WS'/><category scheme='http://www.blogger.com/atom/ns#' term='Monitoring'/><category scheme='http://www.blogger.com/atom/ns#' term='JMX'/><category scheme='http://www.blogger.com/atom/ns#' term='Drools'/><title type='text'>Über mich</title><content type='html'>Als erstes möchte ich für den frischen Blog ein paar Worte zu mir sagen.&lt;br /&gt;&lt;br /&gt;Ich studiere seit 2008 Informatik und schreibe bereits meine Bachelorarbeit. Das Thema der Bachelorarbeit ist die &lt;i&gt;"Entwicklung einer Monitoring-Komponente für den HTS&lt;/i&gt;" (&lt;a href="http://www.humantaskservice.blogspot.com/"&gt;http://www.humantaskservice.blogspot.com/&lt;/a&gt;). Um nur mal ein paar Buzzwords für die (Java-) Technologien zu nennen, mit denen ich mich gerade beschäftige, sei folgendes genannt:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;OSGi:&lt;/b&gt; Der HTS besteht aus den Teilen HTP, TPC und der &lt;i&gt;Human Task Infrastructure&lt;/i&gt; (HTI). Diese wurde basierend auf dem OSGi-Standard entwickelt. Kurz gesagt bietet dieses Framework die folgenden Vorteile, die Grund für den Einsatz dessen waren: Modularisierung, Erweiterbarkeit, austauschbarkeit, Hot-Deployment&lt;/li&gt;&lt;li&gt;&lt;b&gt;Drools (Rule-Engine):&lt;/b&gt; Mit Hilfe von Rule-Engines kann man Business-Code einer Anwendung der aus etlichen If-Then-Else-Statements besteht in Form von Regeln implementieren. Diese Regeln, oft in einem extra Dokument formuliert, können dann von einer sog. &lt;i&gt;Rule-Engine&lt;/i&gt; auf einen Satz von Daten ausgeführt werden. Damit errreicht man selbst bei einer riesigen Datenmenge eine immernoch performante Abarbeitung. Ein weiterer Grund Business-Logik in solchen Regeln zu formulieren ist, dass die einzelnen Regeln (je nach verwendeter&amp;nbsp; Regel-Sprache) einfacher lesbar, damit schneller verständlich und besser wartbar sind. Gerade in der heutigen Welt ändern sich die Anforderungen an ein Software-System sehr schnell.&lt;/li&gt;&lt;li&gt;&lt;b&gt;JMX: &lt;/b&gt;Die &lt;i&gt;Java Management Extension&lt;/i&gt; erlaubt es Java-Anwendungen zu monitoren. Mehr dazu auf &lt;a href="http://de.wikipedia.org/wiki/Java_Management_Extensions"&gt;http://de.wikipedia.org/wiki/Java_Management_Extensions&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;JAX-WS:&lt;/b&gt; Da die Dienste des HT-Service über das Netz angeboten werden, liegt es nahe Java-Webservices zu nutzen.&lt;/li&gt;&lt;/ul&gt;Dies sind die wichtigsten Technologien, mit denen die Monitoring-Komponente umgesetzt wird.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2968075504254452265-4390297869012079916?l=max-wielsch.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://max-wielsch.blogspot.com/feeds/4390297869012079916/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://max-wielsch.blogspot.com/2011/07/uber-mich.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2968075504254452265/posts/default/4390297869012079916'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2968075504254452265/posts/default/4390297869012079916'/><link rel='alternate' type='text/html' href='http://max-wielsch.blogspot.com/2011/07/uber-mich.html' title='Über mich'/><author><name>Max Wielsch</name><uri>http://www.blogger.com/profile/00441215734899831031</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-5fEptKrHWX4/Thhc46-z_KI/AAAAAAAAAEU/PXfklqO2pfw/s220/me.jpg'/></author><thr:total>0</thr:total></entry></feed>
