OpenJPA Enhancer in fase di compilazione con NetBeans (OpenJPA Enhancing at Build Time with NetBeans)

maggio 17th, 2009 | by Nicola Boldrin |

Immondizia (Trash)Ottimo (Best one) (2 voti, media: 4,50 su 5)
Loading ... Loading ...

OpenJPA può utilizzare un enhancer per consentire performance ottimali a runtime, un lazy loading fles­sibile e un dirty tracking immediato.
L’enhancer è un’utilità che aggiunge del codice a quello delle nostre entità. Succes­sivamente 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 pre­servano 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 pre­fisso ‘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 neces­sità di attivare l’enancher a build time (è pos­sibile 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:

  1. copiare il jar di openjpa e tutte le librerie che esso utilizza nella cartella netbeans/java1/ant/lib 
  2. 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>
Condividi (Share):
  • Google Bookmarks
  • Facebook
  • TwitThis
  • Digg
  • del.icio.us
  • MySpace
  • Live

Tags: , , ,

 

Scrivi un commento (Post a Comment)

(Submit Comment)