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 »

JSF - Converter/Validator Messages customizen

Januar 21st, 2008 von Sven

Eigene Fehlermeldungen können im message.properties angelegt werden.
Hier müssen die passenden Keys aus der message.properties aus dem Package javax.faces.Messages.properties (myfaces-impl-xxx) überschrieben werden.

Geschrieben in coding, it, java, jsf | Keine Kommentare »

Tomcat remote Debugging mit Eclipse

Januar 20th, 2008 von Sven

Kann garnicht oft genug notiert sein:

Um Tomcat im Remote Debugging Modus zu starten, einfach in der catalina.bat die PATH Variable CATALINA_OPTS setzen wie folgt:

  • set CATALINA_OPTS = -Xdebug -Xrunjdwp:transport=dt_socket, address=8000, server=y, suspend=n
    Hinter ‘adress’ verbirgt sich der Port, auf dem TC dann nach Debug Connection lauscht.

Dann wie gewohnt (startup.bat) starten, dann ist TC bereit für JPDA Connections, z.B. aus Eclipse.

Genau, und eine Debugging Konfiguration erstellt man so:

  • Run Configurations: Remote Java Application. Einfach einen Namen vergeben, Projekt auswählen. Fertig.
    Falls man einen anderen Port als den 8000er verwendet, muss das hier angegeben werden.

Geschrieben in coding, it, java, tomcat | Keine Kommentare »

Apache Lenya - Open Source CMS

Mai 24th, 2006 von Sven

CMS - Apache Lenya
Alle die, die annehmen Lenya hätte irgendetwas mit einer weiblichen Schönheit zu tun, muss ich gleich enttäuschen. Hierbei handelt es sich um ein Open Source Content Management System (CMS) unter Federführung der Apache Software Foundation. Und es tut genau das, was CMS bedeutet:: Es verwaltet Inhalte.

Aktuell (Stand 05.2006) liegt es in der Version 1.2.4 vor (dieser Artikel basiert auch auf dieser). Das bereits für Sommer 2005 angedachte Release 1.4 gibt es derzeit in einer Alpha Version.

Features
Hierzu kommt es mit einer Benutzeroberfläche daher, die dem User das Contendmanagement komfortabel ermöglicht. Man kann Seiten einrichten, verlinken, und dann diese so durchbrowsen, als wenn sie auf dem Live Server liegen würden.
Dabei sei angemerkt, daß Lenya kein Seiten Design und Layout Management bietet. Die prinzipielle Seitenstruktur liegt in XSL und das Design in CSS Dateien.
Beim veröffentlichen wird das XSL mit dem Content zusammengeführt, und in ein HTML bzw XHTML File transformiert.

Technologie
Lenya ist eine Web basierte Java Anwendung. Es baut auf Apache Cocoon auf, und kann als Jetty oder als Tomcat Application installiert werden (wobei andere Servletcontainer nicht ausgeschlossen werden können). Standardmäßig kommt es mit Jetty daher - diese Version läßt sich auch ohne großem Konfigurationsaufwand, quasi out-of-the-box starten.

Als Herzstück von Lenya kann man wohl Cocoon herausdeuten, dessen “Pipeline” Technologie bei jedem Generierungsprozess zum Tragen kommt, also jedes mal, wenn Content angezeigt wird. Eine Pipeline ist (in knappen Worten) eine Folge von Verarbeitungsschritten, an dessen Ende ein erzeugtes Dokument steht. So ist bspw eine XML/XSL Transformation ein Verarbeitungsschritt, der bei der Contentdarstellung benutzt werden kann - wie es bei Lenya der Fall ist.
Wie oben bereits angedeutet deutet das auf die praktische Tatsache hin, daß der Content in XML und das Layout in XSL vorgehalten wird.
Die XML Strukturen können sowohl im Filesystem verwaltet werden (Standard), es kann auch auch ein DBMS angekoppelt werden

Fazit
Lenya besticht durch einfache Bedienung und straight forward Content Management. Es können auf anhieb Ergebnisse erzielt werden.
Positiv aufgefallen ist mir auch die recht umfangreiche und verständliche Dokumentation.
Es gibt zudem eine Reihe von Einstellungs- und Individualisierungsmöglichkeiten - Open Source sei Dank.

Da liegt aber auch der Hund begraben: Es gibt keine grafische Oberfläche. Zudem ist Fachwissen zu verschiedenen Technologien erforderlich, die ein standard Büro Angestellter, Publischer, Journalist, oder wer auch immer nicht haben wird.
Das beginnt bereits beim Layout/Design der Seiten, die den Content enthalten: Dieses ist in XSL und CSS Files definiert.

Das ‘Roh’-Lenya kommt zZ daher meiner Meinung nach nur für Entwickler oder technisch versierte und interessierte Enduser in Frage.
Das mag sich in Zukunft ändern, da die Open Source Gemeinde auch an diesem Produkt fleißig am Werkeln ist.

Links
Apache Lenya Home
Apache Cocoon Home
W3C Schools XML Tutorial
W3C Schools XSL Tutorial

Geschrieben in Allgemein, java, 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 »