Bonjour,
je suis en train de créer un site de vente en ligne en utilisant ejb.Pour ce faire, j'ai créé un projet venteEnLigneEjb ou j'ai mis tous les Entity Beans(Adresse, Utilisateur, Client(qui hérite de la classe Utilisateur), Commande etc...)
D'autre part, j'ai créer ma BD oracle et je l'ai connecté à mon Eclipse.
pour tester mon code, j'ai créé une classe pour tester l'enregistrement dans la BD en utilisant le Junit.J'ai configuré mon fichier persistence.xml (placé sous META-INF de mon projet VenteEnLigneClient) comme suit
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
 
<?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">
 
	<!--  Unité de persistance JTA -->
	<!--  Fonctionne avec  TestTransactionBMT -->
	<persistence-unit name="VenteEnLigneClientJavaEE" transaction-type="JTA">
		 <provider>org.hibernate.ejb.HibernatePersistence</provider>
 
	     <jta-data-source>java:/OracleDS</jta-data-source>	
 
		 <class>com.devejb.metier.entities.Utilisateur</class>
	 <class>com.devejb.metier.entities.Adresse</class>
	 <class>com.devejb.metier.entities.Commande</class>
	 <class>com.devejb.metier.entities.Lignecommande</class>
	 <class>com.devejb.metier.entities.Stock</class>
	 <class>com.devejb.metier.entities.Article</class>
	 <class>com.devejb.metier.entities.Produit</class>
	 <class>com.devejb.metier.entities.Catalogue</class>
	 <class>com.devejb.metier.entities.Client</class>
	 <class>com.devejb.metier.entities.Administrateur</class>
	 <class>com.devejb.metier.entities.Gestionnaire</class>
 
 
	    <properties>    
	      <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JBossTransactionManagerLookup"/>
	      <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle9Dialect" />  
	      <property name="hibernate.hbm2ddl.auto" value="update" />    
	      <property name="hibernate.show_sql" value="true" /> 
	     </properties> 
 
	</persistence-unit>
 
	<!--  Unité de persistance NON JTA -->	
	<!-- Fonctionne pour PersistenceHorsContainer, ClientDAOTest et TestServlet -->
	<persistence-unit name="VenteEnLigneClientJavaSE" transaction-type="RESOURCE_LOCAL">
 
	 <provider>org.hibernate.ejb.HibernatePersistence</provider>
 
 
	 <!--  Pour  le test PersistenceHorsContainer, il faut supprimer cette ligne (non-jta-data-source) -->
	<!-- <non-jta-data-source>java:/OracleDS</non-jta-data-source>	 -->
 
	 <class>com.devejb.metier.entities.Utilisateur</class>
	 <class>com.devejb.metier.entities.Adresse</class>
	 <class>com.devejb.metier.entities.Commande</class>
	 <class>com.devejb.metier.entities.Lignecommande</class>
	 <class>com.devejb.metier.entities.Stock</class>
	 <class>com.devejb.metier.entities.Article</class>
	 <class>com.devejb.metier.entities.Produit</class>
	 <class>com.devejb.metier.entities.Catalogue</class>
	 <class>com.devejb.metier.entities.Client</class>
	 <class>com.devejb.metier.entities.Administrateur</class>
	 <class>com.devejb.metier.entities.Gestionnaire</class>
 
    <properties>  
      <property name="hibernate.connection.driver_class" value="oracle.jdbc.driver.OracleDriver" />  
      <property name="hibernate.connection.username" value="wael" />  
      <property name="hibernate.connection.password" value="977130" />  
      <property name="hibernate.connection.url" value="jdbc:oracle:thin:@localhost:1521/XE" /> 
      <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle9Dialect" />  
      <property name="hibernate.hbm2ddl.auto" value="update" /> 
      <property name="hibernate.show_sql" value="true" /> 
     </properties> 
	</persistence-unit>
 
</persistence>
et voici mon code pour tester l'enregistrement dans la BD
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
 
package com.devejb.tests;
 
import static org.junit.Assert.*;
 
import java.math.BigDecimal; 
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.devejb.metier.entities.Adresse; 
import com.devejb.metier.entities.Commande; 
import com.devejb.metier.entities.Client;
 
/*
 * 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 ");
            emFactory = Persistence.createEntityManagerFactory("VenteEnLigneClientJavaSE");
            em = emFactory.createEntityManager();
        } 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.");
        if (em != null) {
            em.close();
        }
        if (emFactory != null) {
            emFactory.close();
        }
    }
 
    public void testPersistence() {
        try {
        	logger.info("debut de testPersistence()");
           em.getTransaction().begin();
            logger.info("em.getTransaction().begin()");
 
            Client client = new Client();
            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));
            logger.info("-----resultat de l'insertion "+em.contains(client));
            logger.info("-----apres assert");
            Commande commande = new Commande();
            commande.setTypeCartecredit("Visa");
 
            Date aujourdhui = new Date();
            long t = aujourdhui.getTime();
            java.sql.Date aujourdhuiSQL =  new java.sql.Date(t);
            commande.setDatecommande(aujourdhuiSQL);
 
            // Clé étrangère
            commande.setUtilisateurFk(client);   
 
            java.sql.Date expirationDate = java.sql.Date.valueOf( "2010-01-31" );
    		commande.setDateExpirationCartecredit( expirationDate);            
            commande.setNumeroCartecredit("4123654787651234");           
 
            em.persist(commande);
            assertTrue(em.contains(commande));
            logger.info("-----resultat de l'insertion "+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 voici le résultat
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
mai 08, 2013 1:07:32 AM com.devejb.tests.PersistenceHorsContainerTest setUp
INFO: JPA EntityManager pour tests unitaires 
URL: file:/C:/Users/stoner2008/Desktop/EnvironementEJB/VenteEnLigneClient/build/classes/
  META-INF/orm.xml
  **/*.hbm.xml
 
mai 08, 2013 1:07:34 AM com.devejb.tests.PersistenceHorsContainerTest testPersistence
INFO: debut de testPersistence()
mai 08, 2013 1:07:34 AM com.devejb.tests.PersistenceHorsContainerTest testPersistence
INFO: em.getTransaction().begin()
mai 08, 2013 1:07:34 AM com.devejb.tests.PersistenceHorsContainerTest testPersistence
INFO: avant persist
Hibernate: select utilisateur_seq.nextval from dual
Hibernate: select commande_seq.nextval from dual
Hibernate: select adresse_seq.nextval from dual
mai 08, 2013 1:07:34 AM com.devejb.tests.PersistenceHorsContainerTest testPersistence
INFO: -----apres persist
mai 08, 2013 1:07:34 AM com.devejb.tests.PersistenceHorsContainerTest testPersistence
INFO: -----resultat de l'insertion true
mai 08, 2013 1:07:34 AM com.devejb.tests.PersistenceHorsContainerTest testPersistence
INFO: -----apres assert
mai 08, 2013 1:07:34 AM com.devejb.tests.PersistenceHorsContainerTest testPersistence
INFO: -----resultat de l'insertion true
Hibernate: insert into wael.UTILISATEUR (ADRESSE_FK, email, fax, login, nom, password, prenom, telephone, titre, TYPE_UTIL, utilisateurid) values (?, ?, ?, ?, ?, ?, ?, ?, ?, 'C', ?)
mai 08, 2013 1:07:34 AM com.devejb.tests.PersistenceHorsContainerTest tearDown
INFO: Fermeture de la couche Hibernate JPA.
A première vue, je constate que l'insertion de l'utilsateur est réalisée avec succés mais pas celui de Commande et de Adresse mais lorsque j'arrive à ma BD je constate que tous les tables sont vides meme celle de L'utilisateur

dans la console de junit on constate ceci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
java.lang.IllegalStateException: Transaction not active
	at org.hibernate.ejb.TransactionImpl.rollback(TransactionImpl.java:104)
	at com.devejb.tests.PersistenceHorsContainerTest.testPersistence(PersistenceHorsContainerTest.java:119)
	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:243)
	at junit.framework.TestSuite.run(TestSuite.java:238)
	at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:83)
	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
	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)
dans l'espoir d'une réponse pour me débloquer, veuillez accepter mes salutations distinguées.

cordialement,