#1 Le 07/12/2018, à 08:10
- grigouille
OpenJPA : impossible de sauver une entity
Bonjour,
Je cherche à faire fonctionner un programme Java SE très simple avec OpenJPA :
$ cat META-INF/persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
version="2.1">
<persistence-unit name="toto">
<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
<class>Personne</class>
<properties>
<property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:h2:./test"/>
<property name="javax.persistence.jdbc.show_sql" value="true"/>
<!--property name="openjpa.DynamicEnhancementAgent" value="false"/-->
</properties>
</persistence-unit>
<persistence-unit name="tata">
<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
<class>Personne</class>
<properties>
<property name="javax.persistence.jdbc.driver" value="org.sqlite.JDBC"/>
<property name="javax.persistence.jdbc.url" value="jdbc:sqlite:data.db"/>
<property name="javax.persistence.jdbc.show_sql" value="true"/>
</properties>
</persistence-unit>
</persistence>
$ cat Personne.java
import javax.persistence.*;
import java.io.*;
@Entity
public class Personne implements Serializable {
@Id
@GeneratedValue
private long id;
private String name;
public long getId() {return id;}
public void setId(long x) {id = x;}
public String getName() {return name;}
public void setName(String s) {name = s;}
@Override
public String toString() {
return id + ":" + name;
}
}
$ cat Toto.java
import javax.persistence.*;
public class Toto {
public static void main(String[] args) {
EntityManagerFactory emf = null;
EntityManager em = null;
try {
emf = Persistence.createEntityManagerFactory("toto");
em = emf.createEntityManager();
em.getTransaction();
try {
em.getTransaction().begin();
Personne p = new Personne();
p.setName("Toto");
em.persist(p);
/*
Personne p = em.find(Personne.class, 1);
if(p != null)
System.out.println(p);
else
System.out.println("non trouvé");
*/
em.getTransaction().commit();
} catch(Throwable a) {
System.err.println("ROLLBACK: " + a);
em.getTransaction().rollback();
}
System.out.println("FIN");
} catch(Exception e) {
System.err.println("Exception: " + e);
} finally {
if(em != null) em.close();
if(emf != null) emf.close();
}
}
}
Malheureusement :
$ make
javac -cp .:/usr/share/java/geronimo-jpa_2.0_spec.jar Personne.java
javac -cp .:/usr/share/java/geronimo-jpa_2.0_spec.jar Toto.java
java -cp .:/usr/share/java/geronimo-jpa_2.0_spec.jar:/usr/share/java/commons-collections3.jar:/usr/share/java/openjpa.jar:/usr/share/java/serp.jar:/usr/share/java/geronimo-jta_1.1_spec.jar:/usr/share/java/commons-lang.jar:/usr/share/java/geronimo-jta-1.2-spec.jar:/usr/share/java/xbean-asm5-shaded.jar:/usr/share/java/h2.jar -javaagent:/usr/share/java/openjpa.jar Toto
80 toto INFO [main] openjpa.Runtime - Starting OpenJPA 2.4.2
161 toto INFO [main] openjpa.jdbc.JDBC - Using dictionary class "org.apache.openjpa.jdbc.sql.H2Dictionary".
829 toto INFO [main] openjpa.jdbc.JDBC - Connected to H2 version 1.1 using JDBC driver H2 JDBC Driver version 1.4.196 (2017-06-10).
2419 toto WARN [main] openjpa.Enhance - An exception was thrown while attempting to perform class file transformation on "Personne":java.lang.IllegalArgumentException
at org.apache.xbean.asm5.ClassReader.<init>(Unknown Source)
at org.apache.xbean.asm5.ClassReader.<init>(Unknown Source)
at org.apache.openjpa.enhance.AsmAdaptor.isEnhanced(AsmAdaptor.java:116)
at org.apache.openjpa.enhance.PCClassFileTransformer.isEnhanced(PCClassFileTransformer.java:233)
at org.apache.openjpa.enhance.PCClassFileTransformer.needsEnhance(PCClassFileTransformer.java:196)
at org.apache.openjpa.enhance.PCClassFileTransformer.transform0(PCClassFileTransformer.java:141)
at org.apache.openjpa.enhance.PCClassFileTransformer.transform(PCClassFileTransformer.java:128)
at java.instrument/java.lang.instrument.ClassFileTransformer.transform(ClassFileTransformer.java:246)
at java.instrument/sun.instrument.TransformerManager.transform(TransformerManager.java:188)
at java.instrument/sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:560)
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1009)
at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:802)
at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:700)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:623)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:190)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:499)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:374)
at org.apache.openjpa.meta.MetaDataRepository.classForName(MetaDataRepository.java:1559)
at org.apache.openjpa.meta.MetaDataRepository.loadPersistentTypesInternal(MetaDataRepository.java:1535)
at org.apache.openjpa.meta.MetaDataRepository.loadPersistentTypes(MetaDataRepository.java:1513)
at org.apache.openjpa.kernel.AbstractBrokerFactory.loadPersistentTypes(AbstractBrokerFactory.java:280)
at org.apache.openjpa.kernel.AbstractBrokerFactory.initializeBroker(AbstractBrokerFactory.java:235)
at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:211)
at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:154)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:226)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:153)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:59)
at Toto.main(Toto.java:9)
1821 tata WARN [main] openjpa.Enhance - An exception was thrown while attempting to perform class file transformation on "Personne":java.lang.IllegalArgumentException
at org.apache.xbean.asm5.ClassReader.<init>(Unknown Source)
at org.apache.xbean.asm5.ClassReader.<init>(Unknown Source)
at org.apache.openjpa.enhance.AsmAdaptor.isEnhanced(AsmAdaptor.java:116)
at org.apache.openjpa.enhance.PCClassFileTransformer.isEnhanced(PCClassFileTransformer.java:233)
at org.apache.openjpa.enhance.PCClassFileTransformer.needsEnhance(PCClassFileTransformer.java:196)
at org.apache.openjpa.enhance.PCClassFileTransformer.transform0(PCClassFileTransformer.java:141)
at org.apache.openjpa.enhance.PCClassFileTransformer.transform(PCClassFileTransformer.java:128)
at java.instrument/java.lang.instrument.ClassFileTransformer.transform(ClassFileTransformer.java:246)
at java.instrument/sun.instrument.TransformerManager.transform(TransformerManager.java:188)
at java.instrument/sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:560)
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1009)
at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:802)
at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:700)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:623)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:190)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:499)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:374)
at org.apache.openjpa.meta.MetaDataRepository.classForName(MetaDataRepository.java:1559)
at org.apache.openjpa.meta.MetaDataRepository.loadPersistentTypesInternal(MetaDataRepository.java:1535)
at org.apache.openjpa.meta.MetaDataRepository.loadPersistentTypes(MetaDataRepository.java:1513)
at org.apache.openjpa.kernel.AbstractBrokerFactory.loadPersistentTypes(AbstractBrokerFactory.java:280)
at org.apache.openjpa.kernel.AbstractBrokerFactory.initializeBroker(AbstractBrokerFactory.java:235)
at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:211)
at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:154)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:226)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:153)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:59)
at Toto.main(Toto.java:9)
1014 toto WARN [main] openjpa.Enhance - Unenhanced classes were detected even though the enhancer has ran. Ensure that the EntityManagerFactory is created prior to creating any Entities.
Exception: <openjpa-2.4.2-runknown nonfatal user error> org.apache.openjpa.persistence.ArgumentException: This configuration disallows runtime optimization, but the following listed types were not enhanced at build time or at class load time with a javaagent: "
Personne".
Debian (xfce) 12
HP LaserJet M1132 MFP
Hors ligne