添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
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 HashCode hc = hf.newHasher().putString(password).hash();
Voici le code de LoginServlet (je précise que j'utilise une librairie nommée guava):
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 {
    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);
            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");
                    session.setAttribute("role", "customer");
                    session.setAttribute("customer", p);
                    response.sendRedirect(getServletContext().getContextPath() + "/auth/customer");
                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
 
     <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
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
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, 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!
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
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 ? 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 .
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
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 ? 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();
					
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
@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);
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
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
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 ^^)
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
@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??
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
@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.
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
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.
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
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
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
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 @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.. 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.
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
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!

Vous avez un bloqueur de publicités installé.

Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.

Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.