Je n'y comprends rien : dans le tuto de @Coyote (Java EE), lorsque je soumets le formulaire, j'obtiens le message suivant :
/Inscription.xhtml @13,119 value="#{inscrireBean.utilisateur.email}": Target Unreachable, identifier 'inscrireBean' resolved to null
De plus, dans mon backing Bean "InscrireBean", à la déclaration de ma classe (public class InscrireBean implements Serializable{), j'ai une grosse croix rouge qui m'indique : "Class "beans.InscrireBean" is listed in the persistence.xml file, but is not annotated".
Voici ma classe InscrireBean :
package beans;
import java.io.Serializable;
import java.sql.Timestamp;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import dao.UtilisateurDao;
import entities.Utilisateur;
@ManagedBean(name = "inscrireBean")
@RequestScoped
public class InscrireBean implements Serializable {
private static final long serialVersionUID = 1L;
private Utilisateur utilisateur;
// Injection de notre EJB (Session Bean Stateless)
@EJB
private UtilisateurDao utilisateurDao;
// Initialisation de l'entité utilisateur
public InscrireBean() {
utilisateur = new Utilisateur();
}
// Méthode d'action appelée lors du clic sur le bouton du formulaire
// d'inscription
public void inscrire() {
initialiserDateInscription();
utilisateurDao.creer( utilisateur );
FacesMessage message = new FacesMessage( "Succès de l'inscription !" );
FacesContext.getCurrentInstance().addMessage( null, message );
}
public Utilisateur getUtilisateur() {
return utilisateur;
}
private void initialiserDateInscription() {
Timestamp date = new Timestamp( System.currentTimeMillis() );
utilisateur.setDateInscription( date );
}
}
Et voici mon fichier persistence.xml, qui se trouve dans le dossier META-INF :
Alors plusieurs chose, soit tu utilise les annotations soit le faces-config, mais pas les deux en même temps, ensuite pourquoi déclare tu ton bean dans le persistance.xml ? Tu doit y indiquer uniquement les class qui sont persisté par ton ORM.
Pour l'emplacement du faces-config, cela dépend de ta déclaration dans ton web.xml, par exemple:
J'avoue que lorsque j'ai vu que mon bean était invisible, j'ai voulu l'indiquer un peu partout, et le plus clairement possible... (name="inscrireBean" n'était pas nécessaire non plus - je sais). En revanche, ces 7 lignes destinées à déclarer l'emplacement du fichier faces-config.xml ne figuraient pas dans mon fichier web.xml.
A présent, je les y ai ajoutées, mais toujours aucun changement. Pas de bean reconnu. Et parmi ces déclarations redondantes (faces-config, annotations...), laquelle dois-je supprimer ? Laquelle dois-je privilégier ?
Et quid du message d'erreur "Class 'beans.InscrireBean' is listed in the persistence.xml file, but is not annotated" ? Comme s'il ne reconnaissait pas le nom de la classe ! (C'est la ligne "public class InscrireBean implements Serializable{" qui est marquée d'une erreur). Il n'empêche apparemment pas le projet de compiler, mais il ne trouve pas le bean... L'erreur est signalée mais aucune action n'est proposée pour la corriger.
Merci de m'aider à y voir plus clair... Continuons de chercher !
Tous d'abord je t'invite à retirer la déclaration de inscrireBean de ton persistance.xml, il n'est pas censé être dedans car il ne s'agit pas d'une entité persistance (En gros le vérificateur te dit que ton entité devrait posséder l'annotation @Entity) .
Ensuite annotation ou face-config.xml, cela dépend vraiment de ce que tu préfère, personnellement je préfère personnellement dans un fichier mais il existe les deux écoles ni l'une ni l'autre n'est mieux.
Mais déjà tous ça au propre et redit nous ce que tu obtient (et vérifie bien que le lien indiquer dans ton web.xml pour pointer sur le face-config soit bon ;-) ).
Y'aurait pas un truc à modifier dans le Buildpath ? ... (je ne sais pas, je cherche)...
Je ne suis plus sur le même ordi : maintenant, je suis dans mon centre de formation, et je remarque qu'Eclipse ne trouve pas les classes javax.ejb.EJB ni le package javax.faces. Mais je ne souviens plus comment les télécharger ni où les trouver... Il n'y a pas un moyen de le faire depuis Eclipse ?
Je ne sais pas trop faire ça. Ce que j'ai fait c'est d'ajouter "System.out.println("constructeur appelé")" dans le constructeur. Je ne vois pas ce message dans la console, j'en déduis que le constructeur n'a pas été appelé. Mais apparemment, il manque les bibliothèques "javax.faces" et javax.ejb"... Je ne sais plus comment les ajouter, ni où les trouver...
Voilà. Clean... Stop the server... Add and remove > remove... Run on server... et :
et toujours :
Je pense qu'en effet, j'ai une erreur à la publication. Et voici ce que je viens de voir sur la console :
2016-08-23T13:46:28.200+0200|Grave: Exception while deploying the app [pro_jsf] : Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.6.1.v20150605-31e8258): org.eclipse.persistence.exceptions.DatabaseException Internal Exception: java.sql.SQLException: Error in allocating a connection. Cause: Connection could not be allocated because: java.net.ConnectException : erreur lors de la connexion au serveur localhost sur le port 1527 avec le message Connection refused: connect. Error Code: 0
Personnellement je te conseille de d'approfondir les bases du Java, notamment l'utilisation du débogueur et la lecture de stack trace, qui sont 2 choses primordiales dans le développement.
La partie web et la partie base de données requiert tout de même la maîtrise des bases.
Attaquer ces 2 sujets en même temps (parce que le cours traite plein de sujets indépendants en même temps, sans les approfondir) est déstabilisant.
Angular 2 est l'avenir, jQuery c'est de la merde !!! - Java 8 c'est l'an 2016+ (programmez en 1 ligne)
Ça ne m'avance pas à grand chose... Je viens de trouver un tuto sur de débogueur d'éclipse, mais j'ai l'impression que je n'ai rien parce que le serveur n'arrive même pas à lancer l'application. Que dois-je faire dans le débogueur ?
(et pourquoi j'ai l'impression d'être un analphabète quand je poste une question sur un forum ? Et pourquoi personne dans ma formation ne semble savoir utiliser le mode debug d'Eclipse ? Pourquoi le mode débogage n'a-t-il jamais été abordé au cours de la formation ?)
Je rappelle les dernières lignes du fichier server.log :
[2016-08-23T14:38:05.953+0200] [glassfish 4.1] [SEVERE] [] [javax.enterprise.system.core] [tid: _ThreadID=50 _ThreadName=admin-listener(4)] [timeMillis: 1471955885953] [levelValue: 1000] [[ Exception while deploying the app [pro_jsf] : Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.6.1.v20150605-31e8258): org.eclipse.persistence.exceptions.DatabaseException Internal Exception: java.sql.SQLException: Error in allocating a connection. Cause: Connection could not be allocated because: java.net.ConnectException : erreur lors de la connexion au serveur localhost sur le port 1527 avec le message Connection refused: connect. Error Code: 0]]
Après pourquoi tu ne la pas vus en formation, c'est plus à voir avec ton formateur ;-)
Je n'y manquerai pas.
Maintenant en attendant, ma question n'était pas : "à quoi me sert le débogueur" mais : "comment je fais ?". Je ne comprends pas que vient faire le port 1527 alors que je lance Glassfish sous le port 8080, et qu'il y a deux heures la page du formulaire s'affichait sur ce port, alors que maintenant elle ne s'affiche plus. L'adresse que je saisis dans la barre d'adresse est : "http://localhost:8080/pro_jsf/faces/Inscription.xhtml" . J'insiste : cette adresse est correcte, puisqu'elle affichait la page ce matin. Il y avait juste un problème de "Target Unreachable : identifier resolved to null" à l'envoi du formulaire.
Et maintenant, problème de connexion, apparemment... Que dois-je faire ?
En ce qui concerne le débogage pas à pas, j'ai justement l'impression que ça plante dès le premier pas...
Sinon, ma question va vous paraître futile, mais : comment fait-on pour lancer le débogage "pas à pas" ?
Mon serveur Winamp est pourtant activé, il est en ligne... (sinon...heu...comment dire... psst ! eh...comment je "vérifie la configuration de ma datasource" ?...)
Je te conseil sincèrement de revoir les base du java EE et de l'utilisation des ORM, car il faut vraiment comprendre comme ça fonctionne et les paramétrés pour les utilisés.
Je te conseil sincèrement de revoir les base du java EE et de l'utilisation des ORM.
Merci de tes conseils, mais ça ne va pas m'aider : si je poste des questions sur le forum, c'est parce que je suis en train d'apprendre : concrètement, je suis en train de faire le tuto sur Openclassrooms. En général, lorsqu'on suit un cours ou un tuto, c'est parce qu'on veut apprendre.
Alors, si tu postes juste pour livrer ce genre de conseil et me déverser ton mépris, tu peux passer ton chemin. Merci.
Concrètement : l'utilisation du débogueur n'est abordée qu'à la fin du cours, et là, je suis bloqué...
Merci de vous abstenir des conseils et des réflexions du type : "c'est écrit clairement", "tu n'as qu'à lire la doc", ou "tu devrais réviser" : ça n'avance à rien, et c'est plutôt agaçant. Si je suis un tuto de ce site, c'est justement pour apprendre. Alors soit les cours sont mal construits, soit ma question vaut la peine d'être posée et mérite une vraie réponse.
Ce qu'on te dit c'est qu'il y a des bases obligatoires à avoir en JEE.
Tous les gens qui apprennent le java, on leur fait apprendre à faire des syso. Alors qu'en pratique, le syso c'est jamais utilisé.
En dev, t'utilises le débugueur, et les logs.
En prod, t'utilises les logs.
Une des choses à savoir, c'est que c'est primordial de savoir lire une stacktrace dans une log.
ici :
org.eclipse.persistence.exceptions.DatabaseException Internal Exception: java.sql.SQLException: Error in allocating a connection. Cause: Connection could not be allocated because: java.net.ConnectException : erreur lors de la connexion au serveur localhost sur le port 1527
A partir de là, tu dois en déduire que tu as un pb de connexion sur ta base de donnée. Sinon, c'est qu'il faut apprendre à lire des log. Quand tu travailles en JEE, tu vas en manger des erreurs incompréhensibles, c'est normal, ce n'est pas une question de tuto, même le meilleur cours du monde entier ne peut pas lister toutes les façons de faire planter un serveur.
Quand tu vois pb de connexion base de donnée, tu dois vérifier que tu peux accéder à ta base de donnée, vérifier ta config (persistance.xml ? ca fait longtemps que j'ai pas touché à un glassfish). Peut être nous la donner.
Une des choses à savoir, c'est que c'est primordial de savoir lire une stacktrace dans une log.
Et moi, ce que je dis, c'est que je suis justement en train d'apprendre, donc c'est normal que je ne sache pas. Ici, pas de stacktrace, puisque le serveur ne se lance pas. J'ai utilisé le mode débogueur, mais rien à faire... Le débogueur n'affiche aucune information...
D'ailleurs, je ne sais peut-être pas lire les logs, mais au lieu de me dire continuellement que je ne sais pas lire, revoyez le début de ce thread : j'ai déjà posté le code de mon fichier persistence.xml...
T'es assis à l'envers sur ton vélo, tu pédales donc dans le vide dans le mauvais sens, et tu nous demande pourquoi tu n'avances pas. Jusque qu'à présent on regardait s'il y avait un problème au niveau du dérailleurs. Sauf que le problème à l'origine est que tu ne sais pas faire de vélo.
Le problème ici c'est que tu dois encore approfondir les bases, notamment la lecture de stack trace. Te pousser dans la mauvaise direction ne mènera à rien. Aller plus vite que la musique te fera perdre du temps. Cela n'est pas une critique, mais un conseil. (bloquer plusieurs heures/jours sur 1 ligne de code m'est couramment arrivé)
Angular 2 est l'avenir, jQuery c'est de la merde !!! - Java 8 c'est l'an 2016+ (programmez en 1 ligne)
Merci, Pinguet62... et où est-ce que je trouve un tuto pour apprendre la lecture de stacktrace et pour approfondir les bases ??? Sur Openclassrooms ??? (non, j'déconne).
De base, Openclassrooms, c'était le site du zéro, c'est-à-dire que ça s'adressait aux gens qui souhaitent apprendre les bases, justement. L'état d'esprit a bien changé. C'est dommage...
En fait il y a beaucoup de choses qui pourraient être revues sur les cours : factorisation des notions communes (la POO est réexpliquée dans chaque cours), mise à jour (notions Java utilisant les techniques ancestrales), scinder les notions (le cours de Java EE ne traite à aucun cas de Java EE, et mélange JSP, JSF et JDBC qui sont 3 notions distinctes). Mais j'imagine que c'est compliqué (droits sur les cours, autres supports, ...), fonctionnement d'écriture (ajouter la notion de collaboration), ...
Angular 2 est l'avenir, jQuery c'est de la merde !!! - Java 8 c'est l'an 2016+ (programmez en 1 ligne)
Je ne voudrais pas sortir du cadre de cette discussion, mais les cours du Site du Zéro avaient au moins le mérite d'exister. Peu de sites (je n'en connais pas d'autre, d'ailleurs) proposent des cours aussi clairs et efficaces. Ceux qui proposent des tutoriels sérieux sont généralement peu "digestes", et ont tendance à "rester un peu sur l'estomac". Grâce à Openclassrooms, j'ai acquis rapidement une assez bonne autonomie dans plusieurs langages et technologies.
Je sais qu'il y a bien des choses à améliorer, et que tous les points que tu soulèves sont réels, mais je ne connais pas d'autre site de cette qualité. Cependant, quand ça "bloque", comme c'est mon cas, il n'y a personne vers qui se tourner.
Tu as actuellement un problème de configuration de ton serveur glassfish, il va falloir nous donner ton domain.xml, pour cela va dans le répertoire ou tu as installé ton glassfish et va dans le répertoire suivant:
.../glassfish\domains\[[nom du domaine utilisé]\config
Si tu ne sait pas ou ton serveur est installé, double clique sur ton serveur (onglet serveur en dessous de l'éditeur de code en théorie), une page devrait apparaître nommée "Overview", dans le premier pavé General information, clique sur Runtime Environement, une popup va apparaître et le chemin de ton serveur devrait apparaître dans le champs Application server directory.
Ta datesource n'est plus définis, je te renvoie au cours pour la redéfinir, en fait quand je t'ai dit de clean ton projet je parlait de faire Project->Clean...
je suppose que tu doit avoir fait sur le serveur qui lui à la mauvaise manie de ré-initialisé la configuration du domaine.
Il s'agit de la partis:
Cours a écrit:
Configuration du pool
Vous profiterez de l'occasion pour vous exercer à mettre en place un pool de connexions BoneCP sous GlassFish et à l'utiliser. Pour cela, vous pouvez essayer de modifier le fichier XML que je vous avais préparé dans le cadre du cours, afin qu'il cible cette fois, non plus la base bdd_sdzee, mais votre base tp_sdzee. Sinon, je vous ai préparé un fichier prêt à l'emploi que vous pouvez télécharger en cliquant ici.
Pour le reste de la manipulation, vous pouvez vous reporter au cours si vous ne vous souvenez plus comment faire.
Ta datesource n'est plus définis, je te renvoie au cours pour la redéfinir, en fait quand je t'ai dit de clean ton projet je parlait de faire Project->Clean...
je suppose que tu doit avoir fait sur le serveur qui lui à la mauvaise manie de ré-initialisé la configuration du domaine.
Non, j'ai bien fait Project > Clean...
Il est vrai que, comme j'ai bloqué sur le fil rouge (depuis fil rouge 2, je crois, et j'ai posté une question sur le forum sans jamais obtenir de réponse), j'ai sauté systématiquement les tp fil rouge...
D'autre part, je précise que je suis ici sur mon ordi du centre de formation, alors que j'ai suivi mon cours Openclassrooms de chez moi. Les problèmes ne sont peut-être pas les mêmes. Je n'ai fait que copier ici le projet que j'ai fait chez moi. La librairie bonecp manque peut-être sur l'ordi du centre de formation (ce que je vais essayer de voir maintenant)... Je vais relire les références que tu me donnes de plus près et je reviens...
Tiens ! Une nouveauté : Eclipse me signale qu'il ne trouve pas init-param dans mon fichier web.xml. Quel est le paramètre qu'il cherche ? Voici mon fichier web.xml :
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
<!-- Changer cette valeur à "Production" lors du déploiement final de l'application -->
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<context-param>
<param-name>javax.faces.CONFIG_FILES</param-name>
<param-value>/WEB-INF/faces-config.xml</param-value>
</context-param>
<context-param>
<param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
<param-value>true</param-value>
</context-param>
<!-- Déclaration du contrôleur central de JSF : la FacesServlet -->
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- Mapping : association des requêtes dont le fichier porte l'extension .xhtml à la FacesServlet -->
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<inti-param>
<param-name>Ignore</param-name>
<param-value>false</param-value>
</inti-param>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</filter>
</web-app>
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.