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
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 <?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 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
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"); } } }
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
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.
dans la console de junit on constate ceci
dans l'espoir d'une réponse pour me débloquer, veuillez accepter mes salutations distinguées.
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)
cordialement,
Partager