2010-06-03 5 views
1

J'ai rencontré une erreur de la part de Google App Engine lorsque j'essayais d'itérer la liste dans la page JSP avec EL.Le gestionnaire d'objets Google App Engine a été fermé

Object Manager has been closed 

Je résolu un problème code suivant, mais je ne pense pas que ce soit une très bonne solution à ce problème:

public List<Item> getItems() { 
     PersistenceManager pm = getPersistenceManager(); 
     Query query = pm.newQuery("select from " + Item.class.getName()); 
     List<Item> items = (List<Items>) query.execute();  
     List<Item> items2 = new ArrayList<Item>(); // This line solved my problem 
     Collections.copy(items, items2); // and this also 
     pm.close(); 
     return (List<Item>) items; 
    } 

Quand j'ai essayé d'utiliser pm.detachCopyAll (articles), il a donné même erreur. J'ai compris que la méthode detachCopyAll() devrait faire la même chose que moi, mais cette méthode devrait faire partie des données nucelus, donc elle devrait être utilisée à la place de mes méthodes owm. Alors, pourquoi dosen't detachCopyAll() fonctionne-t-il?

Répondre

3

Je l'ai résolu moi-même. Je n'ai pas eu @PersistenceCapable (detachable = "true") à mon entité, donc apparemment les objets ne sont pas détachables par deafult.

@PersistenceCapable(detachable="true") 
public class Item { 

... 

} 
1

Je reçois cette erreur aussi ...

Vous pouvez appeler la taille de la méthode() de votre liste avant d'appeler close(); Je pense que c'est un bug non encore résolu, car dans d'autres implémentations JPA, le même code ne renvoie aucune exception.