Bonjour,
J'ai cree mes classes d'objets, le fichier de configuration persistence.xml qui va bien :
--------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlnssi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="VenteEnLigneClientJavaSE" transaction-type = "RESOURCE_LOCAL">
<class>com.eni.dvtejb.metier.entities.Adresse</class>
<class>com.eni.dvtejb.metier.entities.Article</class>
<class>com.eni.dvtejb.metier.entities.Catalogue</class>
<class>com.eni.dvtejb.metier.entities.Commande</class>
<class>com.eni.dvtejb.metier.entities.Lignecommande</class>
<class>com.eni.dvtejb.metier.entities.Produit</class>
<class>com.eni.dvtejb.metier.entities.Stock</class>
<class>com.eni.dvtejb.metier.entities.Utilisateur</class>
<properties>
<property name="hibernate.connnection.driver_class" value="oracle.jdbc.driver.OracleDriver"/>
<property name="hibernate.connnection.username" value="HR"/>
<property name="hibernate.connnection.password" value="IG10122008"/>
<property name="hibernate.connnection.url" value="jdbc:oracle:thin:@PCool:1522/RH"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.OracleDialect"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
<property name="hibernate.show_sql" value="true"/>
</properties>
</persistence-unit>
</persistence>
Je test par junit avec le programme suivant :
--------------------------------------------------------------------------
package com.eni.dvtejb.client;
import java.math.BigDecimal;
import java.sql.Timestamp;
import java.util.Date;
import java.util.logging.Logger;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import junit.framework.TestCase;
import com.eni.dvtejb.metier.entities.Adresse;
import com.eni.dvtejb.metier.entities.Utilisateur;
import com.eni.dvtejb.metier.entities.Commande;
/*
* Le serveur n'a pas besoin d'être démarré pour exécuter ce test.
* JPA peut également fonctionner hors container.
* Le fichier persistence.xml doit être paramétré correctement.
*/
public class PersistenceHorsContainerTest extends TestCase {
private static Logger logger = Logger.getLogger(PersistenceHorsContainerTest.class.getName());
private EntityManagerFactory emFactory;
private EntityManager em;
public PersistenceHorsContainerTest(String testName) {
super(testName);
}
@Override
protected void setUp() throws Exception {
super.setUp();
try {
logger.info("JPA EntityManager pour tests unitaires DEBUT");
emFactory = Persistence.createEntityManagerFactory("VenteEnLigneClientJavaSE");
em = emFactory.createEntityManager();
logger.info("JPA EntityManager pour tests unitaires FIN");
} catch (Exception ex) {
ex.printStackTrace();
fail("Exception pendant l'instantiation du JPA EntityManager.");
}
}
@Override
protected void tearDown() throws Exception {
super.tearDown();
logger.info("Fermeture de la couche Hibernate JPA. DEBUT");
if (em != null) {
em.close();
logger.info("Fermeture de la couche Hibernate JPA. FIN");
}
if (emFactory != null) {
emFactory.close();
}
}
public void testPersistence() {
try {
logger.info("debut de testPersistence()");
try {
em.getTransaction().begin();
} catch (Exception zz) {
logger.info("Erreur Get TRANSACTION ");
zz.printStackTrace();
zz.getCause();
}
logger.info("em.getTransaction().begin()");
Utilisateur client = new Utilisateur();
client.setNom("renard");
client.setPrenom("lulu");
BigDecimal fax = new BigDecimal("1115333");
client.setFax(fax);
client.setLogin("renard");
client.setPassword("lulu");
BigDecimal telephone = new BigDecimal("1115333");
client.setTelephone(telephone);
client.setTitre("Mr");
client.setEmail("renard@lulu.com");
logger.info("avant persist");
em.persist(client);
logger.info("apres persist");
assertTrue(em.contains(client));
Commande commande = new Commande();
commande.setTypeCartecredit("Visa");
Date aujourdhui = new Date();
long t = aujourdhui.getTime();
//java.sql.Date aujourdhuiSQL = new java.sql.Date(t);
Timestamp aujourdhuiSQL = new Timestamp(t);
commande.setDatecommande(aujourdhuiSQL);
// Clé étrangère
commande.setUtilisateur(client);
// java.sql.Date expirationDate = java.sql.Date.valueOf( "2010-01-31" );
Timestamp expirationDate = Timestamp.valueOf("2010-01-31" );
commande.setDateExpirationCartecredit( expirationDate);
commande.setNumeroCartecredit("4123654787651234");
em.persist(commande);
assertTrue(em.contains(commande));
Adresse adresse = new Adresse();
BigDecimal codepostal = new BigDecimal("75000");
adresse.setCodepostal(codepostal);
adresse.setDepartement("Paris");
adresse.setVille("Paris");
adresse.setPays("France");
adresse.setRue("Vaugirard");
BigDecimal numero = new BigDecimal("230");
adresse.setNumero(numero);
em.persist(adresse);
em.remove(adresse);
assertFalse(em.contains(adresse));
em.getTransaction().commit();
logger.info("fin de testPersistence()");
} catch (Exception ex) {
em.getTransaction().rollback();
ex.printStackTrace();
fail("Exception pendant le test testPersistence");
}
}
}
et j'ai le message à la console :
---------------------------------------------------------------------
28 janv. 2011 16:27:38 com.eni.dvtejb.client.PersistenceHorsContainerTest setUp
INFO: JPA EntityManager pour tests unitaires DEBUT
URL: file:/C:/Users/Georgio/Desktop/Projet%20EJB3/WorkSpace/VenteEnLigneClient/build/classes
META-INF/orm.xml
**/*.hbm.xml
28 janv. 2011 16:27:41 com.eni.dvtejb.client.PersistenceHorsContainerTest setUp
INFO: JPA EntityManager pour tests unitaires FIN
28 janv. 2011 16:27:41 com.eni.dvtejb.client.PersistenceHorsContainerTest testPersistence
INFO: debut de testPersistence()
28 janv. 2011 16:27:41 com.eni.dvtejb.client.PersistenceHorsContainerTest testPersistence
INFO: Erreur Get TRANSACTION
java.lang.UnsupportedOperationException: The user must supply a JDBC connection
at org.hibernate.connection.UserSuppliedConnectionProvider.getConnection(UserSuppliedConnectionProvider.java:54)
at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446)
at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167)
at org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:142)
at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:85)
at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1289)
at org.hibernate.ejb.TransactionImpl.begin(TransactionImpl.java:60)
at com.eni.dvtejb.client.PersistenceHorsContainerTest.testPersistence(PersistenceHorsContainerTest.java:65)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at junit.framework.TestCase.runTest(TestCase.java:168)
at junit.framework.TestCase.runBare(TestCase.java:134)
at junit.framework.TestResult$1.protect(TestResult.java:110)
at junit.framework.TestResult.runProtected(TestResult.java:128)
at junit.framework.TestResult.run(TestResult.java:113)
at junit.framework.TestCase.run(TestCase.java:124)
at junit.framework.TestSuite.runTest(TestSuite.java:232)
at junit.framework.TestSuite.run(TestSuite.java:227)
at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:83)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
28 janv. 2011 16:27:41 com.eni.dvtejb.client.PersistenceHorsContainerTest testPersistence
INFO: em.getTransaction().begin()
28 janv. 2011 16:27:41 com.eni.dvtejb.client.PersistenceHorsContainerTest testPersistence
INFO: avant persist
28 janv. 2011 16:27:41 com.eni.dvtejb.client.PersistenceHorsContainerTest tearDown
INFO: Fermeture de la couche Hibernate JPA. DEBUT
28 janv. 2011 16:27:41 com.eni.dvtejb.client.PersistenceHorsContainerTest tearDown
INFO: Fermeture de la couche Hibernate JPA. FIN
J'ai l'impression que quelque chose dans mon fichier persistence.xml n'est pas correct mais je ne trouve pas.
QQ peut il m'aider ?
Merci
Partager