SQL Statements loggen mit P6Spy

Juli 25th, 2008 von Sven

Im aktuellen Projektumfeld habe ich es mit JBoss 4.0.2 und EJB3 zu tun. Dabei kann es manchmal proktisch sein, die SQL Statements die von der zugrunde liegenden Persistence API (Hibernate) erzeugt und abgesetzt werden, zu loggen.

Üblicherweise eignet sich hier das Setzen des Loglevels, in etwa so

log4j.logger.org.hibernate.SQL=DEBUG
log4j.logger.org.hibernate.type=DEBUG

Leider werden diese Einstellungen unter JBoss ignoriert. Auch ein Java Util Logging kompatibles propertie File mit der analogen Konfig brachte keinen Erfolg. Lediglich das setzen des hibernate Properties show_sql auf true brachte dann zumindest die SQL Statement mit den ‘?’ auf den Schirm. Naja, dunkles Kapitel…falls jemand hierzu noch eine Idee hat, immer er damit.

Ich bin dann (sogar über die Hibernate Site) auf ein altertümliches Tool (2003) gestoßen: P6Spy. Es wrappt den eingesetzten JDBC Treiber, und loggt somit schön die SQLs in ein File. Es läßt sich schön in JBoss (und sicher auch viele andere Umgebungen) integrieren und funktioniert auf anhieb.

Geschrieben in Allgemein, coding, frameworks, hibernate, it, java, tools | Keine Kommentare »

Java Logging - eigene Properties

Juli 25th, 2008 von Sven

Um eigene logging.properties dem Java Util Logger mitzugeben, kann dieses VM Argumt genutzt werden:

-Djava.util.logging.config.file=%Pfad zur logging.properties%

Das logging.properties wird nicht wie bei Log4J automatisch aus dem Classpath der Anwendung gelesen. Deswegen muss ein eigenes entweder zur Laufzeit geladen werden, über die VM Argumente mitgegeben oder - ganz übel - es kann das originale in den JRE Jars durch ein eigenes ersetzt werden.

Geschrieben in hibernate, java, jsf, spring, tomcat, tools | Keine Kommentare »

AndroMDA

Januar 14th, 2006 von Sven

AndroMDA
Ausgesprochen wie die (un)bekannte Galaxy Andromeda, ist dies ein mächtiges Tool zur Code Erzeugung. Es ermöglicht die Erzeugung eines Großteils des Quellcodes auf Basis von UML Diagrammen. Lediglich die eigentliche Geschäftslogik muss manuell implementiert werden.
Dies entspricht dem Grundgedanken der Modell getriebenen Architekture (MDA = Model Driven Architecture).

Features
AndroMDA kommt als Maven Plugin daher, und nutzt auch die Vorzüge dieses praktischen Projekt Build Management Tools.
Die Kernkompetenz werden mit Hilfe von verschiedenen sogenannten Cartridges realisiert - quasi Plugins für das Plugin ;-). Jede übernimmt eine bestimmte Aufgabe bei der Code Erzeugung, die flexibel entsprechend den Anforderungen eingeklinkt werden können.
Unter anderem sind folgende Cartridges verfügbar:

  • Java: Basiscartridge. Diese ist immer notwendig zur Erzeugung von Java Code
  • Hibernate: Unterstützt die Erzeugung von Hibernate basietrem Code. Damit wird die Persistenzschicht einer Anwendung realisiert.
  • Spring: Erweitert die Code Erzeugung um Spring Features. Dies ermöglicht bspw eine Persistenzschicht auf Basis von POJOs.
  • Struts4BMP: Ermöglicht es, das komplette Frontend auf Basis von Struts zu generieren.

Als Vorlage dienen UML Klassendiagramme. Die Struts4BMP Cartridge benötigt zudem UseCase, Zustands- und Aktivitätsdiagramme.
AndroMDA liest dann das vom Case Tool erzeugte XMI ein und bearbeitet es mit den konfigurierten Cartridges.
Da sich bisher leider kein Standard bei der Erzeugung dieser XMI File durchgesetzt hat, nutzt man am Besten MagicDraw oder Poseidon. Beide gibt es als kostenfreie (aber eingeschränkte) Community Edition. AndroMDA ist optimiert für die Zusammenarbeit mit diesen Tools.

Durch die Cartridges wird ein modularer Ansatz verfolgt. Dadurch wird es möglich auch eigene Code Generierung Verfahren zu realisieren, beispielsweise, wenn man ein eigenes Framework hat. Mehr dazu jedoch im nächsten Abschnitt.

Technologie
Wie bereits erwähnt setzt AndroMDA auf Maven auf. Es kann auch mit Ant konfiguriert werden, die Empfehlung lautet aber eindeutig Maven, da Ant bei der Entwicklung eher stiefmüttlerich behandelt wird und nicht den gleichen Leistungsumfang aufwarten kann, wie Maven. Nicht zu letzt kommt man dann in den Genuß des Projekt Build und Versions Management, welches Maven bietet. Hierbei muss unbedingt die Versions Empfehlungen der Projekt Homepage beachtet werden. Zumindest die ältere AndroMDA Versionen laufen nur mit Maven 1.Bereits nach wenigen Schritten ist ein eigenes AndroMDA Projekt eingerichtet - zumindest beim Einsatz von Maven. Alle für ein Projekt nötigen Bibliotheken werden automatisch von einem online Repository runtergeladen. Auch das AndroMDA Plugin selber wird auf diese Weise installiert.
Das Projekt läßt sich einfach builden, in dem maven im Projektverzeichis aufgerufen wird. Im ‘Target’-Verzeichnis findet man dann das Resultat in Form von Class-Files, dem WAR oder EAR Archiv, bzw JARs, je nach dem, wofür das Projekt eingerichtet wurde.AndroMDA kommt als klassische Java Anwendung daher. Es nutzt XML Parsing Technologien, sowie die Template Engine Velocity. Dies ist quasi auch das Kernstück der Code Erzeugung, da der Code aus Velocity Templates generiert wird..
Die Konfigurationen jeder Cartridge können im individuellen Projekt überschrieben und erweitert werden. Das klingt zwar eher Sekundär, bedeutet aber eine leistungsfähige Möglichkeit zum Customizen bestehender Module. Sollte dies nicht ausreichen, kann man ja noch eine eigene schreiben.

Fazit
Ich war begeistert, wie einfach und komfortabel sich ein Projekt einrichten läßt und wie schnell simple Anwendungen erzeugt werden können. Das Tolle ist, daß man sich dabei keine Gedanken um Details der Persistenzmechanismen machen muss, da dies alles Aufgabe der Cartridges ist. Als Entwickler kann man sich nun auf die Implementierung und Einbingung der Geschäftslogik konzentrieren.
Die eigenen Implementierungen erfolgen dann in Klassen, deren Skelett einmal erzeugt wird, und bei nachfolgenden Erzeugungsdurchgängen nicht überschrieben werden.Die dadurch erreichte Trennung der Businesslogik von der Persistenzschicht ermöglicht das einfache Austauschen derer.
Soll die Application nun von Postgres nach MySQL migriert werden, muss dies lediglich in den Projekt Properties angegeben werden. Die Persistenzschicht wird dann mit den entsprechenden MySQL Dialekten und Spezifika erzeugt. Damit wäre eine solche Umsetzung abgeschlossen.
Auch kann auf diese Weise die Art des Persistenzmechanismus umgestellt werden. So entscheidet quasi ‘ein Mausklick’ darüber, ob die Vorzüge eines EJB Containers genutzt werden sollen, POJOs ausreichend sind oder überhaupt ein Servlet bzw EJB Container genutzt werden soll. Entsprechend wird der Code dann erzeugt.Die Kehrseite der Medallie ist - wie bei allen Open Source Projekten - der nicht garantierte Support.
Dies wird aber wett gemacht, durch außerordentlich gute Dokumentation und - was fast noch wichtiger ist - ein sehr gut funktionierendes Forum. “Sehr gut” bedeutet in dem Fall, daß Hilfestellungen meistens wirklich prompt erfolgen, und diese oft auch zu einer Lösung führen. Die leitenden Entwickler Wouter Zones und Chad Brandon bemühen sich auf bemerkenswerte Art und Weise, um die Community zufrieden zu stellen.

Ich kann jedem Interessierten nur empfehlen, einen genaueren Blick auf AndroMDA zu werfen. Es lohnt sich.
Links
www.andromda.org

Geschrieben in Allgemein, coding, generator, hibernate, java, spring | Keine Kommentare »