IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement Web en Java Discussion :

Impossible de sérialiser l'attribut de session


Sujet :

Développement Web en Java

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2012
    Messages : 93
    Points : 43
    Points
    43
    Par défaut Impossible de sérialiser l'attribut de session
    Bonjour

    J'ai mon bean utilisateurBean qui implémente la Class Serializable, mais lorsque je lance l'application, tout marche bien mais j'ai le message d'erreur suivant:

    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
     
     
    sept. 27, 2015 8:05:00 PM org.apache.catalina.session.StandardSession writeObject
    AVERTISSEMENT: Impossible de sérialiser l'attribut de session utilisateurBean pour la session F155442CE7F6BF8458A004C999311376
    java.io.NotSerializableException: com.telnet.entretien.dao.impl.LoginImpl
    	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1183)
    	at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1547)
    	at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1508)
    	at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1431)
    	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1177)
    	at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:347)
    	at org.apache.catalina.session.StandardSession.writeObject(StandardSession.java:1671)
    	at org.apache.catalina.session.StandardSession.writeObjectData(StandardSession.java:1077)
    	at org.apache.catalina.session.StandardManager.doUnload(StandardManager.java:432)
    	at org.apache.catalina.session.StandardManager.unload(StandardManager.java:353)
    	at org.apache.catalina.session.StandardManager.stopInternal(StandardManager.java:518)
    	at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232)
    	at org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:5569)
    	at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232)
    	at org.apache.catalina.core.StandardContext.reload(StandardContext.java:3919)
    	at org.apache.catalina.manager.ManagerServlet.reload(ManagerServlet.java:954)
    	at org.apache.catalina.manager.ManagerServlet.doGet(ManagerServlet.java:364)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    	at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    	at org.apache.catalina.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:108)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:581)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
    	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
    	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    	at java.lang.Thread.run(Thread.java:745)

    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
     
    public class LoginImpl implements ILogin, java.io.Serializable {
     
        @Override
        public Login charger(Login l) {
            Login lg = null;
            Session session = HibernateUtil.getSessionFactory().openSession();
            try {
                Query query = session.createQuery("From Login l where l.usernamse = '" + l.getUsernamse() + "' and l.motpasse='" + l.getMotpasse() + "'");
                if (!query.list().isEmpty()) {
                    lg = (Login) query.uniqueResult();
                }
            } catch (HibernateException e) {
                lg = null;
            }
            return lg;
        }
     
        @Override
        public Login getLogin(int idC) {
            Login login = null;
            Session session = HibernateUtil.getSessionFactory().openSession();
            try {
                login = (Login) session.get(Login.class, idC);
            } catch (HibernateException e) {
                login = null;
            }
            session.close();
            return login;
        }
     
    }
    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
     
    @ManagedBean
    @SessionScoped
    public class UtilisateurBean implements java.io.Serializable{
     
        private Login login;
        private String role;
        private Login util = new Login();
        private LoginImpl dao;
        Login l;
     
        @PostConstruct
        public void init() {
            dao = new LoginImpl();
        }
     
        public Login getEventBC(int id) {
            ILogin dao1 = new LoginImpl();
            login = dao1.getLogin(id);
            return login;
        }
     
        public String doLogin() {
            String rslt = null;
            l = dao.charger(this.util);
            if (l != null) {
                if (l instanceof Administrateur) {
                    role = "administrateur";
                    rslt = "administrateur/rapport?faces-redirect=true";
                } else if (l instanceof Responsable) {
                    role = "responsable";
                    rslt = "/view/responsable/rapport?faces-redirect=true";
                }
            } else {
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,
                        "Verifier votre login ou mot passe", "Verifier votre login ou mot passe"));
            }
            return rslt;
        }
     
        public String doLayout() {
            FacesContext.getCurrentInstance().getExternalContext().getSessionMap().clear();
            return "/view/index?faces-redirect=true";
        }
    D'où peut venir l'erreur?

    Merci

  2. #2
    Membre régulier
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Septembre 2002
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 74
    Points : 88
    Points
    88
    Par défaut vite fait
    Il ne suffit pas de d'implementer Serializable pour qu'une classe le soit.
    Dans un mode SessionScope, l'intention de serialization est que pour des raisons mémoire, cpu, le container se garde le droit de "persister" ton objet si non utilisé, pour se faire il a besoin que ce dernier soit serializable.

    Ici que veux tu qu'il y ai à sauvegarder sur ton LoginImpl, aucun field, que des methodes, je vois pas trop ce que tu veux faire.
    Il faut que tu re-design ton code.
    Je te conseille d'utiliser CDI pour injecter la bonne implementation et de ne plus instancier tes classes, ce qui d'ailleurs te posera beaucoup de problemes pour faire des tests.

    Enfin proscrit totalement ce genre de code :

    Query query = session.createQuery("From Login l where l.usernamse = '" + l.getUsernamse() + "' and l.motpasse='" + l.getMotpasse() + "'");

    C'est le pire du pire, cherche exploit, injection sql, et tu comprendras.
    Ocelotds : java/javascript communication framework
    https://github.com/ocelotds/ocelot
    JEE7, EJB 3.X, JPA 2.X, Servlet 3.X, CDI 1.1, Websocket, JAX-RS....
    Netbeans 8 - Glassfish 4.x

  3. #3
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Loginimpl tel que présenté est serializable. Soit tu ne nous montre pas tout, , soit tu n'utilise pas cette classe. Par contre ton utilisateurbean stocke des objets retournés par hibernate et les proxys hibernate se serializent pas toujours bien. Je plusoie la remarque sur l'injection sql. Jamais de concaténation pour faire des requêtes sql.

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/02/2015, 18h34
  2. Impossible de sérialiser l'attribut de session
    Par momjunior dans le forum Développement Web en Java
    Réponses: 7
    Dernier message: 18/11/2014, 14h04
  3. Impossible de récupérer un attribut de la session
    Par Rhimo dans le forum Développement Web en Java
    Réponses: 11
    Dernier message: 27/07/2011, 13h37
  4. Impossible de sérialiser l'attribut de session
    Par dehbi dans le forum Struts 1
    Réponses: 8
    Dernier message: 15/04/2006, 16h17
  5. Impossible de changer les attributs d'un dossier
    Par NeHuS dans le forum Autres Logiciels
    Réponses: 20
    Dernier message: 03/03/2006, 09h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo