JPA-Metamodell-Generator von OpenJPA inaktiv

Der Java-Compiler erzeugt automatisch die JPA-Metamodellklassen zu den persistenten Klassen der Anwendung, wenn ein entsprechende Annotation Processor im Classpath ist. Kandidaten dafür sind bspw. org.hibernate:hibernate-jpamodelgen:1.2.0.Final oder org.apache.openjpa:openjpa:2.2.1.

Der zuletzt genannte Processor von OpenJPA generiert die Metamodellklassen nur dann, wenn beim Compileraufruf die Option -Aopenjpa.metamodel=true mitgegeben wird.

Damit ist ein Problem verbunden: Sollten mehrere Metamodell-Generatoren im Compiler-Classpath sein, verdeckt der erste die restlichen. Der Annotation Processor Discovery Process im Compiler matcht nämlich die zu verarbeitenden Annotationen (z. B. @Entity) mit den verfügbaren Annotation Processors in der Weise, dass jede Annotation nur von einem Processor verarbeitet wird, und zwar von dem, der in der Service-Liste (META-INF/services/javax.annotation.processing.Processor) vorne steht. Die Reihenfolge wiederum ergibt sich durch die Anordnung der Jars im Classpath.

Sollte man also bspw. die Metamodellklassen mit Hilfe des Hibernate-Generators erzeugen wollen, unbewusst aber das OpenJPA-Jar vorher im Classpath platzieren, wird der Hibernate-Generator verdeckt. Wird in einem solchen Fall die o. a. Option nicht genutzt, werden keine Metamodellklassen erzeugt.

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: