Pregunta
Intento desarrollar un proyecto JPA en IBM RAD.Y puedo ejecutarlo en WebpShere con éxito, pero el problema es que mi máquina es bastante antigua.Por lo tanto, implementar en el contenedor Java EE no es razonable. Y quiero ejecutarlo en JSE. Pero da el siguiente error:
94 test INFO [main] openjpa.Runtime - Starting OpenJPA 1.2.1-SNAPSHOT
235 test INFO [main] openjpa.jdbc.JDBC - Using dictionary class "com.ibm.ws.persistence.jdbc.sql.DB2Dictionary".
1797 test WARN [main] openjpa.Enhance - This configuration disallows runtime optimization, but the following listed types were not enhanced at build time or at class load time with a javaagent: "[class Customer]".
Exception in thread "main" <openjpa-1.2.1-SNAPSHOT-r422266:686069 fatal user error> org.apache.openjpa.persistence.ArgumentException: The type "class Customer" has not been enhanced.
at org.apache.openjpa.meta.ClassMetaData.resolveMeta(ClassMetaData.java:1650)
at org.apache.openjpa.meta.ClassMetaData.resolve(ClassMetaData.java:1624)
at org.apache.openjpa.meta.MetaDataRepository.processBuffer(MetaDataRepository.java:717)
at org.apache.openjpa.meta.MetaDataRepository.resolveMeta(MetaDataRepository.java:616)
at org.apache.openjpa.meta.MetaDataRepository.resolve(MetaDataRepository.java:541)
at org.apache.openjpa.meta.MetaDataRepository.getMetaData(MetaDataRepository.java:308)
at org.apache.openjpa.kernel.BrokerImpl.newObjectId(BrokerImpl.java:1114)
at org.apache.openjpa.kernel.DelegatingBroker.newObjectId(DelegatingBroker.java:268)
at org.apache.openjpa.persistence.EntityManagerImpl.find(EntityManagerImpl.java:451)
at deneme.main(deneme.java:21)
¿Qué me falta?
Por mi persistente.xml es:
**<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="test" transaction-type="RESOURCE_LOCAL">
<provider>
com.ibm.websphere.persistence.PersistenceProviderImpl
</provider>
<class>Customer</class>
<properties>
<property name="openjpa.ConnectionDriverName" value="com.ibm.db2.jcc.DB2Driver"/>
<property name="openjpa.ConnectionURL" value="jdbc:db2://localhost:50000/PARUD:retrieveMessagesFromServerOnGetMessage=true;"/>
<property name="openjpa.ConnectionUserName" value="db2admin"/>
<property name="openjpa.ConnectionPassword" value="xxxxx"/>
<property name="openjpa.jdbc.Schema" value="POOL"/>
</properties>
</persistence-unit>
</persistence>**
Solución
Sólo un puntero: Es necesario para mejorar sus clases, por ejemplo, en tiempo de ejecución a través de -javaagent: yourlib.jar o incluso durante la compilación. Usted puede aprender más sobre este tema aquí :
"La segunda y recomendó manera get tiempo de ejecución de mejora es proporcionar un javaagent cuando inicia la JVM que OpenJPA va carreras en."
Otros consejos
Acabo de realizar el ejercicio de ejecutar OpenJPA 2.1.0 en Tomcat 7.0.Simplemente no pude lograr que la mejora en tiempo de ejecución funcionara en Tomcat, así que me di por vencido y decidí usar la mejora en tiempo de compilación.Estoy desarrollando mi código en Eclipse, así que seguí las instrucciones aquí:
http://openjpa.apache.org/enhancement-with-eclipse.html
Sin embargo, tenga en cuenta que las instrucciones de esta página son para proyectos Java genéricos.Si está trabajando con proyectos web dinámicos, asegúrese de especificar correctamente el argumento del directorio de compilación.Usé -Dbuild.dir=build/classes que es la ubicación típica para el código compilado.
Una peculiaridad más molesta con la que tienes que vivir.Debe invocar manualmente el constructor usando el elemento de menú "Proyecto > Construir proyecto".Cuando se ejecuta el potenciador, modifica las clases creadas previamente.En consecuencia, debe presionar F5 o Actualizar para el proyecto antes de publicarlo en Tomcat.