probleme lazy loading

probleme lazy loading - Java - Programmation

Marsh Posté le 17-11-2008 à 10:24:33    

Bonjour,  
Je travaille en ce moment sur un application java EE5, avec jsf, ejb3, jpa…
et je rencontre l’exeption suivante :  
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.yaps.petstore.entity.catalog.Product.items, no session or session was closed
 
Voici mon code :
L’architecture est la suivante :
Jsf-->controller(managedBean)-->ejb stateless-->entityBean
 
Controller (CatalogController ):
public String doFindProducts() {
 
catalogBean=(CatalogLocal)new InitialContext().lookup("PetstoreEAR/CatalogBean/local" );
 
category = catalogBean.findCategory(getParamId("categoryId" ));
products =category.getProducts();
navigateTo = "products.displayed";
return navigateTo;
 
}

 
Ejb stateless:
 
public class CatalogBean implements CatalogRemote, CatalogLocal {
 
@PersistenceContext(unitName = "petstorePU" )
private EntityManager em;
public Category findCategory(final Long categoryId) {
 
Category category;
category = em.find(Category.class, categoryId);
return category;

}
entityBean
j’ai un entity bean product
et un entityBean category qui a comme attribut une liste de product.
 
Apres avoir cherché sur plusieurs forum j’ai cru comprendre que l’erreur peut venir du fait qu’au moment de faire products =category.getProducts();
Dans le controller, alors l’entity category n’est plus rattaché au context de persistance.
 
Mais je ne sait toujours pas comment resoudre le probleme…
 
Merci d’avance a tous ceux qui prendront le temps de lire et de repondre.

Reply

Marsh Posté le 17-11-2008 à 10:24:33   

Reply

Marsh Posté le 21-11-2008 à 13:39:17    

roronnoa a écrit :


Apres avoir cherché sur plusieurs forum j’ai cru comprendre que l’erreur peut venir du fait qu’au moment de faire products =category.getProducts();
Dans le controller, alors l’entity category n’est plus rattaché au context de persistance.
 


Je ne dirais pas mieux.
 
 
Soit la connexion au serveur bdd est fermé
Soit tu récupère ton objet, tu ferme ta session, tu rouvre une autre session, et tu essaye d'accéder a ton champ (et comme la session a changé, c'est plus possible)


---------------
my flick r - Just Tab it !
Reply

Marsh Posté le 21-11-2008 à 13:55:49    

Il faudrait que l'objet appellant soit lui même un EJB session, ou alors forcer la lecture des produits avant de retourner la categorie, ce qui n'est pas très joli et peut-être pénalisant en terme de perfs...  
 
public Category findCategory(final Long categoryId) {  
 
Category category;  
category = em.find(Category.class, categoryId);  
category.getProducts().size();
return category;  
}  
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed