Unenhanced Classes in OpenJPA

Persistence Provider müssen die persistenten Klassen für die Laufzeit um (providerspezifischen) Code erweitern, um bspw. Dirty Checks durchführen zu können oder auch Lazy Loading zu implementieren. Je nach Provider geschieht dieses Enhancement durch Manipulation des Bytecodes transparent zur Laufzeit, durch spezielle Werkzeuge zur Build-Zeit oder durch einen Java-Agenten beim Start der Anwendung.

Teilweise wird auch Subclassing als Verfahren angeboten. Dann leitet der Provider von den persistenten Klassen ab und nutzt diese neuen Klassen anstelle der Originale. Das hat aber diverse Nachteile, von denen die Verfälschung der Laufzeittypen der offensichtlichste ist. Teilweise ist dieses Feature aber auch fehlerhaft implementiert – wie im Falle OpenJPA: Setzt man hier die Property openjpa.RuntimeUnenhancedClasses auf supported und nutzt ansonsten keines der o. a. Enhancement-Verfahren (Build-Zeit oder Agent), so kommt es bei unidirektionalen ManyToMany-Relationen zu NullPointerExceptions. Der Bug ist bekannt (https://issues.apache.org/jira/browse/OPENJPA-1908), wird aber vermutlich nicht gefixt, da Subclassing ohnehin keine gute Idee ist.

Also: Nicht nutzen!

Advertisements

Über Dirk Weil
Dirk Weil ist seit 1998 als Berater im Bereich Java tätig. Als Geschäftsführer der GEDOPLAN GmbH in Bielefeld ist er für die Konzeption und Realisierung von Informationssystemen auf Basis von Java EE verantwortlich. Seine langjährige Erfahrung in der Entwicklung anspruchsvoller Unternehmenslösungen machen ihn zu einem kompetenten Ansprechpartner und anerkannten Experten auf dem Gebiet Java EE. Er ist Autor in Fachmagazinen, hält Vorträge und leitet Seminare und Workshops aus einem eigenen Java-Curriculum.

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: