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
Ingénieur de développement (Java/JEE/Eclipse RCP,EMF & webMethods)
Inscrit enAvril 2006Messages1 043Détails du profil
Informations personnelles :
Sexe :
Â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
Points2 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!
Développeur Java
Inscrit enMai 2010Messages104Détails du profil
Informations personnelles :
Sexe :
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
Points102
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
.
Développeur Java
Inscrit enMai 2010Messages104Détails du profil
Informations personnelles :
Sexe :
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
Points102
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();
Développeur Java Inscrit enMai 2010Messages104Détails du profil Informations personnelles : Sexe : 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 Points102
@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
Ingénieur de développement (Java/JEE/Eclipse RCP,EMF & webMethods)
Inscrit enAvril 2006Messages1 043Détails du profil
Informations personnelles :
Sexe :
Â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
Points2 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 ^^)
Développeur Java
Inscrit enMai 2010Messages104Détails du profil
Informations personnelles :
Sexe :
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
Points102
@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??
Développeur Java
Inscrit enMai 2010Messages104Détails du profil
Informations personnelles :
Sexe :
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
Points102
@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.
Développeur Java
Inscrit enMai 2010Messages104Détails du profil
Informations personnelles :
Sexe :
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
Points102
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.
Ingénieur de développement (Java/JEE/Eclipse RCP,EMF & webMethods)
Inscrit enAvril 2006Messages1 043Détails du profil
Informations personnelles :
Sexe :
Â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
Points2 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
Développeur Java
Inscrit enMai 2010Messages104Détails du profil
Informations personnelles :
Sexe :
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
Points102
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.
Développeur Java
Inscrit enMai 2010Messages104Détails du profil
Informations personnelles :
Sexe :
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
Points102
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.