martes, 6 de mayo de 2014

JavaFX y JPA... problemas

Bueno, para aquellos que empiezan a probar la tecnología javaFX para el desarrollo de interfaces y además quieren hacer uso de JPA en aplicaciones javaFX usando JDK 8.0, cuyo lanzamiento oficial fue hace poco más de un mes, pues se presentan algunos problemas con respecto al uso de la ultima versión de netbeans.
Al hacer un proyecto javaFX y luego agregar la funcionalidad de JPA, y compilar la aplicación, netbeans 8.0 arroja un error:

warning: Supported source version 'RELEASE_6' from annotation processor 'org.eclipse.persistence.internal.jpa.modelgen.CanonicalModelProcessor' less than -source '1.8'
Note: Creating non-static metadata factory ...
error: com.sun.tools.javac.code.Symbol$CompletionFailure: class file for sun.util.logging.PlatformLogger not found
An annotation processor threw an uncaught exception.

Consult the following stack trace for details.
java.lang.RuntimeException: com.sun.tools.javac.code.Symbol$CompletionFailure: class file for sun.util.logging.PlatformLogger not found
at org.eclipse.persistence.internal.jpa.modelgen.CanonicalModelProcessor.process(CanonicalModelProcessor.java:407)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:794)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:705)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.access$1800(JavacProcessingEnvironment.java:91)
at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1035)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1176)
at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1173)
at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:859)
at com.sun.tools.javac.main.Main.compile(Main.java:523)
at com.sun.tools.javac.main.Main.compile(Main.java:381)
at com.sun.tools.javac.main.Main.compile(Main.java:370)
at com.sun.tools.javac.main.Main.compile(Main.java:361)
at com.sun.tools.javac.Main.compile(Main.java:56)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at org.apache.tools.ant.taskdefs.compilers.Javac13.execute(Javac13.java:56)
at org.apache.tools.ant.taskdefs.Javac.compile(Javac.java:1153)
at org.apache.tools.ant.taskdefs.Javac.execute(Javac.java:930)
at org.netbeans.modules.java.source.ant.JavacTask.execute(JavacTask.java:145)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
at sun.reflect.GeneratedMethodAccessor66.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
at org.apache.tools.ant.Task.perform(Task.java:348)
at org.apache.tools.ant.taskdefs.Sequential.execute(Sequential.java:68)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
at sun.reflect.GeneratedMethodAccessor66.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
at org.apache.tools.ant.Task.perform(Task.java:348)
at org.apache.tools.ant.taskdefs.MacroInstance.execute(MacroInstance.java:396)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
at sun.reflect.GeneratedMethodAccessor66.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
at org.apache.tools.ant.Task.perform(Task.java:348)
at org.apache.tools.ant.Target.execute(Target.java:435)
at org.apache.tools.ant.Target.performTasks(Target.java:456)
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1393)
at org.apache.tools.ant.Project.executeTarget(Project.java:1364)
at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
at org.apache.tools.ant.Project.executeTargets(Project.java:1248)
at org.apache.tools.ant.module.bridge.impl.BridgeImpl.run(BridgeImpl.java:286)
at org.apache.tools.ant.module.run.TargetExecutor.run(TargetExecutor.java:555)
at org.netbeans.core.execution.RunClassThread.run(RunClassThread.java:153)
Caused by: com.sun.tools.javac.code.Symbol$CompletionFailure: class file for sun.util.logging.PlatformLogger not found
C:\Users\Ivan Molero\Documents\NetBeansProjects\Campeonato\nbproject\build-impl.xml:924: The following error occurred while executing this line:
C:\Users\Ivan Molero\Documents\NetBeansProjects\Campeonato\nbproject\build-impl.xml:264: Compile failed; see the compiler error output for details.
BUILD FAILED (total time: 7 seconds)

Este molesto error no permite la compilación normal de la aplicación y, por lo tanto, no nos deja ni ejecutar la aplicacion javaFX (que previo a JPA si se ejecutaba) ni mucho menos ver la creación de las entidades en la base de datos (objetivo de agregar el soporte JPA), sin embargo resulta que es relativamente simple de solucionar, lo primero es buscar el archivo project.properties en la carpeta nbproject del proyecto (<<ruta del proyecto>>/nbproject/project.properties, abran dicho archivo en algún editor de texto y luego ubiquen el siguiente contenido:
javac.processorpath=\
    ${javac.classpath}:\
    ${libs.eclipselinkmodelgen.classpath}
Dicho contenido debe ser cambiado para finalmente lucir como sigue:
javac.processorpath=\
    ${javac.classpath}
Finalizada la edición el resultado de la compilación del mismo proyecto no deberá de presentar ningún problema, eso sí, si están trabajando con mysql o algún otro gestor de bases de datos, no olviden agregar como referencia el jar con el driver de mysql (o el gestor correspondiente) ya que esta vez el soporte JPA no se encuentra en el server.


6 comentarios:

  1. Excelente Aporte ! Hace dos horas me estaba dando la cabeza contra la pared con este fakin error. Muchas gracias

    ResponderEliminar
  2. Wau!...que genio me sirvio gracias!......

    ResponderEliminar
  3. Gracias Ivan, estaba apunto de tirar la toalla porque mi programa no querría funcionar e yo buscando fallos en el código!

    ResponderEliminar
  4. Muy BUEN APORTE! Muchas GRACIAS por compartir EXPERIENCIAS. Saludos

    ResponderEliminar
  5. Muchisimas gracias :)
    VI tu aporte en stackoverflow :)

    ResponderEliminar