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>

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

Ü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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Dr. Monika Meiler. Inhalt

Dr. Monika Meiler. Inhalt Inhalt 15 Parallele Programmierung... 15-2 15.1 Die Klasse java.lang.thread... 15-2 15.2 Beispiel 0-1-Printer als Thread... 15-3 15.3 Das Interface java.lang.runnable... 15-4 15.4 Beispiel 0-1-Printer

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

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

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

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

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

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

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

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

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

Statische und Nichtstatische Methoden Properties/ Eigenschaften

Statische und Nichtstatische Methoden Properties/ Eigenschaften Statische und Nichtstatische Methoden Properties/ Eigenschaften Statische Methoden Definition und Merkmale von Properties Modifizierer Beispiele Nebeneffekte Dr. Beatrice Amrhein Statische / Nichtstatische

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

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

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

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

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

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

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

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

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

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

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

Ziel, Inhalt. Programmieren in C++ Wir lernen wie man Funktionen oder Klassen einmal schreibt, so dass sie für verschiedene Datentypen verwendbar sind

Ziel, Inhalt. Programmieren in C++ Wir lernen wie man Funktionen oder Klassen einmal schreibt, so dass sie für verschiedene Datentypen verwendbar sind Templates und Containerklassen Ziel, Inhalt Wir lernen wie man Funktionen oder Klassen einmal schreibt, so dass sie für verschiedene Datentypen verwendbar sind Templates und Containerklassen 1 Ziel, Inhalt

Mehr

Windows-Firewall Ausnahmen für Docusnap konfigurieren itelio GmbH

Windows-Firewall Ausnahmen für Docusnap konfigurieren itelio GmbH Windows-Firewall Ausnahmen für Docusnap konfigurieren itelio GmbH www.docusnap.com Inhaltsverzeichnis 1 Windows Firewall Konfiguration - Grundlagen 3 1.1 Übersicht - benötige Firewall Ausnahmen 3 2 Windows

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: 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

Die Installation des GeoShop Redirector für IIS (Internet Information Server, Version 4.0, 5.0 und 6.0) umfasst folgende Teilschritte:

Die Installation des GeoShop Redirector für IIS (Internet Information Server, Version 4.0, 5.0 und 6.0) umfasst folgende Teilschritte: Installation des GeoShop Redirector für IIS (Stand 24.8.2007) ============================================================= 0 Überblick ----------- Die Installation des GeoShop Redirector für IIS (Internet

Mehr

Kapitel 33. Der xml-datentyp. In diesem Kapitel: Der xml-datentyp 996 Abfragen aus xml-datentypen 1001 XML-Indizierung 1017 Zusammenfassung 1023

Kapitel 33. Der xml-datentyp. In diesem Kapitel: Der xml-datentyp 996 Abfragen aus xml-datentypen 1001 XML-Indizierung 1017 Zusammenfassung 1023 Kapitel 33 Der xml-datentyp In diesem Kapitel: Der xml-datentyp 996 Abfragen aus xml-datentypen 1001 XML-Indizierung 1017 Zusammenfassung 1023 995 996 Kapitel 33: Der xml-datentyp Eine der wichtigsten

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Szenario 3: Service mit erweiterter Schnittstelle

Szenario 3: Service mit erweiterter Schnittstelle 2. Hintergrundverarbeitung in Android: Services und Notifications Szenarien für lokale Services Szenario 3: Service mit erweiterter Schnittstelle Ein Service bietet zusätzliche Methoden an, über die sich

Mehr

Windows-Firewall Ausnahmen

Windows-Firewall Ausnahmen Windows-Firewall Ausnahmen Windows-Firewall Ausnahmen für Docusnap konfigurieren Datum 29.04.2010 Ersteller Seitenanzahl 24 Inhaltverzeichnis 1 Windows Firewall Konfiguration - Grundlagen... 3 1.1

Mehr

Multivariate Tests mit Google Analytics

Multivariate Tests mit Google Analytics Table of Contents 1. Einleitung 2. Ziele festlegen 3. Einrichtung eines Multivariate Tests in Google Analytics 4. Das JavaScript 5. Die Auswertung der Ergebnisse Multivariate Tests mit Google Analytics

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

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

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

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

Schnellstart. RemusLAB. CAEMAX Technologie GmbH. Bunzlauer Platz 1 Telefon: 089 61 30 49-0 support@caemax.de

Schnellstart. RemusLAB. CAEMAX Technologie GmbH. Bunzlauer Platz 1 Telefon: 089 61 30 49-0 support@caemax.de Schnellstart RemusLAB CAEMAX Technologie GmbH Bunzlauer Platz 1 Telefon: 089 61 30 49-0 support@caemax.de D-80992 München Telefax: 089 61 30 49-57 www.caemax.de Inhaltsverzeichnis Installation... 3 Allgemein...3

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

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

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

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

Neue Funktionen im GUI für PC-DMIS V3.x 4.x Seite 1 von 8

Neue Funktionen im GUI für PC-DMIS V3.x 4.x Seite 1 von 8 Neue Funktionen im GUI für PC-DMIS V3.x 4.x Seite 1 von 8 Neue Funktionen im GUI ab V 2.x für PC-DMIS Wie funktioniert GUI für PC-DMIS? GUI heißt Grafical User Interface. Das bedeutet grafische Benutzer

Mehr

Programmieren II. Innere Klassen. Heusch 10, Ratz 5.2.1, Institut für Angewandte Informatik

Programmieren II. Innere Klassen. Heusch 10, Ratz 5.2.1, Institut für Angewandte Informatik Programmieren II Innere Klassen Heusch 10, 13.10 Ratz 5.2.1, 9.8 KIT Die Forschungsuniversität in der Helmholtz-Gemeinschaft www.kit.edu Innere Klassen Bisher kennen wir nur Klassen, die entweder zusammen

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

Erstellen eines Office-COM-Add-In mit Visual Basic 2005 Express Edition

Erstellen eines Office-COM-Add-In mit Visual Basic 2005 Express Edition Erstellen eines Office-COM-Add-In mit Visual Basic 2005 Express Edition Neues Projekt (Klassenbibliothek) erzeugen Als Projektbezeichnung wählte ich BeispielComAddIn. Add-In-Starter-Klasse erstellen Die

Mehr

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung Übersicht 3.1 Modell Konto 3.2 Modell Konto - Erläuterungen 3.3 Benutzer Ein- und Ausgabe mit Dialogfenster I 3.4 Benutzer Ein- und Ausgabe mit Dialogfenster II 3.5 Klassen- und Objekteigenschaften des

Mehr

Die LogTrace-Bibliothek

Die LogTrace-Bibliothek Die LogTrace-Bibliothek Debugging-Hilfsmittel Weiteres Beispiel Motivation void Func() { FunktionLog var( Func );... Func2();... Ausgabe sollte hier sein: >Func > Func2 < Func2 < Func void Func2() { FunktionLog

Mehr

Log xmllog textlog Log() start(filename) add(message) end() instance() Abbildung 7-10: Die Protokollierungs-API mit einer einfachen Fassade

Log xmllog textlog Log() start(filename) add(message) end() instance() Abbildung 7-10: Die Protokollierungs-API mit einer einfachen Fassade HACK #76 Hack APIs mit dem Façade-Muster vereinfachen Durch die Verwendung des Façade-Entwurfsmusters können Sie die anderen Programmierern zugängliche API vereinfachen. #76 Dies ist ein Muster, von dem

Mehr

Einführung in git. Ben Oswald. 27. April 2014. Im Rahmen der Vorlesung Entwicklung mobiler Anwendungen

Einführung in git. Ben Oswald. 27. April 2014. Im Rahmen der Vorlesung Entwicklung mobiler Anwendungen Einführung in git Im Rahmen der Vorlesung Entwicklung mobiler Anwendungen Ben Oswald 27. April 2014 Inhaltsverzeichnis 1 Einleitung 1 1.1 Was ist git?..................................... 1 1.2 Warum sollten

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

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

C++ Notnagel. Ziel, Inhalt. Programmieren in C++

C++ Notnagel. Ziel, Inhalt. Programmieren in C++ C++ Notnagel Ziel, Inhalt Ich versuche in diesem Dokument noch einmal die Dinge zu erwähnen, die mir als absolut notwendig für den C++ Unterricht und die Prüfungen erscheinen. C++ Notnagel 1 Ziel, Inhalt

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