java jpa static entity eclipselink

java - ¿Cómo aplicar Static Weaving Ant Task con Eclipse-Link JPA en Netbeans?



entity eclipselink (3)

Debe agregar eclipselink.jar y javax.persistence.jar a Ant classpath.

En Netbeans vaya a Herramientas / Opciones / Varios / Ant, y edite el classpath allí.

Estoy usando Netbeans 7.1.1 y un servidor Glassfish 3.1.2. Como proveedor de JPA, decidí usar eclipse-link 2.3.0 que se envía con Netbeans. Como quiero utilizar la recuperación diferida y mi proyecto consiste en aproximadamente 45 clases de entidad JPA que tienen muchas relaciones entre ellas, decidí usar el entrelazado estático . Además, las clases @Entity se encuentran en un proyecto separado de clase Lib, mientras que persistence.xml reside en el proyecto EJB.

Ya seguí las instrucciones aquí: http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Advanced_JPA_Development/Performance/Weaving/Static_Weaving

Puse la tarea ant en el archivo build-impl.xml (abajo). ¿Es correcto cuando utilizo Netbeans? Aquí está el fragmento de build-impl.xml:

<target name="-post-jar" description="New task definition for EclipseLink static weaving"> <taskdef name="weave" classname="org.eclipse.persistence.tools.weaving.jpa.StaticWeaveAntTask"/> </target> <target name="weaving" description="perform weaving" depends="-post-jar"> <weave source="${dist.jar}/MyProject.jar" target="${dist.jar}/MyProject_Weaved.jar" persistenceinfo="${dist.jar}../../MyProjectEE/MyProject-ejb/build/classes/META-INF/persistence.xml" loglevel="FINER"> <classpath> <pathelement path="${dist.jar}/lib/eclipselink-2.3.0.jar"/> <pathelement path="${dist.jar}/lib/javaee-api-6.0.jar"/> <pathelement path="${dist.jar}/lib/jasypt-1.9.0.jar"/> <pathelement path="${dist.jar}/lib/javax.persistence-2.0.jar"/> <pathelement path="${dist.jar}/lib/org.eclipse.persistence.jpa.jpql_1.0.0.jar"/> <pathelement path="${dist.jar}/lib/joda-time-2.1.jar"/> <pathelement path="${dist.jar}/lib/jms.jar"/> </classpath> </weave> </target>

Todos los archivos jar en las rutas de acceso pathelement también se incluyen como bibliotecas en el IDE de Netbeans. Al presionar "Limpiar y compilar", ahora aparece el siguiente error:

D:/workspace/MyProject/nbproject/build-impl.xml:703: taskdef class org.eclipse.persistence.tools.weaving.jpa.StaticWeaveAntTask cannot be found using the classloader AntClassLoader[]

¿Qué hago mal aquí?


También estoy usando Netbeans 8.0.1 para desarrollar proyectos java ee con Eclipselink 2.4.2 en TomEE 1.7.0 y simplemente puse lo siguiente en mi build.xml (nunca modifico build-impl.xml porque Netbeans puede sobreescribirlo cuando algo se modifica en la configuración, construcción):

<target name="--weaving-def" description="New task definition for EclipseLink static weaving" depends="dist"> <taskdef name="weave" classname="org.eclipse.persistence.tools.weaving.jpa.StaticWeaveAntTask" classpath="${j2ee.platform.classpath}"> </taskdef> </target> <target name="weaving" description="perform weaving" depends="--weaving-def"> <weave source="${build.classes.dir}" target="${build.classes.dir}" loglevel="INFO"> <classpath path="${j2ee.platform.classpath}:${javac.classpath}"/> </weave> </target>

Puede ver que he utilizado solo las variables comúnmente utilizadas en todos los proyectos Netbeans Java EE Ant. No he definido ningún contenedor directamente solo las variables que se definieron en el proyecto.

En mi implementación, estoy usando la estructura de directorios descompuesto y mi persistence.xml está debajo del

${build.classes.dir}/META-INF/persistence.xml

Lo más importante era definir la ruta de clase correctamente .

Ahora si corro

ant weaving

el tejido estático estará hecho. Tarda aproximadamente 15 segundos más para compilarse, así que estoy construyendo de esta manera solo en el servidor de prueba y el servidor de producción y no en mi entorno de desarrollo.

Si simplemente ejecuto (o uso el menú de compilación de Netbeans)

ant dist

el edificio se convertirá en normal sin tejer.

Por supuesto, tengo una definición de tejido en mi persistence.xml como esta:

<persistence-unit name="MY-PU" transaction-type="JTA"> <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> <jta-data-source>mydata</jta-data-source> <exclude-unlisted-classes>false</exclude-unlisted-classes> <properties> <property name="eclipselink.logging.logger" value="org.eclipse.persistence.logging.DefaultSessionLog"/> <property name="eclipselink.logging.level" value="INFO"/> <property name="eclipselink.weaving" value="static"/> </properties> </persistence-unit>


También tuve que incluir org.eclipse.persistence.jpa.jpql_1.0.1.jar y org.eclipse.persistence.jpa.modelgen.processor-2.3.2.jar para poner en vivo el tejido. Espero que esto ayude.