Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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