Gut, Muster oder Rahmen für das hinzufügen der überwachung für eine vorhandene app?
Ich habe eine bestehende J2EE-enterprise-Anwendung die ich brauche, um hinzuzufügen, auditing, D. H. aufnehmen der CRUD-Operationen auf mehrere wichtige domain-Typen (Mitarbeiter, AdministratorRights, etc.).
Die Anwendung verfügt über eine standard-n-tier-Architektur:
- Web-interface
- Business-Operationen gekapselt in einer Mischung von stateless session beans und Transaktions-POJOs (mit Spring)
- Beharrlichkeit ist eine Mischung von direkten JDBC (innerhalb der business-Schicht) und EJB-2.x BMP-entity-beans (ich weiß, ich weiß)
Meine Frage ist: gibt es irgendwelche standard-Muster oder (noch besser) frameworks/libraries, die speziell für das hinzufügen von auditing als ein cross-cutting concern? Ich weiß, AOP verwendet werden kann zum implementieren von cross-cutting-concerns im Allgemeinen; ich möchte wissen, wenn es etwas, das gezielt für die überwachung.
- Könnte die nach-unten-Wähler mindestens einen Kommentar hinterlassen zu erklären, warum?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vielleicht sollten Sie einen Blick auf Audit4j bietet überwachung von business-Funktionalität und mehrere Optionen für die Konfiguration.
Ein weiteres framework ist JaVers, dass focues mehr überwachung low-level-änderung auf die Persistenz-Schicht, die entsprechen könnten Ihren Fall ein wenig besser.
Beide Rahmen bieten, audit-spezifische Funktionalitäten, die geht über die Ebene AOP/Abfangjäger.
Recht, jetzt ich bin Neigung in Richtung mit Spring AOP (mit dem "@AspectJ-Stil") berät die Geschäfte, die ausgesetzt sind, auf die web-Ebene.
Ich werde gehen, ein bisschen gegen den Strich hier und schlage vor, Sie schauen sich eine der unteren Klassen-Lösung. Wir haben eine ähnliche Architektur in der Anwendung, und für unsere Audits haben wir uns mit Datenbank-Ebene audit-Trigger-track-Operationen innerhalb des RDBMS. Diese kann getan werden, als fein - oder grobkörnigen, wie Sie möchten, Sie müssen nur identifizieren Sie die Entitäten aus, die Sie verfolgen möchten.
Nun, dies ist nicht eine ideologisch Reine Lösung; Sie besteht darin, eine Logik in der Datenbank, die wird wohl bleiben soll, in der business-Schicht, und ich kann nicht leugnen, dass diese Auffassung hat Wert, aber in unserem Fall haben wir viele unabhängige Anwendung, die die Interaktion mit dem Datenmodell, einige in C geschrieben, einige Skript-und anderen J2EE-Anwendungen und alle von Ihnen zu prüfenden konsequent.
Gibt es eventuell noch einige AOP-Arbeit zu sein getan hier auf der J2EE-Seite, wohlgemerkt; jede Methode, die updates der Datenbank überhaupt haben können, um einige zusätzliche Arbeit zu sagen, die Datenbank, welche Benutzer die Arbeit machen. Wir verwenden die Datenbank, session-Variablen zu tun, aber es gibt andere Lösungen, natürlich.
Versuchen eine Aspect-Oriented Programmierumgebung.
Aus der Wikipedia "Aspekt-orientierte Programmierung (AOP) ist ein Programmierparadigma, das erhöht die Modularität, indem Sie die Trennung von cross-cutting-concerns".
Für alle EJBs, die Sie verwenden können, EJB 3.0 Abfangjäger (Dies ist etwas ähnliches wie Servlet-filter) und andere ähnliche interceptor für den Frühling (nicht vertraut mit Feder)
Wie Sie mit Hilfe EJBs als auch die Feder, die möglicherweise nicht die Abdeckung der gesamten Transaktionen. Ein anderer Ansatz könnte die Verwendung eines Front-Controller jedoch, dass einige änderungen erforderlich, die client-Seite. Noch ein anderer Ansatz könnte die Verwendung eines Servlet-Filter das bedeutet aber, die Umsetzung der domain-Logik in der Präsentationsschicht.
Ich würde empfehlen, die Front-Controller-in diesem Fall.
Ich habe gerade gelernt, über eine neue Feder-Projekt namens Spring Data JPA, bietet einen AOP-basiertes auditing-Funktion. Es ist nicht GA noch, aber es trägt zu ein Auge auf.