Das sogenannte Logging, also das Mitprotokollieren

Größe: px
Ab Seite anzeigen:

Download "Das sogenannte Logging, also das Mitprotokollieren"

Transkript

1 Logging von.net-anwendungen mit Windows-Mitteln Am laufenden Band Betreiber komplexer Systeme sind darauf angewiesen, jederzeit Informationen über den Zustand ihrer Anwendung abrufen zu können. Mit dem Semantic Logging Block der Enterprise Library lässt sich das ETW dazu einsetzen. Auf einen Blick Holger Zaman ist Senior Consultant bei Saxonia System. Er lebt und arbeitet in Hamburg. Sein Schwerpunkt ist das Entwickeln von Backend-Anwendungen mit.net. Sie erreichen ihn unter Inhalt Das Event-Tracing von Windows für eigenes Logging. Auf Ereignisse lauschen in getrennten Prozessen. Events über Filter sammeln. dnpcode A1407Logging Das sogenannte Logging, also das Mitprotokollieren von bestimmten Daten aus einer Software, während diese läuft, gehört zu den wichtigsten Instrumenten eines Programmierers, um auf den Zustand einer zu entwickelnden Software schließen zu können. Dazu muss der Entwickler an den gewünschten Punkten des Programms entsprechende Aufrufe einbauen. Inzwischen gibt es etliche Frameworks, die ihn dabei unterstützen, unter anderem auch von Microsoft mit der Enterprise Library. Semantic Logging Block In der Enterprise Library 6 hat Microsoft die Bibliothek um einen neuen Block erweitert: um den Semantic Logging Block oder auch kurz SLB. Laut Insung Park und Ricky Buch liegt sein großer Vorteil darin, anwendungs- oder gar unternehmensweit sowohl formal als auch semantisch einheitliche Logging-Informationen zu erzeugen [1]. Diesem Umstand verdankt der SLB das Semantic im Namen. Einheitliche Angaben ließen sich auch mit anderen Logging-Frameworks erzielen. Der Grund, sich dennoch mit dem SLB eingehender zu beschäftigen, liegt darin, dass das Erheben dieser Daten und das Bereitstellen derselben in verschiedenen Prozessen ablaufen können. Das hat den unschätzbaren Vorteil, dass eine einmal erstellte Information auch dann noch gespeichert und ausgewertet wird, wenn der Quellprozess schon längst beendet ist. Event Tracing for Windows Der SLB basiert auf einem Subsystem des Betriebssystems Windows, dem Event Tracing for Windows kurz ETW [2, 3], und verknüpft quasi drei Akteure. Der erste ist der Provider; er erzeugt Logging-Informationen in der Terminologie des ETW Ereignisse (Events) genannt und sendet diese an den ETW. Damit ist sein Part in dem Spiel bereits erschöpft. Der zweite Akteur ist ein Consumer, der die Events vom ETW entgegennimmt und verarbeitet. Als dritter Part steuert ein Controller, ob und wenn ja welche Events an welchen Consumer weitergereicht werden. Der Provider verfügt über eine Ereignisquelle (EventSource), die er beauftragt, Events an den Listing 1 Eine einfache Ereignisquelle für das Windows Event Tracing. /// Einfache EventSource class GrundausstattungEventSource : EventSource /// Trace-Event /// <param name="nachricht">die /// Nachricht des Events</param> public void Trace(string nachricht) WriteEvent(1,nachricht); ETW zu senden. Eine Sitzung (Session) bezeichnet eine Zuordnung eines Providers oder genau genommen seiner Events zu einem oder mehreren Consumern. Eine Session ist temporär; ihre Parameter Name der Ereignisquelle, Filter et cetera lassen sich ändern, ohne dass der Provider-Prozess davon betroffen ist. Das gilt natürlich nur für den Betrieb in einem anderen Prozess (Out-of-Process-Betrieb). Das API für den ETW befindet sich in der Windows-Datei adavapi32.dll. Bislang hat Microsoft den.net-entwicklern den Zugriff auf den ETW verwehrt, doch das hat sich mit.net 4.5 geändert. Nun steht allen Entwicklern die Möglichkeit zur Verfügung, eigene Ereignisquellen zu implementieren und zu betreiben, ohne in die Tiefen des Betriebssystems und der Datei adav api32.dll eintauchen zu müssen. Die Ereignisquelle Um als Provider mit dem ETW kommunizieren zu können, ist eine Ereignisquelle nötig. Erstellen lässt sie sich durch Ableitung von der Klasse

2 EventSource aus dem Namensraum System.Diagnostics. Eine solche Klasse kann mehrere Ereignisse anbieten. Implementiert werden diese als Methode der Ereignisquelle. Listing 1 zeigt ein Beispiel für eine einfache Ereignisquelle. Sie bietet die Methode Trace() an, die eine einfache Nachricht in das Log schreibt. Der Provider ist eine einfache Konsolenanwendung, die in Listing 2 zu sehen ist. Die Methode Main() erstellt zuerst die Ereignisquelle als statische Eigenschaft der Klasse, danach wird ein Listener vom Typ ObservableEventListener aus dem Namensraum Microsoft.Practices.Enterprise Library.SemanticLogging eingerichtet. Seine Aufgabe ist es, auf die Ereignisse zu lauschen und diese an die angeschlossenen Senken weiterzuleiten, also an die Consumer; der Listener übernimmt die Aufgabe des Controllers. Nach Erstellen des Listeners wird diesem mitgeteilt, auf welche Quelle er lauschen soll. Dies geschieht durch den Aufruf der Methode EnableEvents(), der die Instanz der Quelle sowie der Level der eingehenden Events übergeben werden. Der Level ist in diesem Fall nicht an das Ereignis selbst gebunden, sondern wird vom Listener bereitgestellt. Nun fehlt nur noch die Angabe der Ereignissenken, also der Consumer. In diesem Fall sollen die Events nur über die Konsole ausgegeben werden, daher wird im Listener der Consumer LogToCon sole registriert. Ein Aufruf von eventsource. Trace() sendet die Events an den Listener, der diese an den Consumer weiterreicht. Das Ergebnis ist in Abbildung 1 zu sehen. Die Formatierung der Ausgabe ist alles andere als übersichtlich und leider fehlt ein ganz entscheidender Hinweis, nämlich der Name der Quelle. Dieser lässt sich mit einer einfachen, benutzerdefinierten Senke implementieren. Listing 2 Ein einfacher Provider. using Microsoft.Practices.EnterpriseLibrary.SemanticLogging; class Program /// Die EventSource private static GrundausstattungEventSource eventsource get; set; static void Main(string[] args) eventsource = new GrundausstattungEventSource(); using(var listener = new ObservableEventListener()) listener.enableevents(eventsource,eventlevel.informational); listener.logtoconsole(); eventsource.trace("start der Anwendung"); eventsource.trace("die Anwendung arbeitet."); eventsource.trace("anwendung wird beendet."); listener.disableevents(eventsource); eventsource.dispose(); [Abb. 1] Ausgabe der Events über die Konsole. Eine einfache Senke Jede Senke erbt von IObserver<EventEntry>. Der Listener leitet den ursprünglichen Event aus dem ETW als Instanz der Klasse EventEntry aus dem Namensraum Microsoft.Practices.EnterpriseLibrary.SemanticLogging an sie weiter. In der Methode OnNext() der Schnittstelle IObserver<T> erfolgt die Ausgabe des Events. Listing 3 zeigt die Implementierung einer einfachen, benutzerdefinierten Senke. Die Registrierung des Consumers am Listener erfolgt durch eine Erweiterungsmethode für IObserver<EventEntry>. Listing 4 enthält eine Implementierung dieser Methode. Anstelle der Senke Log ToConsole() verwendet Listing 4 LogTo GrundausstattungEventSink(), und schon wirkt die Ausgabe auf der Konsole viel aufgeräumter und ansprechender, wie Abbildung 2 zeigt. Getrennte Prozesse Bislang lief der Listener in ETW-Terminologie der Consumer im gleichen Prozess wie der Provider. Das allerdings sollte in produktiven Anwendungen nicht der Standard sein. Um das Risiko zu minimieren, Informationen beim Absturz einer Anwendung zu verlieren, sollte der Liste

3 Logging von.net-anwendungen mit Windows-Mitteln Listing 3 Eine einfache eigene Ereignissenke. using System; using Microsoft.Practices.EnterpriseLibrary.SemanticLogging; public sealed class GrundausstattungEventSink : IObserver<EventEntry> /// Stellt neue Daten für den Beobachter bereit. /// <param name="value">die aktuellen Benachrichtigungsinformationen.</param> public void OnNext(EventEntry value) if(value!= null) var ursprünglicheschriftfarbe = Console.ForegroundColor; switch(value.schema.level) case EventLevel.Critical: Console.ForegroundColor = ConsoleColor.Red; break; case EventLevel.Error: Console.ForegroundColor = ConsoleColor.Yellow; break; default: Console.ForegroundColor = ConsoleColor.Green; break; Console.WriteLine("Quelle: 0",value.Schema.ProviderName); Console.WriteLine("Event: 0", value.eventid); Console.WriteLine("Level: 0",value.Schema.Level); Console.WriteLine("Datum: 0",value.GetFormattedTimestamp( "dd.mm.yyyy - HH:mm:ss")); Console.WriteLine("Meldung: 0",value.FormattedMessage); Console.ForegroundColor = ursprünglicheschriftfarbe; ner in einem anderen Prozess auf der gleichen Maschine laufen, vorzugsweise in einem NT-Dienst. Darüber hinaus bietet diese Betriebsart die Möglichkeit, Einstellungen der Session zu ändern, ohne den Provider neu starten zu müssen. Für so einen Out-of-Process-Betrieb stellt der Semantic Logging Block eine eigene Implementierung in Semantic Logging-svc.exe zur Verfügung. Der Listener lässt sich damit in einem Konsolenprozess oder in einem NT-Dienstprozess betreiben. Die Konfiguration des Listeners erfolgt über eine XML-Datei. Ihr Name wird in der SemanticLogging-svc.exe.config im Abschnitt appsettings unter dem Schlüssel EtwConfigurationFileName eingetragen. Die eigentliche Konfigurationsdatei ist recht übersichtlich. Im einfachsten Fall geht es darum, dem Listener eine Reihe von Senken bekannt zu machen und jeder Senke eine Event-Quelle zuzuweisen. In Listing 5 ist die Konfiguration für die Ausgabe der Events der Beispielquelle auf der Konsole des Prozesses zu sehen. Starten Sie dazu zuerst die Datei SemanticLogging-svc.exe mit dem Parameter -console und führen Sie danach das Testprogramm Grundausstattung.exe von der Heft-CD dieser dotnetpro aus. Sie sehen dann einerseits das bereits bekannte Bild, nämlich die Ausgabe des Events auf der Konsole von Grundausstattung.exe; mit einer kleinen Verzögerung erscheinen auf der Konsole von SemanticLogging-svc.exe die Events aus Grundausstattung.exe. So viel als Einführung zu den Grundzügen des Logging mit dem Semantic Logging Block und dem ETW. Mehr dazu finden Sie unter den angegebenen Quellen im Internet. /// Benachrichtigt den Beobachter, dass beim Anbieter ein Fehlerzustand aufgetreten ist. /// <param name="error">ein Objekt, das zusätzliche Informationen zum Fehler bereitstellt.</param> public void OnError(Exception error) /// Benachrichtigt den Beobachter, dass der Anbieter aufgehört hat, Pushbenachrichtigungen zu senden. public void OnCompleted() Unter der Haube: ETW und.net Das letzte Beispiel hat die Events sowohl auf der Konsole von Grundausstattung.exe als auch auf der von SemanticLogging-svc. exe ausgegeben. Im ersten Fall übermittelte die Klasse EventSource die Basisklasse von GrundausstattungEventSource das Ereignis über einen internen proprietären Dispatcher-Mechanismus an den zuvor installierten Listener in Grundausstattung.exe. Im zweiten Fall wird das Ereignis über ETW veröffentlicht und auch davon entgegengenommen. Um ein Ereignis entgegennehmen zu können, muss das Windows-Event-Tracking etwas über die Struktur des Events wissen. Um sich zu informieren, benötigt

4 es ein Instrumentation Manifest [4]. Dies ist ein mehr oder weniger komplexes XML-Dokument, das dem ETW über eine Funktion aus der Datei adav api32. dll übergeben wird. Normalerweise hat der Entwickler damit aber nichts zu tun, wenn er seine Klasse von der Klasse EventSource ableitet die Basis Event Source übernimmt das Erstellen und Veröffentlichen des Manifests. Betrachten Sie Ihre eigene EventSource- Klasse fortan nicht nur als Schnittstelle zum ETW, sondern auch als Vorlage, aus der sich per Reflektion ein Manifest erzeugen und als XML-Dokument an ETW weiterreichen lässt. Das Erzeugen des Manifests und seine Weitergabe erfolgt bei jeder Instanzierung des EventSource-Objekts. Um Ressourcen zu sparen, empfiehlt es sich, die eigene EventSource der Anwendung über das Singleton-Muster zur Verfügung zu stellen am besten auch noch mit Lazy- Initialisierung. Leider hat das Erstellen des Manifests seine Tücken. Deshalb soll die Klasse GrundausstattungEventSource ein wenig aufgepeppt werden. Auf der Konsole von Grundausstattung.exe taucht als Quelle der Name der Klasse auf, also GrundausstattungEventSource das ist unter Umständen nicht besonders aussagekräftig. Versehen Sie nun Ihre Klasse mit dem Attribut [EventSource] und geben Sie diesem einen aussagekräftigen Namen mit: [EventSource(Name = "dotnetpro-grundausstattung")] und schon erscheint auf der Konsole von Grundausstattung.exe dieser definierte Name als Quelle des Events. Im Out-of-Process-Listener SemanticLogging-svc.exe tut sich dagegen allerdings nichts. Um das zu ändern, müssen Sie in der Konfigurationsdatei den Namen der Quelle in dotnetpro-grundausstattung ändern und schon funktioniert es wieder. Sie müssen lediglich die geänderte Konfiguration speichern. SemanticLoggingsvc.exe beobachtet die Konfigurationsdatei und lädt sie automatisch nach, wenn.net Änderungen daran festgestellt hat. Das funktioniert in beiden Betriebsmodi als Konsolenanwendung oder als NT-Dienst einwandfrei. Sollte die Konfigurationsdatei Fehler enthalten, so sind in der Ereignisanzeige unter Windows- Protokolle Anwendungen hilfreiche Informationen zu finden. Im nächsten Schritt erhält die Klasse GrundausstattungEventSource eine neue [Abb. 2] Farbiges Logging mit der eigenen Ereignissenke. Listing 4 Damit wird die Senke aktiviert. using System; using Microsoft.Practices.EnterpriseLibrary.SemanticLogging; /// Erweiterung IObservable public static class GrundausstattungEventSinkRegistrierung /// Erweiterungsmethode zur Registrierung eines EventSinks vom Typ /// GrundausstattungEventSink /// <param name="eventstream">der EventStream</param> /// <returns>die SinkSubscription</returns> public static SinkSubscription<GrundausstattungEventSink> LogtoGrundausstattungEventSink(this IObservable<EventEntry> eventstream ) var sink = new GrundausstattungEventSink(); var subscription = eventstream.subscribe(sink); return new SinkSubscription<GrundausstattungEventSink>(subscription,sink); Listing 5 Die Konfiguration von SemanticLogging-svc.exe. <?xml version="1.0"?> <configuration xmlns="http://schemas.microsoft.com/practices/2013/entlib/semanticlogging/etw" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://schemas.microsoft.com/practices/2013/entlib/ semanticlogging/etw SemanticLogging-svc.xsd"> <traceeventservice/> <sinks> <consolesink name="consoleeventsink"> <sources> <eventsource name="grundausstattungeventsource" level="logalways" /> </sources> <eventtextformatter header="+=========================================+"/> </consolesink> </sinks> </configuration>

5 Logging von.net-anwendungen mit Windows-Mitteln Listing 6 Die neue Methode für die Quelle. /// Einfache EventSource [EventSource(Name="dotnetpro-Grundausstattung")] class GrundausstattungEventSource : EventSource /// Trace-Event /// <param name="nachricht">die Nachricht des Events</param> public void Trace(string nachricht) WriteEvent(1,nachricht); public void Trace(string format, params object[] args) var nachricht = string.format(format, args); Trace(nachricht); Listing 7 Der Einsatz von Keywords. [Event(2, Message = "Exception: [0] 1", Level = EventLevel.Critical, Keywords = Keywords.Exception)] public void Failure(string extype, string exmessage) if (IsEnabled(EventLevel.Critical, Keywords.Exception)) WriteEvent(2, extype, exmessage); Trace()-Methode, die einen Format-String und Parameter entgegennehmen kann, wie es Listing 6 zeigt. Die daraus erzeugte Nachricht soll wieder als Event veröffentlicht werden. Wenn Sie nun Grundausstattung.exe starten, überrascht die Meldung Nicht unterstützter Typ Object[] in Ereignisquelle. Das liegt daran, dass jede Methode in einer von EventSource abgeleiteten Klasse vom Parser, der das Manifest erstellt, als Event betrachtet wird. Die Typen der Parameter einer Methode als Ereignisquelle sind beschränkt und Object[] gehört nicht dazu. Welche Typen zugelassen sind, zählt der Kasten Die Payload auf. Sie können die soeben erstellte Methode mit dem Attribut [NonEvent] kennzeichnen, dann überspringt der Parser die Methode. Die Payload Ein Event, der an den ETW gesendet wird, besteht aus einem Header und der Payload. Die Payload enthält die Nutzdaten des Events. Header und Payload dürfen die Größe von 64 KB nicht übersteigen, ansonsten kommt es beim Bereitstellen des Events an den ETW zu einer Ausnahme. Folgende Typen sind als Payload eines Events zulässig: Boolean Int8 UInt8 Int16 UInt16 Int32 UInt32 Int64 UInt64 Float Double FILETIME UnicodeString Guid Den Event konfigurieren Das Gegenteil von [NonEvent] ist das Attribut [Event]. Es teilt dem Parser Metainformationen über die Methode als Event mit. Der einzige obligatorische Parameter des Attributs ist Id, der die ID des Events angibt. Diese muss in der Event- Quelle eindeutig sein. In der Methode setzen Sie mit Write Event() aus der Basisklasse EventSource den Event an das ETW ab. Achten Sie dabei darauf, dass die Event-ID, die Sie der Methode mitgeben, der Event-ID in der Konfiguration des Attributs entspricht. Der folgende Code zeigt die einfachste derartige Implementierung. [Event(1)] public void Trace(string nachricht) WriteEvent(1, nachricht); Das Attribut [Event] hat aber noch mehr zu bieten. Da es sich dabei um die Mitteilung einer eher banalen Information handelt, wird der Level des Events im Attribut explizit auf EventLevel.Informational gesetzt; dies ist der Standard-Level [1]. Um die Nachricht mit ein paar Informationen über die Umgebung anzureichern, wird die Methode Trace() um die Angabe des Prozess- und des Rechnernamens erweitert. Dies sieht dann so aus: [Event(1, Level = EventLevel.Informational)] public void Trace(string nachricht, string processname, string machine) WriteEvent(1, nachricht, prozess,rechner); Die Angaben nachricht, prozess und rechner werden in die Payload des Events gestellt. Die Payload enthält alle vom Entwickler als Parameter an den Event über

6 [Abb. 3] Manifest einer EventSource. gebenen Werte. Auch hier gelten wieder die erwähnten Einschränkungen, siehe abermals den Kasten Die Payload. Die Nachricht des Events ist allerdings noch leer. Das Attribut bietet die Möglichkeit, in einem Format-String die auszugebende Nachricht zu formatieren. Für diese Zeichenkette gelten die Regeln, die von String.Format() bekannt sind. Leider kann bei der Konfiguration eines Events einiges schiefgehen. Damit sich die Event-Implementierung automatisiert testen lässt, stellt der SLB mit der Klasse EventSourceAnalyzer ein Tool zur Verfügung, um das eigene EventSource-Objekt auf Regelkonformität zu prüfen. Der Aufruf der Prüfung erfolgt über die statische Methode InspectAll(), der eine Instanz des Objekts übergeben wird. Wenn Sie sich das Manifest Ihrer Event- Source betrachten wollen, können Sie das mithilfe der statischen Methode GenerateManifest() aus der Basisklasse Event Source tun. Abbildung 3 zeigt das Manifest der hier beschriebenen Event-Quellen- Klasse. Mehr zum Thema Manifest finden Sie unter [4]. Hört mich jemand? Aber was passiert, wenn für die Event- Quelle keine entsprechende Session ein- Listing 8 Eine Instanz mit dem EventSourceImplementer erzeugen. using System; using EventSourceProxy; namespace Dev class Program static void Main(string[] args) try var eventsource = EventSourceImplementer.GetEventSource <MeineEventSourceSpezialisiert>() as MeineEventSourceSpezialisiert; eventsource.trace("hallo ETW","Dev","Mein Rechner"); eventsource.dispose(); catch (Exception ex) Console.WriteLine(ex.Message); finally Console.WriteLine("Finito"); Console.ReadKey();

7 Logging von.net-anwendungen mit Windows-Mitteln gerichtet wurde, die auf die Ereignisse lauscht? Nichts. Bei Meldungen, die einen kritischen Zustand der Anwendungen signalisieren, ist das allerdings inakzeptabel. Leider kann eine Event-Quelle keine Session erzwingen, aber sie kann prüfen, ob es eine Session gibt, die für sie zuständig ist, und gegebenenfalls darauf reagieren. Dazu stellt die Basisklasse Event Source die Methode IsEnabled() mit zwei Überschreibungen zur Verfügung. Beide prüfen, ob für das EventSource-Objekt eine Session zur Verfügung steht. Zwar ist der ETW ein ziemliches Arbeitstier auf dem System des Autors wurden Events in 58 Millisekunden an den ETW gesendet und in eine Datenbank geschrieben, dennoch, oder gerade deshalb, sollten Sie nicht unnötig Ressourcen in Anspruch nehmen. Daher empfiehlt es sich auch bei unkritischen Meldungen, abzufragen, ob es eine Session dazu gibt, und den Event nur dann zu veröffentlichen, wenn dies der Fall ist. Wider die Informationsflut Damit wertvolle Informationen nicht im Wust der weniger relevanten untergehen, Listing 9 lässt sich ein Event mit einem Filter versehen. Filter lassen sich grob in zwei Kategorien einteilen: solche, die bereits im ETW dafür sorgen, dass ein Event nicht an den Consumer weitergeleitet wird, und solche, deren Auswertung der Consumer übernimmt. Zur ersten Kategorie gehört der Filter Keywords. Schlüsselbegriffe werden in der EventSource-Klasse als eingebettete Klasse implementiert, die den Namen Keywords tragen muss. Innerhalb der Klasse werden die Schlüsselbegriffe dann als Konstanten vom Typ EventKeywords aus dem Namensraum System.Diagnostics. Tracing definiert. Die Werte der Schlüsselbegriffe müssen einer Zweierpotenz entsprechen also 1, 2, 4, 8, 16, 32 und so weiter. Dadurch lassen sich bis zu 64 Werte für eine EventSource-Klasse implementieren. Die Klasse kann mit einer Überschreibung der Methode IsEnabled() aus der Basisklasse abfragen, ob es für die Event Source einen Consumer gibt, der auf ein Event mit dem angegebenen Level und dem angegebenen Schlüsselwert wartet, wie es Listing 7 zeigt. Die Schlüsselwerte eines Events werden wie oben schon über das Attribut [Event] bekannt gemacht. Es besteht natürlich die Möglichkeit, mehrere Werte mit dem Oder-Operator zu verknüpfen. Die Filter OpCodes und Tasks sind nur durch den Consumer auszuwerten. Nähere Informationen zu den Keywords, Tasks und OpCodes finden sich unter [1] und [4]. Eine für alle Der Name der Event-Quelle, den das gleichnamige Attribut angibt, bezeichnet semantisch die Anwendung, die das Ereignis abgesetzt hat. Soll nun eine EventSource-Klasse unternehmensweit in verschiedenen Anwendungen eingesetzt werden, stehen Sie vor dem Problem, dass alle Events aller Anwendungen als Quelle immer die gleiche EventSource ausweisen. Es müsste also die Möglichkeit geben, je nach Anwendung den Namen der Event- Quelle zu spezialisieren. Leider lässt sich der Name der Quelle zur Laufzeit nicht ändern. Auch eine Ableitung von einer benutzerdefinierten, abstrakten EventSource-Klasse mit der Spezifizierung des Namens im [EventSource]- Eine EventSource-Instanz mit dem Template generieren. using System; using EventSourceProxy; namespace EventSources [EventSource(Name = "LoggingEventSourceTemplate")] public abstract class LoggingEventSourceTemplate<TEventSource> : EventSource where TEventSource :LoggingEventSourceTemplate<TEventSource>, new() /// Standardkonstruktor protected LoggingEventSourceTemplate() : base(true) /// Singleton-Instanz [NonSerialized] private static readonly Lazy<TEventSource> instance = new Lazy<TEventSource>(eventSourceFactory); /// Fabrikmethode zur Erstellung der EventSource /// <returns>die EventSource</returns> private static TEventSource eventsourcefactory() TEventSource eventsource = null; try eventsource = EventSourceImplementer. GetEventSource<TEventSource>() as TEventSource; catch (Exception ex) LoggingFailure.Log.Failure(ex); if(eventsource == null) LoggingFailure.Log.Failure( "Die EventSource konnte nicht erstellt werden."); return eventsource; /// Zugriff auf das Singleton public static TEventSource Log get return instance.value;

8 Attribut führt nicht zum Ziel in diesem Fall weist das Manifest keinerlei Events auf. Der Versuch, über die EventSource in den ETW zu schreiben, wird mit einer Ausnahme vom Typ Index OutOfRange quittiert. Die Überprüfung des Event Source- Objekts mit EventSourceAnalyzer. InspectAll() ergibt, dass keine Methode mit dem Attribut [Event] ausgestattet wurde. Nach dem Stand der Dinge bleibt nun nichts anderes übrig, als für jede Anwendung eine eigene EventSource-Klasse von EventSource abzuleiten. Zum Glück gibt es Abhilfe in Gestalt eines NuGet-Pakets namens EventSource Proxy von Jon Wagner [5]. Neben etlichen Merkmalen, die das Arbeiten mit Event Source-Objekten erleichtern, stellt diese Erweiterung eine generische Methode Get EventSource() in EventSourceImplementer zur Verfügung, die aus einer spezialisierten Event-Quelle ein brauchbares regelkonformes EventSource-Objekt erzeugt. In Listing 8 sehen Sie den Einsatz des EventSourceImplementer. Die Klasse MeineEventSource ist von EventSource aus System.Diagnostics.Tracing abgeleitet. Der Name der Event-Quelle lautet dotnetpro. Sie bildet die abstrakte Basisklasse für MeineEventSourceSpezialisiert, deren Name dotnetpro-spezial ist (siehe auch Listing 10). Eine direkte Verwendung von MeineEventSource führt zu den bereits beschriebenen Problemen. Überlassen Sie allerdings die Instanzierung des Event Source-Objekts der Methode EventSource Implementer.GetEventSource(), stellt sich das gewünschte Ergebnis ein. Auf der CD zum Heft befindet sich in den Quellcodes des Projekts EventSources ein generisches Muster für die Implementierung einer EventSource-Klasse unter LoggingEventSourceProxy. Listing 9 zeigt den Kern der Implementierung zum Erzeugen einer Singleton-Instanz der Event-Quelle. Natürlich müssen in dieser Vorlage noch die einzelnen Events implementiert werden. Das Erstellen einer EventSource-Klasse, deren Name der Name der Anwendung ist, ist dann nur noch eine einfache Ableitung, wie Listing 10 zeigt. Die so erzeugte Instanz lässt sich wie alle EventSource-Instanzen mit EventSourceAnalyzer.Inspect All() prüfen. Das Erzeugen des Manifests via Event Source.GenerateManifest() funktioniert ebenfalls, vorausgesetzt der zweite Parameter gibt das Verzeichnis der Anwendung an. Ein Blick in das Manifest bestätigt, dass eine Event-Quelle für den Provider dotnetpro-spezial erzeugt wurde. Auf der anderen Seite Der SLB stellt Senken für das Speichern der Events in einer Datenbank, einer Datei, einer Azure-Table oder zur Anzeige auf der Konsole zur Verfügung. Benutzerdefinierte Senken können wie in Listing 3 oder unter [1] beschrieben implementiert werden. Für die hauseigenen Senken bringt der SLB zur Konfiguration von SemanticLogging-svc.exe eigene Tags mit. Benutzerdefinierte Senken werden mit dem Tag customsink versehen. Listing 11 zeigt, wie die in Listing 3 implementierte Senke für diesen Zweck konfiguriert wird. Fazit Der SLB und EventSource eröffnen den Weg in das Logging über das Event Tracing for Windows. Gäbe es nicht das NuGet-Paket EventSourceProxy, wäre ein Listing 10 Eine spezialisierte Event-Quelle. using EventSources; namespace DotNetPro.Spezial [EventSource(Name = "dotnetpro-spezial")] public class LocalEventSource : LoggingEventSourceTemplate<LocalEventSource> Listing 11 anwendungs- und unternehmensweiter Einsatz fraglich. So aber füllt dieses Addon eine konzeptionelle Lücke und macht ETW unter.net zu einer attraktiven Alternative für das Logging. Dennoch sind die verfügbaren Klassen und Tools erst der Anfang. Vor allem der Parser, der aus einer benutzerdefinierten EventSource-Klasse ein Manifest erzeugt, bedarf noch der Überarbeitung. [jp] [1] Dr. Insung Park und Ricky Buch, Verbessertes Debugging und Leistungsoptimierung mit ETW, [2] MSDN, ETW-Ablaufverfolgung, [3] MSDN, Logging what you mean: Using the Semantic Logging Application Block, [4] MSDN, Writing an Instrumentation Manifest, [5] Jon Wagner, EventSourceProxy, Konfiguration des benutzerdefinierten Consumers für einen Out-of-Process-Einsatz. <?xml version="1.0"?> <configuration xmlns="http://schemas.microsoft.com/practices/2013/entlib/semanticlogging/etw" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://schemas.microsoft.com/practices/2013/entlib/semanticlogging/etw SemanticLogging-svc.xsd"> <traceeventservice/> <sinks> <customsink name="beautifulconsolesink" type="eventsinks.consoleeventsink, EventSinks"> <sources> <eventsource name="dotnetpro-spezial"/> </sources> </customsink> </sinks> </configuration>

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

Übung 1 mit C# 6.0 MATTHIAS RONCORONI Übung 1 mit C# 6.0 MATTHIAS RONCORONI Inhalt 2 1. Überblick über C# 2. Lösung der Übung 1 3. Code 4. Demo C# allgemein 3 aktuell: C# 6.0 mit.net-framework 4.6: Multiparadigmatisch (Strukturiert, Objektorientiert,

Mehr

Exception Handling, Tracing und Logging

Exception Handling, Tracing und Logging Exception Handling, Tracing und Logging Proseminar Objektorientiertes Programmieren mit.net und C# Tomas Ladek Institut für Informatik Software & Systems Engineering Agenda Exceptions Allgemeines Implementierung

Mehr

Vererbung & Schnittstellen in C#

Vererbung & Schnittstellen in C# Vererbung & Schnittstellen in C# Inhaltsübersicht - Vorüberlegung - Vererbung - Schnittstellenklassen - Zusammenfassung 1 Vorüberlegung Wozu benötigt man Vererbung überhaubt? 1.Um Zeit zu sparen! Verwendung

Mehr

Programmieren in Java

Programmieren in Java Programmieren in Java Dateien lesen und schreiben 2 Übersicht der heutigen Inhalte File Streams try-with-resources Properties csv-dateien 3 Klasse File Die Klasse java.io.file bietet Unterstützung im Umgang

Mehr

Delegatesund Ereignisse

Delegatesund Ereignisse Delegatesund Ereignisse «Delegierter» Methoden Schablone Funktionszeiger Dr. Beatrice Amrhein Überblick Definition eines Delegat Einfache Delegate Beispiele von Delegat-Anwendungen Definition eines Ereignisses

Mehr

TCP/IP Programmierung. C# TimeServer Java6 TimeClient

TCP/IP Programmierung. C# TimeServer Java6 TimeClient TCP/IP Programmierung C# TimeServer Java6 TimeClient Stand 19.10.11 21:24:32 Seite 1 von 16 Inhaltsverzeichnis Erläuterung...3 Software...3 C#TimeServer...4 Klasse ServerThread...6 Starten und Beenden...7

Mehr

i n g e n i e u r b ü r o f ü r s o f t w a r e t e c h n o l o g i e w w w. v o e l t e r. d e Servlet Debugging

i n g e n i e u r b ü r o f ü r s o f t w a r e t e c h n o l o g i e w w w. v o e l t e r. d e Servlet Debugging Servlet Debugging Markus Völter, voelter@acm.org, www.voelter.de Bei der Arbeit mit Servlets kommt man recht schnell an den Punkt, an dem man Servlets vernünftig testen oder debuggen will. Mit Hilfe des

Mehr

.NET-Networking 2 Windows Communication Foundation

.NET-Networking 2 Windows Communication Foundation .NET-Networking 2 Windows Communication Foundation Proseminar Objektorientiertes Programmieren mit.net und C# Fabian Raab Institut für Informatik Software & Systems Engineering Agenda Grundproblem Bestandteile

Mehr

Tutorial: Eigene Module und Extensions entwickeln. Version: 0.1 Autor: Anja Beuth

Tutorial: Eigene Module und Extensions entwickeln. Version: 0.1 Autor: Anja Beuth Tutorial: Eigene Module und Extensions entwickeln Version: 0.1 Autor: Anja Beuth Inhaltsverzeichnis 1 2 2.1 2.2 2.3 2.4 3 4 4.1 4.2 4.3 5 5.1 6 6.1 6.2 Notwendigkeit prüfen... Ein Projekt in Visual Studio

Mehr

Einführung in die Cross-Plattform Entwicklung Web Services mit dem Intel XDK

Einführung in die Cross-Plattform Entwicklung Web Services mit dem Intel XDK Einführung in die Cross-Plattform Entwicklung Web Services mit dem Intel XDK Einführung Dieses Hands-on-Lab (HOL) macht den Leser mit dem Intel XDK und dem Zugriff auf Web Services vertraut. Der Web Service

Mehr

Starthilfe für C# Inhaltsverzeichnis. Medien- und Kommunikationsinformatik (B.Sc.) Alexander Paharukov. Informatik 3 Praktikum

Starthilfe für C# Inhaltsverzeichnis. Medien- und Kommunikationsinformatik (B.Sc.) Alexander Paharukov. Informatik 3 Praktikum Starthilfe für C# Inhaltsverzeichnis Allgemeines... 2 Bezugsquellen... 2 SharpDevelop... 2.NET Runtime... 2.NET SDK... 2 Installation... 2 Reihenfolge... 2 Vorschlag für eine Ordnerstruktur... 3 Arbeit

Mehr

GetName(), GetName(), GetGeschlecht() und AelterWerden().

GetName(), GetName(), GetGeschlecht() und AelterWerden(). 11. Vererbung Vererbung ist eine der mächtigsten Funktionalitäten der objektorientierten Programmiersprachen. Man versteht unter Vererbung die Tatsache, dass eine Klasse alle Methoden und Variablen einer

Mehr

Jürgen Bayer. MDI-Anwendungen in C#

Jürgen Bayer. MDI-Anwendungen in C# Jürgen Bayer MDI-Anwendungen in C# Inhaltsverzeichnis 1 Grundlagen 2 1.1 Einrichten der Formulare 2 1.2 Öffnen von MDI-Childformularen 3 2 Menüs 4 2.1 Erstellen eines Menüs 4 2.2 Programmierung der Menüpunkte

Mehr

Ein einfacher Server. .NET Remoting. Klassentypen

Ein einfacher Server. .NET Remoting. Klassentypen Einführung - eine Klienten-Applikation kann mit einer Komponente interagieren die hinter einer Grenze liegt - Remoting ermöglicht eine Kommunikation von Komponenten Kontext-, Applikationsdomänen- (leichtgewichtiger

Mehr

Folge 18 - Vererbung

Folge 18 - Vererbung Workshop Folge 18 - Vererbung 18.1 Ein einfacher Fall der Vererbung Schritt 1 - Vorbereitungen Besorgen Sie sich - vielleicht aus einer der Übungen der Folge 17 - ein fertiges und lauffähiges Listenprojekt,

Mehr

Java Einführung Methoden in Klassen

Java Einführung Methoden in Klassen Java Einführung Methoden in Klassen Lehrziel der Einheit Methoden Signatur (=Deklaration) einer Methode Zugriff/Sichtbarkeit Rückgabewerte Parameter Aufruf von Methoden (Nachrichten) Information Hiding

Mehr

Asynchrone Webservices mit Axis 1.x in Java

Asynchrone Webservices mit Axis 1.x in Java Asynchrone Webservices mit Axis 1.x in Java 1. Übersicht Architektur Da Webservices nach relativ kurzen Timeouts Anfragen abgearbeitet haben müsse, sind komplexe Anfragen wie sie in der Bioinformatik üblich

Mehr

Technische Dokumentation SilentStatistikTool

Technische Dokumentation SilentStatistikTool Technische Dokumentation SilentStatistikTool Version 1.0 Marko Schröder 1115063 Inhalt Einleitung... 3 Klasse Program... 3 Klasse ArgumentHandler... 3 Bereitgestellte Variablen... 3 Bereitgestellte Methoden...

Mehr

Willkommen zur Vorlesung. Objektorientierte Programmierung Vertiefung - Java

Willkommen zur Vorlesung. Objektorientierte Programmierung Vertiefung - Java Willkommen zur Vorlesung Objektorientierte Programmierung Vertiefung - Java Zum Dozenten Mein Name: Andreas Berndt Diplom-Informatiker (TU Darmstadt) Derzeit Software-Entwickler für Web- Applikationen

Mehr

3 Objektorientierte Konzepte in Java

3 Objektorientierte Konzepte in Java 3 Objektorientierte Konzepte in Java Bisherige Beobachtungen zu Objekten: werden in Klassen zusammengefasst besitzen Eigenschaften und Verhalten verbergen private Informationen werden geboren, leben und

Mehr

Einführung in das Microsoft.NET-Framework. Programmiersprache C# 02: Visual Studio / Hello World. Boris Hülsmann

Einführung in das Microsoft.NET-Framework. Programmiersprache C# 02: Visual Studio / Hello World. Boris Hülsmann Einführung in das Microsoft.NET-Framework Programmiersprache C# 02: Visual Studio / Hello World Boris Hülsmann 23.09.2010 1 In dieser Einführung bekommen Sie einen kurzen Einstieg in das.net-framework

Mehr

Programmieren in Java

Programmieren in Java Programmieren in Java objektorientierte Programmierung 2 2 Zusammenhang Klasse-Datei In jeder *.java Datei kann es genau eine public-klasse geben wobei Klassen- und Dateiname übereinstimmen. Es können

Mehr

Installation des edu- sharing Plug- Ins für Moodle

Installation des edu- sharing Plug- Ins für Moodle Installation des edu- sharing Plug- Ins für Moodle [edu-sharing Team] [Dieses Dokument beschreibt die Installation und Konfiguration des edu-sharing Plug-Ins für das LMS Moodle.] edu- sharing / metaventis

Mehr

Problemstellung. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 24: Reflection 1. IDE und automatische Tests.

Problemstellung. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 24: Reflection 1. IDE und automatische Tests. Universität Osnabrück 1 Problemstellung 3 - Objektorientierte Programmierung in Java Vorlesung 24: Reflection 1 SS 2006 Prof. Dr. Frank M. Thiesing, FH Osnabrück Um ein Objekt anzulegen, eine seiner Methoden

Mehr

3. Auflage. O Reillys Taschenbibliothek. C# 5.0 kurz & gut. Joseph Albahari & Ben Albahari O REILLY. Aktualisierung von Lars Schulten

3. Auflage. O Reillys Taschenbibliothek. C# 5.0 kurz & gut. Joseph Albahari & Ben Albahari O REILLY. Aktualisierung von Lars Schulten O Reillys Taschenbibliothek 3. Auflage C# 5.0 kurz & gut O REILLY Joseph Albahari & Ben Albahari Aktualisierung von Lars Schulten Inhalt C# 5.0 kurz & gut... 1 Ein erstes C#-Programm... 2 Syntax... 5 Typgrundlagen...

Mehr

License Management 1.0 - SDK

License Management 1.0 - SDK License Management 1.0 - SDK Inhalt Allgemeine Beschreibung... 2 Vorbereitungen... 2 Download aller nötigen Dateien und Dokumentationen... 2 Beantragung eines ValidationKeys... 2 Beantantragung einer Development-Lizenz...

Mehr

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden. Grundwissen Informatik Objekt Attribut Methoden Als Objekte bezeichnet man alle Gegenstände, Dinge, Lebewesen, Begriffe oder Strukturen unserer Welt ( Autos, Räume, Bakterien, Lehrer, Schüler, Kunden,

Mehr

Ogre Einführung Teil 1

Ogre Einführung Teil 1 Inhalt -Einleitung -Installieren und Einrichten von Ogre -Die erste Anwendung Ogre Einführung Teil 1 Einleitung Eine 3D Engine ist eine sehr komplexe Software und besteht aus mehreren tausend Zeilen Programmcode.

Mehr

Tutorial. Bibliothek AutoGUITest V1.0. Windows-Benutzeroberflächen automatisiert testen. Ausgabe: 6.6.02. 06.06.02 / 13:51 Seite 1

Tutorial. Bibliothek AutoGUITest V1.0. Windows-Benutzeroberflächen automatisiert testen. Ausgabe: 6.6.02. 06.06.02 / 13:51 Seite 1 Bibliothek AutoGUITest V1.0 Windows-Benutzeroberflächen automatisiert testen Tutorial Ausgabe: 6.6.02 06.06.02 / 13:51 Seite 1 Inhalt 1 Übersicht...3 2 Funktionsweise...3 3 Funktionsumfang...3 4 Einsatz

Mehr

Die Bibliothek ist mit folgenden.net-frameworks kompatibel: .NET 4.5

Die Bibliothek ist mit folgenden.net-frameworks kompatibel: .NET 4.5 Die DW-LogLibrary ist eine kleine, einfach zu verwendende Softwarebibliothek, um Entwicklern von.net-programmen das Speichern von Ausgaben und Fehlermeldungen ihrer Programme zu erleichtern. Sie unterstützt

Mehr

Java: Vererbung. Teil 3: super() www.informatikzentrale.de

Java: Vererbung. Teil 3: super() www.informatikzentrale.de Java: Vererbung Teil 3: super() Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und IMMER zuerst den Konstruktor der Elternklasse auf! Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und

Mehr

Einführung in das Microsoft.NET-Framework. Programmiersprache C# MEF Das Managed Extensibility Framework. André Kunz

Einführung in das Microsoft.NET-Framework. Programmiersprache C# MEF Das Managed Extensibility Framework. André Kunz Einführung in das Microsoft.NET-Framework Programmiersprache C# MEF Das Managed Extensibility Framework André Kunz 21.09.2010 1 In dieser Einführung bekommen Sie einen kurzen Einstieg in das.net-framework

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen Tafelübung 04 Referenzen, Overloading, Klassen(hierarchien) Clemens Lang T2 18. Mai 2010 14:00 16:00, 00.152 Tafelübung zu AuD 1/13 Organisatorisches Nächster Übungstermin

Mehr

NTx e-billing-system DEBS 1.0 - Übersicht

NTx e-billing-system DEBS 1.0 - Übersicht NTx e-billing-system DEBS 1.0 - Übersicht DEBS = ebilling@sharepoint Was ist DEBS? DEBS ist eine integrierte Lösung zur Archivierung, Beschlagwortung und Weiterverarbeitung elektronischer Rechnungen nach

Mehr

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 14/15. Kapitel 11. Fehler und Ausnahmen 1

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 14/15. Kapitel 11. Fehler und Ausnahmen 1 Kapitel 11 Fehler und Ausnahmen Fehler und Ausnahmen 1 Ziele Fehlerquellen in Programmen und bei der Programmausführung verstehen Das Java-Konzept der Ausnahmen als Objekte kennenlernen Ausnahmen auslösen

Mehr

Java-Schulung Grundlagen

Java-Schulung Grundlagen Java-Schulung Grundlagen Java 2 Standard Edition JDK 5 / 6 31.05.2008 Marcel Wieczorek 1 Themenübersicht Basiswissen Objektorientierung Datentypen Fehlerbehandlung Sonstiges Einführung Klassen, Strings

Mehr

Objektorientierte Programmierung mit Python Polymorphismus und Vererbung. Eltern

Objektorientierte Programmierung mit Python Polymorphismus und Vererbung. Eltern Objektorientierte Programmierung mit Python Polymorphismus und Vererbung Eltern Kind Kind Kind Kind Prinzipien der objektorientierten Programmierung Vererbung Strukturierung von Klassen. Oberbegriffe beschreiben

Mehr

Einführung in Javadoc

Einführung in Javadoc Einführung in Javadoc Johannes Rinn http://java.sun.com/j2se/javadoc Was ist Javadoc? Javadoc ist ein Werkzeug, dass eine standardisierte Dokumentation für die Programmiersprache Java unterstützt. Vorteil:

Mehr

Programmierkurs Java

Programmierkurs Java Programmierkurs Java Konstruktor, Statische Methoden Packages Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/fischer Initialisierung von Datenstrukturen

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java Vorlesung vom 18.4.07, Grundlagen Übersicht 1 Kommentare 2 Bezeichner für Klassen, Methoden, Variablen 3 White Space Zeichen 4 Wortsymbole 5 Interpunktionszeichen 6 Operatoren 7 import Anweisungen 8 Form

Mehr

Klassenbeziehungen & Vererbung

Klassenbeziehungen & Vererbung Klassenbeziehungen & Vererbung VL Objektorientierte Programmierung Raimund Kirner teilweise nach Folien von Franz Puntigam, TU Wien Überblick Arten von Klassenbeziehungen Untertypen versus Vererbung in

Mehr

Ereignisbehandlung 21

Ereignisbehandlung 21 Ereignisbehandlung 21 3 Ereignisbehandlung Dieses Kapitel beschäftigt sich mit der Ereignisbehandlung, d.h. der Reaktion eines Programms auf Eingaben durch benutzende Personen. Nach einigen ersten Beispielen

Mehr

Kapitel 6. Vererbung

Kapitel 6. Vererbung 1 Kapitel 6 2 Ziele Das sprinzip der objektorientierten Programmierung verstehen Und in Java umsetzen können Insbesondere folgende Begriffe verstehen und anwenden können: Ober/Unterklassen Subtyping Überschreiben

Mehr

Abschnitt 9: Schnittstellen: Interfaces

Abschnitt 9: Schnittstellen: Interfaces Abschnitt 9: Schnittstellen: Interfaces 9. Schnittstellen: Interfaces 9.1 Die Idee der Schnittstellen 9.2 Schnittstellen in Java 9.3 Marker-Interfaces 9.4 Interfaces und Hilfsklassen 9.5 Zusammenfassung

Mehr

Tutorial: Eigene Module und Extensions entwickeln. version: 0.1 Author: Anja Beuth

Tutorial: Eigene Module und Extensions entwickeln. version: 0.1 Author: Anja Beuth Tutorial: Eigene Module und Extensions entwickeln version: 0.1 Author: Anja Beuth Table of contents 1 2 2.1 2.2 2.3 2.4 3 4 4.1 4.2 4.3 5 5.1 6 6.1 6.2 Notwendigkeit prüfen... Ein Projekt in Visual Studio

Mehr

Dokumentation zum Projekt Mail-Adapter in SAP PI. 17.01.2011 Sinkwitz, Sven 519707 Theel, Thomas 519696

Dokumentation zum Projekt Mail-Adapter in SAP PI. 17.01.2011 Sinkwitz, Sven 519707 Theel, Thomas 519696 Dokumentation zum Projekt Mail-Adapter in SAP PI 17.01.2011 Sinkwitz, Sven 519707 Theel, Thomas 519696 Inhalt 1. Einleitung... 2 2. Vorgehen... 3 1. Datentyp für die Mail einrichten... 3 2. Message Typen

Mehr

Musterlösung zur Vorlesung Modellbasierte Softwareentwicklung Wintersemester 2014/2015 Übungsblatt 9

Musterlösung zur Vorlesung Modellbasierte Softwareentwicklung Wintersemester 2014/2015 Übungsblatt 9 Prof. Dr. Wilhelm Schäfer Paderborn, 15. Dezember 2014 Christian Brenner Tristan Wittgen Musterlösung zur Vorlesung Modellbasierte Softwareentwicklung Wintersemester 2014/2015 Übungsblatt 9 Aufgabe 1 Codegenerierung

Mehr

Probeklausur: Programmierung WS04/05

Probeklausur: Programmierung WS04/05 Probeklausur: Programmierung WS04/05 Name: Hinweise zur Bearbeitung Nimm Dir für diese Klausur ausreichend Zeit, und sorge dafür, dass Du nicht gestört wirst. Die Klausur ist für 90 Minuten angesetzt,

Mehr

Kapitel 6. Vererbung

Kapitel 6. Vererbung 1 Kapitel 6 2 Ziele Das sprinzip der objektorientierten Programmierung verstehen Und in Java umsetzen können Insbesondere folgende Begriffe verstehen und anwenden können: Ober/Unterklassen Subtyping Überschreiben

Mehr

Anleitung. Ein einfaches RMI-Beispiel. (ab Java 5.0) c Y. Pfeifer. (Juni 2014)

Anleitung. Ein einfaches RMI-Beispiel. (ab Java 5.0) c Y. Pfeifer. (Juni 2014) Anleitung Ein einfaches RMI-Beispiel (ab Java.0) c Y. Pfeifer (Juni 014) 1 Ein einfaches RMI-Beispiel Vorgehensweise: 1. Java Projekt anlegen. Zwei Packages server & client erstellen Auf der Server-Seite

Mehr

stoll professional software GmbH >> good ideas!

stoll professional software GmbH >> good ideas! stoll professional software GmbH >> good ideas! Release Notes LivingDetector Version 3.2.5 1. Einführung Anhand der aufgetretenen Exceptions und der ausgeführten Benutzeraktionen ermöglicht ihnen LivingDetector

Mehr

Distributed Computing Group

Distributed Computing Group JAVA TUTORIAL Distributed Computing Group Vernetzte Systeme - SS 06 Übersicht Warum Java? Interoperabilität grosse und gut dokumentierte Library weit verbreitet Syntax sehr nahe an C Erfahrung: Java wird

Mehr

Analyse und Modellierung von Informationssystemen

Analyse und Modellierung von Informationssystemen Analyse und Modellierung von Informationssystemen Dr. Klaus Höppner Hochschule Darmstadt Sommersemester 2013 1 / 19 Einführung: Entwurfsmuster Erzeugungsmuster Fabrik-Muster Singleton-Muster Beispiel 2

Mehr

Javakurs zu Informatik I. Henning Heitkötter

Javakurs zu Informatik I. Henning Heitkötter Javakurs zu Informatik I Arrays vergleichen Implementieren Sie folgende Methode, die prüft, ob die Elemente der beiden Arrays an jeder Position übereinstimmen: public static boolean identisch(int[] a,

Mehr

3 Objektorientierte Konzepte in Java

3 Objektorientierte Konzepte in Java 3 Objektorientierte Konzepte in Java 3.1 Klassendeklarationen Fragen an die Klassendeklaration: Wie heißt die Klasse? Wer darf auf die Klasse und ihre Attribute/Methoden zugreifen? Ist die Klasse eine

Mehr

5.5.8 Öffentliche und private Eigenschaften

5.5.8 Öffentliche und private Eigenschaften 5.5.8 Öffentliche und private Eigenschaften Schnittstellen vs. Implementierungen: Schnittstelle einer Klasse beschreibt, was eine Klasse leistet und wie sie benutzt werden kann, ohne dass ihre Implementierung

Mehr

Analyse und Modellierung von Informationssystemen

Analyse und Modellierung von Informationssystemen Analyse und Modellierung von Informationssystemen Dr. Klaus Höppner Hochschule Darmstadt Sommersemester 2013 1 / 19 Einführung: Entwurfsmuster Erzeugungsmuster Fabrik-Muster Singleton-Muster Beispiel 2

Mehr

Prinzipien Objektorientierter Programmierung

Prinzipien Objektorientierter Programmierung Prinzipien Objektorientierter Programmierung Valerian Wintner Inhaltsverzeichnis 1 Vorwort 1 2 Kapselung 1 3 Polymorphie 2 3.1 Dynamische Polymorphie...................... 2 3.2 Statische Polymorphie........................

Mehr

Software Engineering Klassendiagramme Einführung

Software Engineering Klassendiagramme Einführung Software Engineering Klassendiagramme Einführung Prof. Adrian A. Müller, PMP, PSM 1, CSM Fachbereich Informatik und Mikrosystemtechnik 1 Aufgabe Erstellen Sie eine Klasse Person in Java. Jede Person verfügt

Mehr

Kapitel 6. Vererbung

Kapitel 6. Vererbung Kapitel 6 Vererbung Vererbung 1 Ziele Das Vererbungsprinzip der objektorientierten Programmierung verstehen Und in Java umsetzen können Insbesondere folgende Begriffe verstehen und anwenden können: Ober/Unterklassen

Mehr

Programmentwicklung ohne BlueJ

Programmentwicklung ohne BlueJ Objektorientierte Programmierung in - Eine praxisnahe Einführung mit Bluej Programmentwicklung BlueJ 1.0 Ein BlueJ-Projekt Ein BlueJ-Projekt ist der Inhalt eines Verzeichnisses. das Projektname heißt wie

Mehr

Gliederung Grundlagen Schlüsselworte try-catch Fehlerobjekte Fehlerklassen Schlüsselwort finally Schlüsselwort throws selbst erstellte Exceptions

Gliederung Grundlagen Schlüsselworte try-catch Fehlerobjekte Fehlerklassen Schlüsselwort finally Schlüsselwort throws selbst erstellte Exceptions try-catch Schlüsselworte try-catch e Schlüsselwort Schlüsselwort selbst erstellte ermöglichen die Behandlung von Fehlern, die zur Laufzeit entstehen. try-catch in C: Fehler führt immer zum Abbruch des

Mehr

Java Schulung (Java 2 Java Development Kit 5 / 6)

Java Schulung (Java 2 Java Development Kit 5 / 6) 2. Grundlagen der Objektorientierung 2.1 Klassen, Attribute, Methoden Klassen Eine Klasse beschreibt als Bauplan Gemeinsamkeiten einer Menge von Objekten ist also ein Modell, auf dessen Basis Objekte erstellt

Mehr

1 Polymorphie (Vielgestaltigkeit)

1 Polymorphie (Vielgestaltigkeit) 1 Polymorphie (Vielgestaltigkeit) Problem: Unsere Datenstrukturen List, Stack und Queue können einzig und allein int-werte aufnehmen. Wollen wir String-Objekte, andere Arten von Zahlen oder andere Objekttypen

Mehr

2. Hintergrundverarbeitung in Android: Services und Notifications

2. Hintergrundverarbeitung in Android: Services und Notifications 2. Hintergrundverarbeitung in Android: Services und Notifications Übersicht 2. Hintergrundverarbeitung in Android: Services und Notifications Übersicht: In Mobis 1: Threads; hier genauerer Blick auf Services

Mehr

Neue Features in C# 2.0

Neue Features in C# 2.0 Neue Features in C# 2.0 (gekürzt) Generische Typen Iteratoren Vereinfachte Delegate-Erzeugung Anonyme Methoden Partielle Klassen Sonstiges University of Linz, Institute for System Software, 2004 published

Mehr

5. Tutorium zu Programmieren

5. Tutorium zu Programmieren 5. Tutorium zu Programmieren Dennis Ewert Gruppe 6 Universität Karlsruhe Institut für Programmstrukturen und Datenorganisation (IPD) Lehrstuhl Programmierparadigmen WS 2008/2009 c 2008 by IPD Snelting

Mehr

Benutzerhandbuch. Neukirchen

Benutzerhandbuch. Neukirchen Benutzerhandbuch Neukirchen August 2015 Kontakt: Kai Hübl Lambertsberg 17 D-34626 Neukirchen kai.huebl@asneg.de Contents 1 Einleitung... 5 1.1 Inhalt... 5 1.2 OPC UA Client Stack... 5 1.3 OPC UA Server

Mehr

JDBC. Es kann z.b. eine ODBC-Treiberverbindung eingerichtet werden, damit das JAVA-Programm auf eine ACCESS-DB zugreifen kann.

JDBC. Es kann z.b. eine ODBC-Treiberverbindung eingerichtet werden, damit das JAVA-Programm auf eine ACCESS-DB zugreifen kann. JDBC in 5 Schritten JDBC (Java Database Connectivity) ist eine Sammlung von Klassen und Schnittstellen, mit deren Hilfe man Verbindungen zwischen Javaprogrammen und Datenbanken herstellen kann. 1 Einrichten

Mehr

Java Einführung Abstrakte Klassen und Interfaces

Java Einführung Abstrakte Klassen und Interfaces Java Einführung Abstrakte Klassen und Interfaces Interface Interface bieten in Java ist die Möglichkeit, einheitliche Schnittstelle für Klassen zu definieren, die später oder/und durch andere Programmierer

Mehr

Windows-Firewall-Ausnahmen Windows-Firewall-Ausnahmen für Docusnap konfigurieren

Windows-Firewall-Ausnahmen Windows-Firewall-Ausnahmen für Docusnap konfigurieren Windows-Firewall-Ausnahmen Windows-Firewall-Ausnahmen für Docusnap konfigurieren www.docusnap.com TITEL Windows-Firewall-Ausnahmen AUTOR Docusnap Consulting DATUM 14.04.2015 Die Weitergabe, sowie Vervielfältigung

Mehr

Erstellung von Bibliotheken in CoDeSys V3

Erstellung von Bibliotheken in CoDeSys V3 Dokument Version 2.0 3S - Smart Software Solutions GmbH Seite 1 von 10 INHALT 1 EINFÜHRUNG 3 2 BIBLIOTHEKSKONZEPT IM DETAIL 4 2.1 Kategorien von Bibliotheken 4 2.1.1 System 4 2.1.2 Internal 4 2.1.3 Application

Mehr

Software-Projekt: Mensch ärgere Dich nicht. Dokumentation Softwareprojekt: Mensch ärgere Dich nicht

Software-Projekt: Mensch ärgere Dich nicht. Dokumentation Softwareprojekt: Mensch ärgere Dich nicht Dokumentation Softwareprojekt: Mensch ärgere Dich nicht Das Programm Mensch ärgere Dich nicht ermöglicht das Spielen des gleichnamigen Spieles über Netzwerke. Jeder Spieler verfügt dabei über einen Clienten,

Mehr

3. Konzepte der objektorientierten Programmierung

3. Konzepte der objektorientierten Programmierung 3. Konzepte der objektorientierten Programmierung 3.1 Basiskonzepte 3.2 Generalisierung / Spezialisierung 3.3 Aggregation 3.4 Assoziation 3.5 Nachrichten 3.6 Polymorphismus 3. Konzepte der Objektorientierung

Mehr

Performance Tuning mit @enterprise

Performance Tuning mit @enterprise @enterprise Kunden-Forum 2005 Performance Tuning mit @enterprise Herbert Groiss Groiss Informatics GmbH, 2005 Inhalt Datenbank RMI JAVA API HTTP Konfiguration Analyse Groiss Informatics GmbH, 2005 2 Datenbank

Mehr

VMscope GmbH. Plugins entwickeln für den VM Slide Explorer 2010. Daniel Heim, 17.08.2011 Seite 1/15

VMscope GmbH. Plugins entwickeln für den VM Slide Explorer 2010. Daniel Heim, 17.08.2011 Seite 1/15 Plugins entwickeln für den VM Slide Explorer 2010 Daniel Heim, 17.08.2011 Seite 1/15 Inhaltsverzeichnis 1 Allgemeines... 3 2 Ein Plugin schreiben... 4 3 Ein Plugin registrieren... 11 4 Aktivieren von Plugins...

Mehr

Timer-Dienst (070212)

Timer-Dienst (070212) Timer-Dienst (070212) Timer-Dienst (070212)...1 Voraussetzungen...1 Installation...1 Dienst konfigurieren...4 Dienst für mehrere Instanzen und / oder mehrere Datenbanken konfigurieren...5 Eventlog-Einträge

Mehr

Persistenz von Objekten relationale Datenbank Eigene Datenstruktur XML (JAXB) Proprietäre Dateiformate (Lochkarten)

Persistenz von Objekten relationale Datenbank Eigene Datenstruktur XML (JAXB) Proprietäre Dateiformate (Lochkarten) Persistenz von Objekten relationale Datenbank Eigene Datenstruktur XML (JAXB) Proprietäre Dateiformate (Lochkarten) O/R Mapping - Objekte (Attribute) - 1:1, 1:n, n:m Beziehungen - Vererbungen (- Interfaces)

Mehr

WCF Services in InfoPath 2010 nutzen

WCF Services in InfoPath 2010 nutzen WCF Services in InfoPath 2010 nutzen Abstract Gerade wenn man schreibend von InfoPath aus auf eine SQL-Server Datenbank zugreifen will, kommt man quasi um einen Web Service nicht herum. In diesem Post

Mehr

Workbooster File Exchanger Command Line Tool

Workbooster File Exchanger Command Line Tool Thema Technische Benutzerdokumentation - WBFileExchanger Workbooster File Exchanger Command Line Tool Letzte Anpassung 18. Januar 2014 Status / Version Finale Version - V 1.1 Summary Erstellung Diese technische

Mehr

Musterlösung Übungsblatt 2 Netzprogrammierung WS 05/06

Musterlösung Übungsblatt 2 Netzprogrammierung WS 05/06 Musterlösung Übungsblatt 2 Netzprogrammierung WS 05/06 Aufgabe 1 Bitte schreiben Sie ein RMI Objekt, das eine Person repräsentiert. Es soll die folgende Schnittstelle implementieren: public interface Person

Mehr

Programmieren I. Strategie zum Entwurf von Klassen. Beispiele. Design von Klassen. Dr. Klaus Höppner. Beispiel: Bibliothek

Programmieren I. Strategie zum Entwurf von Klassen. Beispiele. Design von Klassen. Dr. Klaus Höppner. Beispiel: Bibliothek Programmieren I Dr. Klaus Höppner Hochschule Darmstadt Wintersemester 2008/2009 1 / 22 2 / 22 Strategie zum Entwurf von Klassen Beispiele Objektorientierte Sichtweise: Mit welchen Objekten habe ich es

Mehr

Fakultät Angewandte Informatik Programmierung verteilter Systeme 28.11.2011. Übungen zur Vorlesung Informatik II, Blatt 6

Fakultät Angewandte Informatik Programmierung verteilter Systeme 28.11.2011. Übungen zur Vorlesung Informatik II, Blatt 6 WS 2011/12 Fakultät Angewandte Informatik Programmierung verteilter Systeme 28.11.2011 Prof. Dr. Bernhard Bauer Übungen zur Vorlesung Informatik II, Blatt 6 Abgabe: Montag, 05.12.2011, 12.00 Uhr, Informatik

Mehr

4D v11 SQL Release 6 (11.6) ADDENDUM

4D v11 SQL Release 6 (11.6) ADDENDUM ADDENDUM Willkommen zu Release 6 von 4D v11 SQL. Dieses Dokument beschreibt die neuen Funktionalitäten und Änderungen der Version. Erweiterte Verschlüsselungsmöglichkeiten Release 6 von 4D v11 SQL erweitert

Mehr

Rainer Stropek cubido. Baumschule Expression Trees in C#, CLR und DLR

Rainer Stropek cubido. Baumschule Expression Trees in C#, CLR und DLR Rainer Stropek cubido Baumschule Expression Trees in C#, CLR und DLR Inhalt Als Anwendungsentwickler kommt man selten mit Expression Trees in Berührung. Sie sind ein Implementierungsdetail von LINQ. Ihre

Mehr

5.1 Bestehende Projekte bearbeiten 79 5.2 Neue Projekte erstellen 85

5.1 Bestehende Projekte bearbeiten 79 5.2 Neue Projekte erstellen 85 Projekte per DOM bearbeiten KAPITEL 5 5.1 Bestehende Projekte bearbeiten 79 5.2 Neue Projekte erstellen 85 Bisher haben wir uns angesehen, wie List & Label mit Ihren Daten bekannt gemacht werden kann und

Mehr

2.4 Das erste C++-Programm *

2.4 Das erste C++-Programm * 2.4 Das erste C++-Programm * 11 2.4 Das erste C++-Programm * Den besten Lernerfolg erzielen Sie, wenn Sie alle Beispiele dieses Buchs selbst nachvollziehen. Sie können hierzu einen Compiler verwenden,

Mehr

C#-Workshop, Teil 2: C#-Objekte im Praxiseinsatz

C#-Workshop, Teil 2: C#-Objekte im Praxiseinsatz ITMAGAZINE C#-Workshop, Teil 2: C#-Objekte im Praxiseinsatz 15. Juni 2001 - Der zweite Teil des C#-Workshops beschäftigt sich mit der Erstellung und Behandlung von Objekten und zeigt, wie die Leistungsfähigkeit

Mehr

3. Persistenz und Datenbanken Content Providers. Content Providers. Generische Schnittstelle zum Zugriff auf Daten zwischen Anwendungen

3. Persistenz und Datenbanken Content Providers. Content Providers. Generische Schnittstelle zum Zugriff auf Daten zwischen Anwendungen Content Providers Generische Schnittstelle zum Zugriff auf Daten zwischen Anwendungen Entkopplung der Daten-Schicht von der Anwendungsschicht Zugriff erfolgt URI-basiert Kontrolle der Zugriffsrechte eingebaute

Mehr

check_cisco_voice Dokumentation

check_cisco_voice Dokumentation check_cisco_voice Dokumentation Inhaltsverzeichnis 1. Vorbereitung...2 2. Verwendung...3 2.1 Usage / Parameter...3 2.2 Modi...5 2.2.1 Lern-Modus...5 2.2.2 Interface-Modus...6 2.2.3 Gesamtstatus...8 2.2.4

Mehr

Automatisierte Erstellung von Software-Builds und -dokumentationen. Teil 1

Automatisierte Erstellung von Software-Builds und -dokumentationen. Teil 1 Automatisierte Erstellung von Software-Builds und -dokumentationen Teil 1 Autoren: Hagedorn, Robert; Denninger, Oliver Kontakt: {hagedorn denninger}@fzi.de Web: http://zfs.fzi.de Ort, Datum: Karlsruhe,

Mehr

Prof. W. Henrich Seite 1

Prof. W. Henrich Seite 1 Klasse - ist ein benutzerdefinierter Datentyp (Referenztyp) - hat Datenelemente - hat Methoden - Konstruktor ist spezielle Methode zum Erstellen eines Objektes vom Typ der Klasse (Instanz) - jede Klasse

Mehr

MCRServlet Table of contents

MCRServlet Table of contents Table of contents 1 Das Zusammenspiel der Servlets mit dem MCRServlet... 2 1 Das Zusammenspiel der Servlets mit dem MCRServlet Als übergeordnetes Servlet mit einigen grundlegenden Funktionalitäten dient

Mehr

C# Programmierung. Eine Einführung in das.net Framework. C# Programmierung - Tag 4: Kombination OOP/.NET

C# Programmierung. Eine Einführung in das.net Framework. C# Programmierung - Tag 4: Kombination OOP/.NET C# Programmierung Eine Einführung in das.net Framework C# Programmierung - Tag 4: Kombination OOP/.NET 1/27/2012 1 Do Events Delegates Operatoren Exceptions Namespaces Bibliotheken.NET Klassen Serialisierung

Mehr

Methoden. von Objekten definiert werden, Methoden,, Zugriffsmethoden und Read-Only

Methoden. von Objekten definiert werden, Methoden,, Zugriffsmethoden und Read-Only Methoden Wie Konstruktoren und Destruktoren zum Auf- und Abbau von Objekten definiert werden, Wie inline-methoden Methoden,, Zugriffsmethoden und Read-Only Only- Methoden einzusetzen sind, Der this-pointer

Mehr

Konfiguration des Novell GroupWise Connectors

Konfiguration des Novell GroupWise Connectors Konfiguration des Novell GroupWise Connectors Installation und Konfiguration Version 2013 Spring Release Status: 09. März 2013 Copyright Mindbreeze Software GmbH, A-4020 Linz, 2013. Alle Rechte vorbehalten.

Mehr

Praktikum Betriebssysteme 1. Aufgabe (1)

Praktikum Betriebssysteme 1. Aufgabe (1) FG TECHNISCHE INFORMATIK U BS 041 01 TH 09 Praktikum Betriebssysteme 1. Aufgabe (1) Es wird ein unter LINUX lauffähiges C++-Programm ptab, mit dem Informationen über die Partitionierung von Festplatten

Mehr

Einführung in die Informatik Tools

Einführung in die Informatik Tools Einführung in die Informatik Tools Werkzeuge zur Erstellung von Softwareprojekten Wolfram Burgard 8.1 Motivation Große Softwareprojekte werden schnell unübersichtlich. Änderungen im Code können leicht

Mehr

Anwenderhandbuch logiware IO-Stick

Anwenderhandbuch logiware IO-Stick Anwenderhandbuch logiware IO-Stick Stand: Juni 2010 logiware IO-Stick http://www.io-stick.de Alfred-Mozer-Str. 42 D-48527 Nordhorn Deutschland Telefon (+49)(0)5921 7139925 Telefax (+49)(0)5921 7139929

Mehr

Datenbankanwendungsprogrammierung Crashkurs Java

Datenbankanwendungsprogrammierung Crashkurs Java Datenbankanwendungsprogrammierung Crashkurs Java Denny Priebe Datenbankanwendungsprogrammierung p. Unterschiede zu C, C++ typedefs, Präprozessor Strukturen, Unions globale Funktionen Mehrfachvererbung

Mehr