OpenJPA Enhancer in fase di compilazione con NetBeans (OpenJPA Enhancing at Build Time with NetBeans)
maggio 17th, 2009 | by Nicola Boldrin |OpenJPA può utilizzare un enhancer per consentire performance ottimali a runtime, un lazy loading flessibile e un dirty tracking immediato.
L’enhancer è un’utilità che aggiunge del codice a quello delle nostre entità. Successivamente l’enancher post-processa il bytecode prodotto dal compilatore Java aggiungendo campi e metodi utili ad implementare le caratteristiche di persistenza. Le modifiche al bytecode preservano i numeri di linea nelle stack traces; quindi, ad esempio, se il codice solleva un’eccezione alla linea X nel metodo getX allora lo stack trace indicherà la sollevazione dell’errore alla linea X nel metodo pcgetX (OpenJPA aggiunge il prefisso ‘pc’ ai campi e ai metodi negli stack trace). Questo rende OpenJPA perfettamente compatibile con i Java debuggers.
Mi è capitato di utilizzare OpenJPA in un’applicazione standalone e di avere bisogno delle virtù dell’enancher. Per motivi particolari, ho avuto la necessità di attivare l’enancher a build time (è possibile attivarlo anche a runtime con una semplice opzione nella riga di comando — Apache OpenJPA User’s Guide — 5.2.3. Enhancing at Runtime ).
Ho usato un sistema semplice semplice che consiste di 2 fasi:
- copiare il jar di openjpa e tutte le librerie che esso utilizza nella cartella netbeans/java1/ant/lib
- aggiungere il codice seguente al file build.xml del progetto in sviluppo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <target name="openjpa-enhance"> <echo message="==========================="/> <echo message="OpenJPA: Entities Enhancing at Build Time"/> <taskdef name="openjpac" classname="org.apache.openjpa.ant.PCEnhancerTask"/> <!-- invoke enhancer on all .java files below the model directory --> <openjpac> <config propertiesFile= "${basedir}/src/META-INF/persistence.xml"/> <classpath> <pathelement location="${basedir}/build/classes"/> <pathelement location="${basedir}/src"/> <pathelement path="${java.class.path}"/> </classpath> </openjpac> <echo message="==========================="/> </target> |
Tags: Java, JPA, NetBeans, OpenJPA

(2 voti, media: 4,50 su 5)








