Intento de ejemplo yeso para PersistenceCapable falló. Asegúrese de que ha sido mejorada
Pregunta
Estoy probando OpenJPA 2.0.1, por primera vez, y estoy haciendo:
79 WARN [main] openjpa.Runtime - The configuration property named "openjpa.Id" was not recognized and will be ignored, although the name closely matches a valid property called "openjpa.Id".
179 INFO [main] openjpa.Runtime - Starting OpenJPA 2.0.1
371 INFO [main] openjpa.jdbc.JDBC - Using dictionary class "org.apache.openjpa.jdbc.sql.PostgresDictionary" (PostgreSQL 8.4.4 ,PostgreSQL Native Driver PostgreSQL 9.0 JDBC4 (build 801)).
<openjpa-2.0.1-r422266:989424 nonfatal user error> org.apache.openjpa.persistence.ArgumentException: Attempt to cast instance "x.quality.QualityQuery@4c4b11e9" to PersistenceCapable failed. Ensure that it has been enhanced.
FailedObject: x.quality.QualityQuery@4c4b11e9
at org.apache.openjpa.kernel.BrokerImpl.assertPersistenceCapable(BrokerImpl.java:4559)
at org.apache.openjpa.kernel.BrokerImpl.persist(BrokerImpl.java:2561)
at org.apache.openjpa.kernel.BrokerImpl.persist(BrokerImpl.java:2423)
at org.apache.openjpa.kernel.DelegatingBroker.persist(DelegatingBroker.java:1069)
at org.apache.openjpa.persistence.EntityManagerImpl.persist(EntityManagerImpl.java:706)
at ...
Según los documentos OpenJPA , que no debería tener que hacer cualquier cosa para conseguir la mejora básica en tiempo de ejecución:
2,5. Omitiendo el OpenJPA potenciador
OpenJPA no requiere que el potenciador de ser ejecutado. Si no se corre el potenciador, OpenJPA caerá de nuevo a una de varias alternativas posibles para el seguimiento del estado, dependiendo de la entorno de ejecución.
6 claseJava retransformación:
si está ejecutando su aplicación en un 6 de Java medio ambiente, OpenJPA intentará registrar dinámicamente una ClassTransformer que redefinirá sus clases persistentes sobre la marcha de realizar un seguimiento de acceso a datos persistentes. Además, se creará un OpenJPA subclase para cada uno de su persistente clases. Cuando se ejecuta una consulta o atravesar una relación, OpenJPA voluntad devolver una instancia de la subclase. Esto significa que el instanceof operador funcionará como se espera, pero o.getClass () devolverá la subclase en lugar de la clase que usted escribió. Usted no tiene que hacer nada en absoluto para obtener este comportamiento. voluntad OpenJPA detectar automáticamente si o no el entorno de ejecución es capaz de Java 6 retransformation clase.
Cualquier pista por qué esto no está funcionando? Gracias mucho ...
(puntos extra por qué ocurre la advertencia openjpa.Id - I no han establecido dicha propiedad ...)
Solución
Aha, resulta que la respuesta era pasar en:
"openjpa.RuntimeUnenhancedClasses" => RuntimeUnenhancedClassesModes.SUPPORTED
para el mapa de configuración. ¿Por qué esto no se documenta con mayor claridad, no estoy seguro ...