Bonjour je travail sur un projet JEE et j'ai besoin de tester mon session bean depuis un projet clienEJB le probleme est que lorsque je fait un mise à jour ou une suppression tout se passe bien mais lors de l'ajout cette erreur est généré:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
Exception in thread "main" org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: persistence.Site.utilisateurs, no session or session was closed
    at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:380)
    at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:372)
    at org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:365)
    at org.hibernate.collection.AbstractPersistentCollection.write(AbstractPersistentCollection.java:205)
    at org.hibernate.collection.PersistentBag.add(PersistentBag.java:297)
    at persistence.Site.ajouterUser(Site.java:57)
    at test.Test.main(Test.java:70)
voila mon fichier persistence.xml:
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
<?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">
    <persistence-unit name="BaseEcuEJB">
 
    <jta-data-source>java:/BaseEcuDS</jta-data-source>    
 
    <properties>
 
            <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
            <property name="hibernate.hbm2ddl.auto" value="update" />
            <property name="hibernate.show_sql" value="true"/>                     
            <property name="hibernate.jdbc.batch_size" value="0"/>
 
        </properties>
 
    </persistence-unit>
</persistence>
voila mon session bean:
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
package services;
 
import java.util.List;
 
import javax.annotation.Resource;
import javax.ejb.SessionContext;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
 
import persistence.Site;
import persistence.Utilisateur;
 
/**
 * Session Bean implementation class UsersManagerBean
 */
 
@Stateless
public class UsersManagerBean implements UsersManagerBeanRemote, UsersManagerBeanLocal {
 
    @PersistenceContext(unitName="BaseEcuEJB")
    private EntityManager em;    
    //@Resource
    //SessionContext sc;
 
    public boolean utilisateurExist(int id)
    {
        Utilisateur u = em.find(Utilisateur.class, id);
 
        if (u == null) 
        {
            return false;
        }
        else
            return true;
    }
    public Site getSiteById(int id){
        Site s = em.find(Site.class, id);
        return s;
    }
 
    public List<Utilisateur> getUsersList()
    {        
        Query q=em.createQuery("select u from Utilisateur u");
        List users = q.getResultList();
        return users;
    }    
 
    public void maj(Site site){
        em.merge(site);
    }
    public void ajout(Utilisateur u) 
    {
        em.persist(u);
 
        System.out.println("***************************User adde*****************************");
    }
 
    public void supp(Utilisateur u)
    {        
            em.remove(em.merge(u));            
    }    
}
et en fin la classe main de test:
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
package test;
 
import java.util.List;
 
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.transaction.SystemException;
 
import org.hibernate.Session;
 
import persistence.Site;
import persistence.Utilisateur;
 
import services.UsersManagerBeanRemote;
 
public class Test {
 
    public static String ad ="Admin";
 
    public static void main(String[] args) throws Exception 
    {        
        Context jndiContext = new InitialContext();
        Object ref = jndiContext.lookup("BaseEcuEAR/UsersManagerBean/remote");
        UsersManagerBeanRemote umb = (UsersManagerBeanRemote)ref;
 
 
 
        Utilisateur u1 = new Utilisateur();        
 
        u1.setNom("Bechir");
        u1.setPrenom("Hada");
        u1.setProfil("Admin");
        u1.setPseudo("hadakamatcho");
        Site site=umb.getSiteById(1);
        site.ajouterUser(u1);
        umb.maj(site);
        //u1.setSite(null);
        umb.ajout(u1);
 
        //System.out.println(umb.findUser("Bechir").);
 
 
    }    
}
J'ai pas compris cette erreur est du a quoi!!!