Communardo Software GmbH, Kleiststraße 10 a, D-01129 Dresden

HyperJAXB3

Im Rahmen eines Projektes soll­ten XML Mockup Dateien in einer Datenbank gehal­ten und über eine Webservice-Schnittstelle aus­ge­le­sen wer­den. Für gewöhn­lich habe ich aus der XSD per JAXB Java Klassen gene­riert und in Entity Beans gemappt, die anschlie­ßend in die Datenbank geschrie­ben wer­den. Um die­ses, aus mei­ner Sicht recht auf­wen­dige und feh­ler­an­fäl­lige Mapping in die Entity Beans zu umge­hen, habe ich mich nach einem alter­na­ti­ven Framework umge­se­hen und bin mit Hyperjaxb3 fün­dig gewor­den. Hyperjaxb3 geht einen Schritt wei­ter als JAXB, in dem es die gene­rier­ten Klassen per Annotation zu voll­stän­di­gen JPA Entitybeans macht. Aktuell steht Hyperjaxb3 in der Version 0.5.4 unter https://hyperjaxb3.dev.java.net zum Download bereit. Unterstützt wer­den Hibernate und Oracle TopLink, wobei es mit eini­gen Anpassungen auch mit OpenJPA und EclipseLink funk­tio­niert. Aus mei­ner Sicht ist aber der Einsatz von OpenJPA (1.2.2) mit Hyperjaxb3 nicht zu emp­feh­len, da es zu Problemen mit den Relations kam (Es wer­den keine bidi­rek­tio­na­len Beziehungen unter­stützt). Ein wei­te­res Problem sind die unter­schied­li­chen Datentypen, da JAXB und JPA nicht voll­stän­dig kom­pa­ti­bel sind. Beispiele kann man auf der z.Z. noch etwas lücken­haf­ten Wiki Seite von Hyperjaxb3 fin­den. http://confluence.highsource.org/display/HJ3/Home

Der große Vorteil die­ses Frameworks  ist, dass die Erzeugung der Klassen sehr leicht ins Maven ein­ge­bun­den wer­den kann und das das Persistieren nur wenige Zeilen Code nötig macht.

Einbindung in Maven

Zum erzeu­gen der Beans ist eigent­lich nur die Dependency für Hyperjaxb3 der bestehen­den pom.xml hinzuzufügen:

Der Aufruf der Codegenerierung sollte sinn­vol­ler­weise in einem Profile-Zweig erfol­gen, damit nicht bei jedem Compile die Klassengenerierung neu ange­sto­ßen wird.

Die Generierung kann dann per Aufruf des Profiles erfol­gen: mvn install -Phyperjaxb


Objekt erzeu­gen und persistieren

In der Anwendung kann dann das Objekt aus dem XML mit­hilfe des Unmarshallers erzeugt …

blank

und vom Entitymanager per­sis­tiert werden:

blank

Optional kann am Unmarshaller noch die Validierung ein­ge­schal­tet werden:

blank

Hyperjaxb3 kann bei der Erzeugung von kom­ple­xen Datenmodellen aus einer vogege­be­nen XSD sehr hilf­reich sein. Es wer­den alle Relations, die persistence.xml mit allen nöti­gen Konfigurationen und die ObjectFactory erzeugt.

10. Februar 2010
|

Related Posts

Pin It on Pinterest