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

Servlets/JSP Java Discussion :

Servlet et java.lang.NullPointerException


Sujet :

Servlets/JSP Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2011
    Messages : 11
    Points : 4
    Points
    4
    Par défaut Servlet et java.lang.NullPointerException
    Bonjour à tous.

    J'ai actuellement un problème avec mon projet sous glassfish et j'ai besoin de votre aide .
    Je m'explique: Quand j'essaye de me connecter via un formulaire jsp, j'ai une erreur http 500 et l'erreur suivante qui apparaît dans le log de glassfish:

    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
     
    Avertissement: StandardWrapperValve[LoginServlet]: PWC1406: Servlet.service() for servlet LoginServlet threw exception
    java.lang.NullPointerException
    	at com.google.common.hash.MessageDigestHashFunction$MessageDigestHasher.putString(MessageDigestHashFunction.java:144)
    	at com.supinfo.supinbank.servlet.LoginServlet.doPost(LoginServlet.java:54)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:754)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
    	at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1539)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
    	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
    	at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98)
    	at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162)
    	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:330)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
    	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:174)
    	at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:828)
    	at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:725)
    	at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1019)
    	at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)
    	at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
    	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
    	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
    	at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
    	at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
    	at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
    	at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
    	at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
    	at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
    	at java.lang.Thread.run(Thread.java:722)
    Une ligne attire mon attention, celle de ma(mon ) servlet LoginServlet. Je décide donc de voir ce qui cloche mais tout m'a l'air d'être normal. Je regarde donc la ligne qui semble poser problème:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    HashCode hc = hf.newHasher().putString(password).hash();
    Voici le code de LoginServlet (je précise que j'utilise une librairie nommée guava):



    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
     
    @WebServlet(name = "LoginServlet", urlPatterns = {"/login"})
    public class LoginServlet extends HttpServlet {
     
        @EJB
        private PersonDao personDao;
     
     
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            request.getRequestDispatcher("index.jsp").forward(request, response);
        }
     
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            final String email = request.getParameter("email");
            final String password = request.getParameter("password");
     
            HashFunction hf = Hashing.sha1();
            HashCode hc = hf.newHasher()
                    .putString(password)
                    .hash();
     
            final String hashedPassword = hc.toString();
     
     
            final Person p = personDao.findUserByMail(email);
            if (p == null) {
                doGet(request, response);
            }
            else
            {
                if (p.getPassword().equals(hashedPassword)) {
                    final HttpSession session = request.getSession();
                    session.setAttribute("user", String.format("%s %s", p.getFirstName(), p.getLastName()));
                    if (p.getRole() == UserRole.Advisor) {
                        session.setAttribute("role", "advisor");
                        response.sendRedirect(getServletContext().getContextPath() + "/auth/admin/advisor");
                    }
                    else
                    {
                        session.setAttribute("role", "customer");
                        session.setAttribute("customer", p);
                        response.sendRedirect(getServletContext().getContextPath() + "/auth/customer");
                    }
                }
                else
                {
                    doGet(request, response);
                }
            }
     
        }
     
        @Override
        public String getServletInfo() {
            return "Short description";
        }// </editor-fold>
    }
    Au cas où, je laisse le code la jsp que j'utilise pour ma connexion:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    <body>
     
         <c:url value="/login" var="loginUrl" />
     
    <form method="POST" action="${loginUrl}" style="padding-top:10px; padding-bottom: -15px;">
                      <input type="email" name="email" placeholder="Email" required />
                      <input type="password" name=password" placeholder="Password" required />
                      <input type="submit" value="Login" class="btn-success" />
                  </form>
      </body>
    J'aimerais que vous m'éclairiez parce que je suis perdu.
    Merci d'avance à tous

  2. #2
    Modérateur
    Avatar de paissad
    Homme Profil pro
    Ingénieur de développement (Java/JEE/Eclipse RCP,EMF & webMethods)
    Inscrit en
    Avril 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur de développement (Java/JEE/Eclipse RCP,EMF & webMethods)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 043
    Points : 2 560
    Points
    2 560
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	at com.supinfo.supinbank.servlet.LoginServlet.doPost(LoginServlet.java:54)
    tu devrais voir ce qui est null dans cette classe LoginServlet dans la méthode doPost à la ligne 54

    En fait, tu devrais d'abord vérifier que les valeurs de tes variables email et password ne sont pas null avant d'appeler la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            HashCode hc = hf.newHasher()
                    .putString(password)
                    .hash();
    Cordialement,
    Nous n'héritons pas de la terre de nos parents, nous l'empruntons à nos enfants.
    Le chat du site est aussi ici pour aider. Ne pas hésiter à visiter !

  3. #3
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2011
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Salut paissad,

    Merci pour ta réponse!

    Je vais faire la vérification de suite.

  4. #4
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2011
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Quel boulet je fais !
    Dans mon formulaire, au lieu d'écrire name="password", j'ai fait name=password"!!
    En tout cas, merci à toi paissad pour m'avoir mis sur la voie!

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2010
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 104
    Points : 102
    Points
    102
    Par défaut
    Il s'agit bien de la génération de ton hash qui plante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    at com.google.common.hash.MessageDigestHashFunction$MessageDigestHasher.putString(MessageDigestHashFunction.java:144)
    Comme le dit paissad, ton champs password est peut-être null, et je pense savoir pourquoi :

    Dans ta jsp, je pense qu'il manque un guillemet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="password" name=password" placeholder="Password" required />
    Du coup ton getParameter ne trouve pas le paramètre "password".
    Et password est donc null.

    EDIT: je vois que tu as trouvé entre temps!

    Nuit blanche pour finir ce projet ?

  6. #6
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2011
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Salut Doudoupe,

    Lol, effectivement, nuit blanche pour finir le projet. Mais chut, il ne faut pas le dire .

    Je ne veux pas abuser mais maintenant, j'ai un magnifique "javax.ejb.EJBException".. dans le magnifique log de glassfish.
    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
    65
    66
    67
    68
    69
    70
    71
    72
    73
     
    ATTENTION: StandardWrapperValve[LoginServlet]: PWC1406: Servlet.service() for servlet LoginServlet threw exception
    javax.ejb.EJBException
    	at com.sun.ejb.containers.BaseContainer.processSystemException(BaseContainer.java:5193)
    	at com.sun.ejb.containers.BaseContainer.completeNewTx(BaseContainer.java:5091)
    	at com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:4879)
    	at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:2039)
    	at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1990)
    	at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:222)
    	at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:88)
    	at $Proxy157.findUserByMail(Unknown Source)
    	at com.supinfo.supinbank.servlet.LoginServlet.doPost(LoginServlet.java:59)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:754)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
    	at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1539)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
    	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
    	at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98)
    	at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162)
    	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:330)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
    	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:174)
    	at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:828)
    	at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:725)
    	at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1019)
    	at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)
    	at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
    	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
    	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
    	at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
    	at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
    	at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
    	at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
    	at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
    	at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
    	at java.lang.Thread.run(Thread.java:662)
    Caused by: java.lang.AbstractMethodError: org.hibernate.ejb.EntityManagerImpl.getCriteriaBuilder()Ljavax/persistence/criteria/CriteriaBuilder;
    	at com.sun.enterprise.container.common.impl.EntityManagerWrapper.getCriteriaBuilder(EntityManagerWrapper.java:895)
    	at com.supinfo.supinbank.dao.jpa.JpaPersonDao.findUserByMail(JpaPersonDao.java:41)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	at java.lang.reflect.Method.invoke(Method.java:597)
    	at org.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1052)
    	at org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:1124)
    	at com.sun.ejb.containers.BaseContainer.invokeBeanMethod(BaseContainer.java:5366)
    	at com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:619)
    	at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:800)
    	at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:571)
    	at org.jboss.weld.ejb.SessionBeanInterceptor.aroundInvoke(SessionBeanInterceptor.java:46)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	at java.lang.reflect.Method.invoke(Method.java:597)
    	at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:861)
    	at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:800)
    	at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:571)
    	at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doAround(SystemInterceptorProxy.java:162)
    	at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(SystemInterceptorProxy.java:144)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	at java.lang.reflect.Method.invoke(Method.java:597)
    	at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:861)
    	at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:800)
    	at com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:370)
    	at com.sun.ejb.containers.BaseContainer.__intercept(BaseContainer.java:5338)
    	at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:5326)
    	at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:214)
    	... 30 more
    Je désespère .

  7. #7
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2010
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 104
    Points : 102
    Points
    102
    Par défaut
    Tu utilises Criteria pour faire tes requêtes sur ta BDD ? (c'est pas ma tasse de thé!)

    Regarde de ce côté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Caused by: java.lang.AbstractMethodError: org.hibernate.ejb.EntityManagerImpl.getCriteriaBuilder()Ljavax/persistence/criteria/CriteriaBuilder;
    	at com.sun.enterprise.container.common.impl.EntityManagerWrapper.getCriteriaBuilder(EntityManagerWrapper.java:895)
    	at com.supinfo.supinbank.dao.jpa.JpaPersonDao.findUserByMail(JpaPersonDao.java:41)
    Ta requête doit être mal formée et ne doit pas être acceptée par Criteria.
    Montre voir ton EJB JpaPersonDao ?

  8. #8
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2011
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Oui oui, j'utilise bien criteria.

    Voici mon ejb

    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
     
    public class JpaPersonDao implements PersonDao{
        @PersistenceContext(name = "Supinbank-ejbPU")
        private EntityManager em;   
     
     
        public void persist(Object object) {
            em.persist(object);
        }
     
        @Override
        public Person addUser(Person user) {
            em.persist(user);
            return user;
        }
     
        @Override
        public Person findUserById(Long Id) {
            return em.find(Person.class, Id);
        }
     
        @Override
        public Person findUserByMail(String mail) {
            CriteriaBuilder builder = em.getCriteriaBuilder();
            CriteriaQuery<Person> query = builder.createQuery(Person.class);
            Root<Person> user = query.from(Person.class);
            query.where(builder.equal(user.get("email"), mail));
     
            final List<Person> results = em.createQuery(query).getResultList();
     
            return results.isEmpty() ? null : results.get(0);
        }
     
        @Override
        public void removeUser(Person user) {
            em.remove(user);
        }
     
        @Override
        public List<Person> getAllUsers() {
            return em.createQuery("SELECT p FROM Person p", Person.class).getResultList();
        }

  9. #9
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2010
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 104
    Points : 102
    Points
    102
    Par défaut
    Citation Envoyé par stux001 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
        @Override
        public Person findUserByMail(String mail) {
            CriteriaBuilder builder = em.getCriteriaBuilder();
            CriteriaQuery<Person> query = builder.createQuery(Person.class);
            Root<Person> user = query.from(Person.class);
            query.where(builder.equal(user.get("email"), mail));
     
            final List<Person> results = em.createQuery(query).getResultList();
     
            return results.isEmpty() ? null : results.get(0);
        }
    Je pense que l'erreur est à la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    query.where(builder.equal(user.get("email"), mail));
    Avec Criteria, il faut que tu utilise les métadatas (les classes que tu rajoutes, notées dans le cas de Person "Person_".
    Du coup, on aurait quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    query.where(builder.equal(user.get(Trip_.email), email)
    As tu définis tes métadatas ?

    EDIT:
    Voici un bout de code exemple: (à placer dans le meme package que Person.java)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    @Generated("Hibernate")
    @StaticMetamodel(Person.class)
    public class Person_ {
    	public static volatile SingularAttribute<Person, Long> id;
    	public static volatile SingularAttribute<Person, String> email;
    	public static volatile SingularAttribute<Person, String> firstname;
            public static volatile SingularAttribute<Person, String> lastname;
            [...]
    }
    Alors après, je ne sais pas trop si le @Generated("Hibernate") doit être utiliser avec Hibernate, mais il me semble que même si tu travailles avec EclipseLink par exemple, ça fonctionne quand même. Tu peux tester.

    Après si tu n'y arrives pas, sincèrement laisse tombé Criteria, je pense pas que tu seras pénalisé pour cela!! Moi j'ai utilisé simplement une requête jpql (avec une NamedQuery):

    EJB LoginService.java :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public BankUser findBankUserByEmail(String email) {
     
            Query query = em.createNamedQuery("BankUser.findByEmail").setParameter("email", email);
            try {
                return (BankUser) query.getSingleResult();
            } catch (javax.persistence.NoResultException e) {
                return null;
            }
        }
    définition de la namedQuery dans Person.java :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    @Entity
    @NamedQuery(name = "BankUser.findByEmail", query="select b from BankUser b where b.email = :email")
    [...] d'autres annotations
    public class BankUser implements Serializable {
    [...]
    remplace Bankuser par Person

  10. #10
    Modérateur
    Avatar de paissad
    Homme Profil pro
    Ingénieur de développement (Java/JEE/Eclipse RCP,EMF & webMethods)
    Inscrit en
    Avril 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur de développement (Java/JEE/Eclipse RCP,EMF & webMethods)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 043
    Points : 2 560
    Points
    2 560
    Par défaut
    Pourquoi ne pas utiliser tout simplement et de manière qui à mon sens est plus lisible les @NamedQueries ?
    Avec un @NamedQuery, tu aurais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT p FROM Person p WHERE p.email = :email
    Ensuite, tu passes en paramètre la bonne valeur etc ...
    non ?
    PS: c'est juste un avis personnel, car je ne suis pas très friand tu Criteria (pas très sql parlant à mon goût ^^)
    Nous n'héritons pas de la terre de nos parents, nous l'empruntons à nos enfants.
    Le chat du site est aussi ici pour aider. Ne pas hésiter à visiter !

  11. #11
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2010
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 104
    Points : 102
    Points
    102
    Par défaut
    @Paissad
    I absolutely aggre with you!

  12. #12
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2011
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    @Doudoupe: Je ne crois pas avoir défini les métadatas
    @paissad: confirme-moi, le @NamedQuery sera bien du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    @NamedQuery(
    name = "findUserByMail",
    query = "SELECT p FROM Person p WHERE p.email = :email"
    )
    ps: ça se voit que j'ai un peu de mal avec j2e??

  13. #13
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2010
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 104
    Points : 102
    Points
    102
    Par défaut
    Regarde mon message un peu plus haut, j'ai édité entre temps

    Noon, avec de la pratique et pas mal d'heure à se taper la tête, ça rentre! Et puis Criteria, c'est pas le plus parlant!

  14. #14
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2011
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    @Doudoupe: Autant pour moi. Je n'avais pas vu.
    Maintenant, je saurais qu'il ne faut pas que j'utilise Criteria.
    Je pense que je vais me mettre sérieusement sur j2e.

  15. #15
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2010
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 104
    Points : 102
    Points
    102
    Par défaut
    Ouais regarde un peu Criteria (il te manque juste les métas, c'est pas grand chose!) mais c'est plus si tu as des grooosses requêtes compliquées sujettes à des erreurs de frappes. C'est bien plus facile à débugguer. Mais c'est, à mon sens, le seul avantage.

    JavaEE je m'y suis mis depuis l'été dernier, et sincèrement, c'est une superbe techno, très complète (surtout à partir de la version 6).
    Si tu veux t'y mettre, j'ai un super bouquin très complet dessus, je te met le lien en MP. C'est sur ma dropbox.

  16. #16
    Modérateur
    Avatar de paissad
    Homme Profil pro
    Ingénieur de développement (Java/JEE/Eclipse RCP,EMF & webMethods)
    Inscrit en
    Avril 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur de développement (Java/JEE/Eclipse RCP,EMF & webMethods)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 043
    Points : 2 560
    Points
    2 560
    Par défaut
    Quelques notes par rapport aux @NamedQueries ...

    Par convention, on les déclare dans les classes modèles (les classes annotées @Entity)

    par exemple, tu aurais

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    @Entity
    @NamedQueries({
        @NamedQuery(name = "Person.findByEmail", query = " .... ")
    })
    public class Person implements Serializable {
    // ...

    Vous voyez bien que j'ai fait Person.findByEmail et non findByEmail tout court.
    En effet, les nom des @NamedQuery doivent être unique dans toute l'application.
    En cela, on préfixe chaque @NamedQuery par le nom de la classe pour éviter les doublons
    Nous n'héritons pas de la terre de nos parents, nous l'empruntons à nos enfants.
    Le chat du site est aussi ici pour aider. Ne pas hésiter à visiter !

  17. #17
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2010
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 104
    Points : 102
    Points
    102
    Par défaut
    Sur ces dernières bonnes paroles, il est temps pour moi de laisser mon code pour mon lit!

    Bon courage stux pour terminer stux! Ravi de t'avoir donnée un coup de main

  18. #18
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2011
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    @Doudoupe: C'est ce que j'ai pu voir à propos de j2e. Bien que je sois plus porté sur PHP, je vais me mettre à cette techno.Ton livre m'intéresse. C'est cool de ta part de le partager

    @paissad: Ah ok. J'ai compris. Merci pour l'info..

  19. #19
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2011
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Je te remercie Doudoupe ainsi que Paissad pour votre aide. Vous êtes tous simplement géniaux .
    Passe une bonne nuit Doudoupe(enfin une bonne nuit .. on sait compris) et fais de beaux rêves.

  20. #20
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2010
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 104
    Points : 102
    Points
    102
    Par défaut
    Merci bien
    Si si ça va être une bonne nuit.
    Il me reste la partie JMS à faire demain et c'est fini pour moi!
    Bonne nuit blanche!

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [JSP / Servlet] setAttribut java.lang.nullpointerexception
    Par Invité dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 05/05/2015, 19h54
  2. servlet checkbox - error java.lang.NullPointerException
    Par bella1 dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 13/02/2014, 11h55
  3. EJB3 Servlet java.lang.NullPointerException
    Par sebnolist dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 25/01/2011, 22h32
  4. java.lang.NullPointerException lors de l'exécution de la servlet
    Par fahmi.bedoui dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 07/01/2011, 12h09
  5. Servlet et java.lang.NullPointerException
    Par momjunior dans le forum Servlets/JSP
    Réponses: 0
    Dernier message: 07/05/2010, 20h58

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