GEDOPLAN

Unenhanced Classes in OpenJPA

Alle

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!

Autor

Diesen Artikel teilen

LinkedIn
Xing

Gibt es noch Fragen?

Fragen beantworten wir sehr gerne! Schreibe uns einfach per Kontaktformular.

Schulungen mit der selben Kategorie:

Blogkategorie: Alle
Es wurden keine Ergebnisse gefunden.

weitere Artikel

Kontakt

Brauchen Sie eine individuelle IT-Schulung, eine fundierte Beratung oder eine individuelle Softwareentwicklung? Dann sind Sie hier genau richtig!

Tim Neumann

Geschäftsleitung

GEDOPLAN GmbH
Stieghorster Straße 60
33605 Bielefeld

GEDOPLAN GmbH
Kantstraße 164
10623 Berlin

    Kontakt

    Tim Neumann

    Geschäftsleitung

    GEDOPLAN GmbH
    Stieghorster Straße 60
    33605 Bielefeld

    GEDOPLAN GmbH
    Kantstraße 164
    10623 Berlin

    Brauchen Sie eine individuelle IT-Schulung, eine fundierte Beratung oder eine individuelle Softwareentwicklung? Dann sind Sie hier genau richtig!