java.io.WriteAbortedException: écriture avortée; java.io.Notserialisableexception
Qu'est-ce qui cause ce genre d'erreur dans Tomcat?
SEVERE: Exception loading sessions from persistent storage
java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException:
   bean.ProjectAreaBean
 at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1333)
 at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
 at java.util.ArrayList.readObject(ArrayList.java:593)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(
    DelegatingMethodAccessorImpl.java:25)
2 réponses
  mettre en œuvre  Serializable   
  
    si vous recevez un     NotSerializableException     comme suit,  
java.io.NotSerializableException: bean.ProjectAreaBean
 alors cela signifie simplement que la classe identifiée par le nom entièrement qualifié dans le message d'exception (qui est bean.ProjectAreaBean dans votre cas) ne met pas en œuvre l'interface   Serializable    alors qu'il est prévu par le code derrière. La fixation est relativement simple, il suffit de laisser la classe implémente l'interface  Serializable .  
package bean;
import java.io.Serializable;
public class ProjectAreaBean implements Serializable {
    private static final long serialVersionUID = 1L;
    // ...
}
  le champ  serialVersionUID  n'est pas nécessaire, mais fortement recommandé car il maintient la compatibilité binaire entre les différentes versions de la classe et les représentations sérialisées de ses instances. Donc quand vous ajoutez plus tard un nouveau champ serialisable à la classe, alors vous devez changer le champ serialVersionUID  (généralement juste incrémenter de 1 est suffisant) pour prévenir les problèmes pendant la désérialisation d'une instance d'une ancienne version de la classe. IDEs comme Eclipse offrent également une option pour (re)générer la valeur  serialVersionUID  qui est essentiellement un hachage calculé sur la base de tous les champs.  
voir aussi:
- JSF managed bean provoquant java.io.NotSerializableException cours de déploiement Tomcat
- Injection non sérialisable application étendue bean géré propriété de session sérialisable scoped bean dans un cluster
- Qu'est-ce qu'une versionérielle et pourquoi devrais-je l'utiliser?
  Marque unserializable champs  transient   
  
    si votre classe  Serializable  contient à son tour un champ / propriété faisant référence à une instance d'une autre classe qui ne peut absolument pas être faite  Serializable , alors vous devez le marquer   transient . De cette façon, il sera ignoré lors de la sérialisation de la classe.  
private transient SomeObject thisWillNotBeSerialized;
 vous devez comprendre qu'après la desérialisation ce champ deviendra toujours null . Notez que les blocs de construction et d'initialisation de la classe sont    et non    invoqués lors de la desérialisation. Si vous souhaitez avoir un contrôle plus fin sur la sérialisation et la desérialisation, alors outrepassez les méthodes  readObject()  et  writeObject() . Vous vous trouverez des exemples concrets dans les liens ci-dessous:  
- empêcher la sérialisation de l'arbre des composants pour certaines parties de la demande
- Comment faire des Cookies persistants avec un DefaultHttpClient sur Android?
pourquoi la sérialisation?
  comme le    pourquoi    vous devez vous soucier de serialization, c'est parce que la plupart des conteneurs Java servlet comme Tomcat nécessitent des classes pour implémenter  Serializable  chaque fois que les instances de ces classes sont stockées comme un attribut de la     HttpSession     . Cela est dû au fait que le  HttpSession  peut avoir besoin d'être sauvegardé sur le système de fichiers Disque local ou même transféré sur le réseau lorsque le conteneur servlet doit être arrêté/redémarré ou est placé dans un groupe de serveurs où la session doit être synchronisée.   
 pour pouvoir sauvegarder des objets Java sur le système de fichiers Disque local ou les transférer sur le réseau, ils doivent d'abord être convertis en flux octet (essentiellement: un byte[] ou un InputStream ) et cela n'est possible que si la classe derrière l'objet implémente Serializable . L'interface  Serializable elle-même ne fait pas grand chose, c'est simplement une    interface marqueur    .