Quelques problèmes rencontrés pendant les TPs ou les projets

Ces annexes répertorient différents problèmes qu'un développeur peut rencontrer durant le développement avec les logiciels choisis pour ce cours (Java EE puis Jakarta EE, NetBeans, Java DB, MySQL, GlassFish, Payara, PrimeFaces). L'ordre est aléatoire : les problèmes sont ajoutés à la fin du fichier au fur et à mesure qu'il m'ont été rapportés et que je les ai résolus. Certains points ne sont peut-être plus d'actualité pour les versions des logiciels que vous utilisez.

Pour voir si votre problème est répertorié dans cette page, recherchez (Ctrl-F) des mots clés bien choisis ou les messages d'erreur que vous obtenez dans les annexes ci-dessous. Si vous ne trouvez pas votre problème, lisez le dernier paragraphe de cette page.

Il faut savoir que l'environnement de programmation et d'exécution est complexe et que les outils que vous utilisez ne sont pas exempts de bugs. Si vous avez un problème que vous ne comprenez pas, les moteurs de recherche sont vos amis.

D'autres références du cours sur des erreurs qui peuvent arriver pendant les TPs ou le projet : avec GlassFish et NetBeans et avec JSF.

IMPORTANT : lisez bien la page "Comment demander de l'aide".

Annexe 1 : Changer les ports utilisés par GlassFish (ou Payara)

Annexe 2 : Problème de démarrage de Java DB à cause de restrictions liées à la sécurité dans les versions de Java à partir de la version JDK 7u51. Une permission supplémentaire est requise. Le démarrage de Java DB provoque donc une erreur de type
access denied ("java.net.SocketPermission" "localhost:1527" "listen,resolve") java.security.AccessControlException: access denied ("java.net.SocketPermission" "localhost:1527" "listen,resolve").
Une façon simple de résoudre le problème : au moment de l'erreur une fenêtre s'affiche momentanément en bas dans l'onglet "Output - Java DB Database Process". Cette fenêtre contient un bouton "Disable SecurityManager". Java DB se lance si on clique sur ce bouton.
Si on veut résoudre plus finement le problème, il faut changer la politique de sécurité de Java. Le problème et la façon de le résoudre sont expliqués dans ce lien de stackoverflow et officiellement à cette adresse (copie locale de ce lien).

Voir aussi l'annexe suivante pour les problèmes de connexion à une base de données de Java DB.

Annexe 3 : La version de Java DB utilisée par NetBeans est trop ancienne.

Lors de l'installation de NetBeans une version déjà installée de Java DB est recherchée automatiquement et elle peut être ancienne.

La version de Java DB utilisée par NetBeans est affichée à son lancement, dans l'onglet "Output - Java DB Database Process" (en bas à droite dans NetBeans). Par exemple
"Wed Jun 03 07:14:17 CEST 2015 : Apache Derby Serveur réseau - 10.8.3.2 - (1557835) démarré et prêt à accepter les connexions sur le port 1527"

Si vous essayez d'ouvrir une base de données qui a été créée avec une version plus récente de Java DB vous allez recevoir ce type de message qui indique que vous essayez d'ouvrir une base qui a été créée avec la version 10.10 de Java DB alors que vous avez lancé une version plus ancienne de Java DB (voir la fin du message d'erreur) :

"Unable to connect. Cannot establish a connection to jdbc:derby://localhost:1527/db1 using org.apache.derby.jdbc.ClientDriver (DERBY SQL error: SQLCODE: -1, SQLSTATE: XJ040, SQLERRMC: Échec du démarrage de la base de données 'db1' avec le chargeur de classe sun.misc.Launcher$AppClassLoader@47858e ; pour plus de détails, voir l'exception suivante.::SQLSTATE: XSLANLa base de données située dans C:\Users\xxx\.netbeans-derby\db1 utilise un format incompatible avec la version actuelle du logiciel. La base de données a été créée ou mise à niveau par la version 10.10.)."

Il vous faut donc trouver la version 10.10 ou une version plus récente. Le plus souvent elle se trouve déjà sur votre ordinateur. Sinon, il vous faudra la récupérer sur Internet et l'installer. Sur votre ordinateur vous trouverez la version la plus récente dans la dernière version du JDK que vous aurez installée (répertoire db) ou dans le répertoire d'installation de GlassFish ou Payara (répertoire javadb).

Pour changer la version de Java DB utilisée par NetBeans, allez dans l'onglet "Services" à gauche, et cliquez sur le bouton droit de la souris et choisissez "Properties...". Vous pouvez indiquer l'emplacement du répertoire où est installée la dernière version de Java DB ("Java DB Installation") ; par exemple C:\Program Files\Java\jdk1.8.0\db.

Annexe 4 : Changer la version de Mojarra. Mojarra est l'implémentation de JSF utilisée par GlassFish. Si vous voulez changer cette version (par exemple pour utiliser une version plus récente qui a corrigé un bug), suivez les instructions écrites dans ce lien ; si ça ne marche pas, voyez ce lien.

Annexe 5 : Changer la version de Java utilisée par GlassFish (version 8u20 au moins conseillée pour GlassFish 4.1) : onglet "Services" puis Servers > GlassFish 4.x ; puis clic droit et Properties, onglet Java et renseigner "Java Plaform".

Annexe 6 : Des problèmes d'accents dans les données saisies dans un formulaire Web généré par une page JSF ? Voici la solution.

Annexe 7 : Cas où PrimeFaces n'est pas reconnu, ce qui peut se traduire par l'espace de noms de PrimeFaces qui n'est pas reconnu (avant toute chose, évidemment, vérifiez que vous ne vous êtes pas trompé dans l'espace de noms http://primefaces.org/ui) ou un message d'erreur disant que le jar de PrimeFaces est de taille 0.

La solution peut être de faire simplement un clean and build du projet.

Si ça ne marche pas, essayez ceci :

  1. retirer la librairie PrimeFaces du projet
  2. rajouter la librairie
  3. faire un clean and build du projet
  4. redéployer le projet
  5. relancer l'exécution du projet

Annexe 8 : le projet war ne trouve pas les classes du projet ejb. Quand on ouvre le projet ejb, toutes les classes sont marquées comme "à compiler" ("Needs to be compiled", représenté par une sorte de tête de clé à molette) ; elles restent ainsi même si on les compile. Dans le fichier jar du projet ejb, il n'y a aucune classe. Il semble qu'un "Deploy" du projet principal suffise à débloquer la situation.

Annexe 9 : Quand il y a trop de messages bizarres, la solution peut être de faire un clean du projet et un deploy. Si ça ne marche toujours pas, faire un undeploy du projet de GlassFish dans l'onglet Services. Si ça ne marche toujours pas faire un restart de GlassFish.

Annexe 10 : Vous venez de modifier du code dans NetBeans et vous voulez continuer à tester l'application mais vous recevez un message disant que la vue n'a pu être restaurée. La raison est que les modifications que vous avez apportées à l'application ne permettent pas la restauration de la page JSF. Il suffit de relancer l'application.

Annexe 11 : Plusieurs raccourcis clavier de NetBeans commencent par Alt-Maj, par exemple Alt-Maj-F pour mettre en forme le code d'une classe ou d'une page JSF. Il faut savoir que Alt-Maj seul fait changer de clavier dans Windows et un raccourci clavier de NetBeans peut parfois effectuer ce changement de clavier (par exemple on tape un q et on obtient un a). Si c'est le cas, il suffit de retaper Alt-Maj pour récupérer le bon clavier.

Annexe 12 : Vous n'êtes pas toujours connecté et vous voulez télécharger la documentation sur les API de Java EE. On peut trouver la documentation complète et celle du profile Web (choisissez celle qui vous intéresse) à cette adresse. Les 2 documentations sont contenues dans des fichier jar dont le nom se termine par "-javadoc.jar". Il suffit de décompacter le fichier jar téléchargé (avec un outil pour dézipper).

Annexe 13 : Si votre projet est de type Entreprise, avec un projet global et 2 sous-projets EJB et WEB et que vous avez lancé par erreur l'exécution du sous-projet WEB vous aurez sans doute des problèmes. Par exemple un message d'erreur de ce type :
"java.lang.Exception: java.lang.Exception: Virtual server server already has a web module TP1CustomerApplication-war.war loaded at /TP1CustomerApplication-war therefore web module TP1CustomerApplication#TP1CustomerApplication-war.war cannot be loaded at this context path on this virtual server"
En ce cas, il faut enlever l’application du serveur (onglet "Services", puis "Servers" et enlever l'application du noeud "Applications". Bien souvent ça ne suffira pas et il faudra ensuite arrêter le serveur GlassFish et le relancer en relançant l’exécution du projet global.

Annexe 14 : Pour passer un projet à Java 8 il faut commencer par ajouter la librairie du JDK 8 si ce n'est déjà fait. Ensuite, pour chaque projet il faut changer 2 propriétés : Libraries et Sources pour les passer en Java 8. Pour passer GlassFish en Java 8, faire afficher les propriétés de GlassFish (onglet Services) et changer la version de Java dans l'onglet "Java" (à côté de l'onglet "Commons").

Annexe 15 : (Bug corrigé dans NetBeans 8.1) Les ressources définies dans glassfish-resources.xml ne sont pas créées dans GlassFish au moment du déploiement par NetBeans. Le fichier glassfish-resources.xml n'est pas inclus dans le fichier WAR ou EAR. On reçoit une erreur du type "Invalid resource : jdbc/nomDeLaSourceDeDonnees__pm" au déploiement de l'application. C'est un bug de GlassFish. Pour le contourner, créer le pool de connexion et la ressource JDBC en faisant lire directement le fichier glassfish-resources.xml par la commande asadmin de GlassFish. Pour cela, lancer la commande asadmin qui est dans le répertoire bin du répertoire d'installation de GlassFish et au prompt affiché par asadmin, taper une commande du type (vous prenez le chemin du fichier glassfish-resources.xml et vous remplacez les "\" par des "/" si vous êtes sous Windows) :
add-resources C:/Users/monNom/Documents/NetBeansProjects/MonApplication/setup/glassfish-resources.xml

Un autre contournement plus simple : utiliser l'ancien nom du fichier de ressource, sun-resources.xml, à la place de glassfish-resources.xml. Pour cela, renommer tout simplement le fichier et déployer le projet.

Les ressources seront conservées dans GlassFish pour toutes les applications et pas seulement pour l'application qui contient le fichier et vous faudra ensuite l'enlever si ce comportement ne vous convient pas (on peut le faire dans NetBeans avec l'onglet "Services").

Vous pouvez aussi créer directement les ressources (pool de connexions et ressource JDBC) directement dans GlassFish en utilisant la console d'administration de GlassFish :

Annexe 16 : Avec les EJB stateful et NetBeans, j’ai eu souvent cette erreur après avoir modifié l’application et continué l’exécution : WARNING:   javax.ejb.NoSuchObjectLocalException: The EJB does not exist. session-key: 190c06500a81f-ffffffffca8be9a1-0, ce qui provoque une erreur grave ensuite.
Pour contourner ce problème, il faut faire un deploy de l’application et relancer l’exécution du début. L’erreur disparait alors.

Annexe 17 : Généralement, si vous avez un message "Attempting to execute an operation on a closed EntityManagerFactory", il faut toujours commencer par redémarrer le serveur d'application et voir si ce message d'erreur est toujours affiché.

Plus particulièrement, si vous initialisez la base de données dans une méthode d'un EJB singleton annotée par @Startup et que vous avez une erreur "Caused by: java.lang.IllegalStateException: Attempting to execute an operation on a closed EntityManagerFactory.", il peut s'agir d'un bug de GlassFish. Redémarrez GlassFish et lancez votre application. Si tout se passe bien c'était bien un bug de GlassFish.

Sinon, vous aurez alors un message d'erreur qui explique une erreur dans la méthode "@Startup", par exemple une erreur dans un ordre SQL. Corrigez alors l'erreur et tout devrait ensuite bien se passer.

Si vous ne trouvez pas, une solution pour voir l'erreur est de déplacer l'initialisation en la mettant comme action d'un bouton sur lequel clique l'utilisateur ; les messages d'erreur peuvent être plus clairs. Une fois que l'erreur est corrigée, remettez l'initialisation dans la méthode "@Startup". De toute façon, la plupart du temps, il faut commencer par redémarrer GlassFish et redéployer l'application avant de lancer un nouveau test.

Annexe 18 : Une application qui a déjà fonctionné ne peut plus se lancer ; message d’erreur : GlassFish cannot directory deploy applications with an exploded submodule directory name that contains spaces like "C:\Users\...\WEB-INF\lib\overcast-1.0.10.jar". Il suffit de faire un undeploy du projet et de relancer l’application.

Annexe 19 : Un bouton ou un lien ne réagit pas quand on clique dessus (la méthode "action" n'est pas lancée). Le plus souvent le bouton n'a pas été placé dans un formulaire et il suffit d'ajouter le formulaire. Une autre raison : le formulaire qui englobe le bouton est inclus dans un autre formulaire. Cette erreur peut être difficile à trouver si le formulaire externe vient du template (une erreur de placement d'une des balises du formulaire).

Annexe 20 : Configurer un projet Java EE 7 pour utiliser Java 8. En utilisant le menu contextuel « Properties » des différents projets (war, ejb) et du serveur GlassFish (onglet Services) passer en JDK 1.8 :

Annexe 21 : Erreur qui peut arriver après avoir utilisé NetBeans pour injecter un EJB dans un autre composant, en particulier un backing beans :
java.lang.NullPointerException
at com.sun.enterprise.deployment.util.ComponentValidator.accept
(ComponentValidator.java:554)
at com.sun.enterprise.deployment.util.DefaultDOLVisitor.accept(DefaultDOLVisitor.java:78)
...

Allez voir si NetBeans n'a pas inséré des <ejb-local-ref> dans le fichier web.xml. Si c'est le cas, enlevez-les tous.

Relancez l'application. Soit tout ira bien, soit vous aurez un message d'erreur plus facile à comprendre.

Annexe 22 : NetBeans peut modifier quelquefois le fichier web.xml pendant la création d'un flot. Il peut ajouter un <context-param> de nom javax.faces.CONFIG_FILES. Le plus souvent c'est parce que vous avez fait une mauvaise manoeuvre. Examinez bien la situation ; le plus souvent vous pourrez enlever ces lignes.

Annexe 23 : Depuis la version 8.1 de GlassFish il est inutile d'avoir un fichier beans.xml pour que CDI soit utilisé. Cependant si ce fichier n'existe pas il peut y avoir des problèmes lors des déploiements incrémentaux lorsque vous modifiez des fichiers du projet. Si vous avez des problèmes essayez donc d'ajouter ce fichier beans.xml.

Annexe 24 : Quelques messages d'erreur "étranges" et leur solution :

Annexe 25 : Les tags JSF et les expressions EL ne sont pas reconnues dans une page JSF. La page est donc affichée dans le navigateur sans le contenu des tags JSF et avec des "#{...}" à la place de la valeur de l'expression EL.

Plusieurs raisons sont possibles. La plus probable est que l'URL de la page ne correspond pas au Servlet mapping donné dans web.xml (ou donné par défaut par JSF). Par exemple, si on a le mapping "/faces/*", on peut oublier d'ajouter un "/faces" au début quand on indique une page de login si on utilise la sécurité standard de Java EE.

Une autre raison peut être le manque d'URI ou un mauvais URI dans les espaces de noms associés à JSF (par exemple xmlns:f="http://xmlns.jcp.org/jsf/core").

Annexe 26 : Après des mauvaises manipulation NetBeans vous dit un message du genre "The project uses a class library called "javaee-endorsed-api-7.0", but this class library was not found.". Pourtant vous ne trouvez aucune référence à cette bibliothèque dans les propriétés de votre projet.

Voici quelques liens qui pourront vous aider : https://stackoverflow.com/questions/16146806/javaee-endorsed-api-6-0-is-missing, https://stackoverflow.com/questions/47520464/javaee-endorsed-api-7-0-not-found, https://stackoverflow.com/questions/21528618/what-is-java-ee-endorsed-api, https://stackoverflow.com/questions/9280217/new-maven-project-using-archetypes-why-is-javaee-endorsed-api-jar-being-copied/18356334#18356334, http://www.java2s.com/Code/Jar/j/Downloadjavaeeendorsedapi70jar.htm (la librairie manquante pour Java EE 7).

Annexe 27 : Au moment du build ou du clean ou du run d'un projet vous recevez un message disant "Unable to delete file <jar de Primefaces>". Solution : essayer encore une fois. Si ça ne marche pas, faites un undeploy du projet sur le serveur d'application (Windows refuse de supprimer un fichier en cours d'utilisation). Si ça ne marche toujours par, quittez NetBeans et relancez-le.

Annexe 28 : Dans un projet Maven vous obtenez ce type d'erreur au moment du build du projet :

Failed to execute goal org.apache.maven.plugins:maven-dependency-plugin:2.6:copy (default) on project tptemplate: Unable to find artifact. Failure to find javax:javaee-api:jar:8.0.0 in https://repo.maven.apache.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of central has elapsed or updates are forced

Le plus souvent (sinon toujours...) c'est que vous vous êtes trompé dans votre fichier pom.xml sur le nom de la dépendance ou sur le numéro de la version. Sur cet exemple, il n'existe pas de version 8.0.0 de javaee-api:jar ; il aurait fallu donner le numéro de version "8.0" et pas "8.0.0.

Annexe 29 : Vos pages JSF sont affichées presque vides ; seuls les balises purement HTML apparaissent (par exemple les balises <h1>). En fait, les balises JSF (celles avec l'alias "h:") n'apparaissent pas. Une raison simple peut être que vous avez oublié d'ajouter la classe de configuration de JSF 2.3 (et versions plus récentes). JSF 2.3 a ajouté le mapping "*.xhtml" qui n'était pas dans les versions précédentes de JSF. Donc les URL qui correspondent à ce mapping ne sont pas traités par le servlet "Faces" (celui qui traite les URL "JSF"), ce qui explique que les balises JSF ne sont pas comprises.

La solution est donc de réparer votre oubli et d'ajouter cette classe de configuration.

Annexe 30 : NetBeans ne fonctionnne plus normalement, alors que tout marchait bien avant. Par exemple, vous créez un nouveau projet et ce projet ne s'affiche pas dans l'onglet des projets. La première chose à faire est de réinitialiser l'environnement de NetBeans. Le plus souvent le problème sera réglé. Si NetBeans ne fonctionne toujours pas correctement vous pouvez le réinstaller.

Annexe 31 : Impossible de créer un nouveau projet. Une erreur de ce type s'affiche : "Cannot run program "cmd": Malformed argument has embedded quote". C'est un bug de NetBeans 11.1 quand il est lancé avec le JDK 11.0.5 (et aussi quelques versions plus anciennes du JDK). 2 façons de résoudre le problème :

Annexe 32 : Erreur disant qu'un jar n'a pas été trouvé par Maven dans l'entrepôt central.

Un message d'erreur du type suivant au moment du build du projet :

Failed to execute goal org.apache.maven.plugins:maven-dependency-plugin:2.6:copy (default) on project testRest: Unable to find artifact. Failure to find jakarta.platform:jakarta.jarkartaee-api:jar:8.0.0 in https://repo.maven.apache.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of central has elapsed or updates are forced

Examinez bien vos dépendances dans le fichier pom.xml. Si vous êtes certain que ce qui est affiché est bon, retapez-le. Peut-être un caractère invisible s'est caché quelque part ?

Annexe 33 : Injection CDI par un producer ne fonctionne pas

Attention, l'annotation @Produces est aussi utilisée par JAX-RS (applications REST) dans un autre paquetage que celle utilisée par CDI. L'annotation CDI : javax.enterprise.inject.Produces ; l'annotation JAX-RS : javx.ws.rs.Produces. L'IDE vous a peut-être proposé en premier la mauvaise annotation et vous avez validé sans vérifier.

Annexe 34 : <h:inputText> d'un entier retourne toujours 0

La version JSF embarquée avec Payara 5.194 contient un gros bug pour les convertisseurs standards. Si vous voulez rester avec la version Payara 5.194 la solution pour contourner le bug est d'ajouter une dépendance pour la librairie OmniFaces dans pom.xml (dans la balise <dependencies>) :

<dependency>
   <groupId>org.omnifaces</groupId>
   <artifactId>omnifaces</artifactId>
   <version>3.3</version>
</dependency>

Sinon, le plus simple est de passer à une autre version de Payara, par exemple la version 5.201.

Annexe 35 : Connexion impossible avec MySQL ; "Connection could not be allocated because: Public Key Retrieval is not allowed"

Cette erreur est apparue au lancement d'une application. Tout marchait bien avant avec cette application.

Le problème arrive lorsque l'application et démarrée alors que le serveur MySQL n'a pas été démarré. Le problème persiste après le démarrage de MySQL.

Il faut redémarrer NetBeans et MySQL (il faut parfois recommencer plusieurs fois). Pas d'explication...

DONC, IL NE FAUT PAS OUBLIER DE LANCER MYSQL avant de lancer l'application !

Si ça ne revient toujours pas après plusieurs tentatives, il faut ajouter l'attribut allowPublicKeyRetrieval=true pour la connexion à MySQL.

Si la source de données a été définie dans le serveur d'application, comme pour le TP 1, il faut modifiez le champ "JDBC URL" du driver JDBC de MySQL comme ceci (voir installations/sgbd/mysql/mysql.html, section "Intégration de MySQL à NetBeans" ; remplacez "customer" par le nom de la base de données MySQL que vous utilisez) :

jdbc:mysql://localhost:3306/customer?useTimezone=true&serverTimezone=UTC&allowPublicKeyRetrieval=true

Ce qui est très étrange c'est que si vous rétablissez ensuite l'ancienne valeur de "JDBC URL", l'application devrait à nouveau fonctionner (jusqu'au prochain oubli du lancement de MySQL...).

Si la source de données a été définie par l'annotation @DataSourceDefinition, comme dans les TPs sur JPA, il faut ajouter la propriété "allowPublicKeyRetrieval=true" :

@DataSourceDefinition(
        className = "com.mysql.cj.jdbc.MysqlDataSource",
        name = "java:app/jdbc/banque",
        serverName = "localhost",
        portNumber = 3306,
        user = "****",
        password = "*****",
        databaseName = "banque",
        properties = {
          "characterEncoding=UTF-8",
          "nullCatalogMeansCurrent=true",
          "nullNamePatternMatchesAll=false",
          "serverTimezone=UTC",
          "useInformationSchema=true",
          "useSSL=false",
          "useUnicode=true",
          "zeroDateTimeBehavior=CONVERT_TO_NULL",
          "allowPublicKeyRetrieval=true"
        }
)

Annexe 36 : Erreur "Unresolved <ejb-link>" au démarrage d'une application

Si vous avez fait une mauvaise manipulation (injection d'un EJB dans une classe qui ne peut injecter d'EJB), un wizard de NetBeans peut ajouter ce genre de code dans le fichier web.xml :

<ejb-local-ref>
   <ejb-ref-name>MicroMarketManager</ejb-ref-name>
   <ejb-ref-type>Session</ejb-ref-type>
   <ejb-link>#MicroMarketManager</ejb-link>
</ejb-local-ref>

Il suffit d'enlever ces lignes.

Le type de mauvaise manipulation qui peut générer ces lignes : injecter un EJB dans une classe qui ne permet pas l'injection d'un EJB par @EJB ; par exemple un convertisseur JSF d'avant la version 2.3, qui n'est pas annoté par la bonne annotation @FacesConverter.

Annexe 37 : Unable to retrieve EntityManagerFactory

Message d'erreur qui est affiché au démarrage de l'application (par exemple de l'application du TP 1).

Peut-être avez-vous essayé de filtrer avec Maven les fichiers qui sont dans un des répertoires de votre application ? Enlevez ce filtrage.

Annexe 38 : Erreurs internes étranges lors d'un clean and build

Si vous avez des erreurs internes étranges lors d'un clean and build d'un projet, c'est peut-être parce qu'un des plugins utilisé par Maven est trop ancien. Il faut alors installer un plugin plus récent dans la section <plugins> de pom.xml.

Par exemple, si vous avez ce message d'erreur :
"Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.3:war", mettez à jour ce plugin avec la dernière version (sous NetBeans, il suffit d'effacer la valeur de la version et de taper Ctrl-Espace à l'intérieur de la balise <version> pour avoir la liste des versions).

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-war-plugin</artifactId>
   <version>3.3.2</version>
</plugin>

Annexe 39 : L'application se lance bien mais vous avez un WARNING: JSF1091 : Aucun type mime détecté pour le fichier primeicons/primeicons.eot. Pour résoudre ce problème, ajoutez un mappage mime-type au fichier web.xml de l’application.

Warning dû à PrimeFaces. Comme il est indiqué dans le message, il faut ajouter ces lignes dans le fichier web.xml :

<mime-mapping>
    <extension>eot</extension>
    <mime-type>application/font-eot</mime-type>
</mime-mapping>

Vous aurez aussi sans doute des messages semblables pour les types ttf, woff et woff2, à la place de eot. Il suffit de répeter le code ci-dessus dans web.xml pour chaque type, en remplaçant les 2 eot par, par exemple, woff.

Annexe 40 : RAR5099 : Wrong class name or classpath for Datasource Object java.lang.ClassNotFoundException: com.mysql.cj.jdbc.MysqlDataSource

Vous avez oublié d'installer le driver pour MySQL dans le serveur d'application. Revoyez l'installation des logiciels.

Annexe 41 : Sous Windows, il peut arriver que pendant l'installation de Payara, Microsoft Defender (l'anti-virus par défaut) pense trouver un virus dans le fichier war-util.jar du fichier zip. Il s'agit d'un faux positif et il ne faut pas mettre ce fichier en quarantaine sinon Payara ne démarre pas

Annexe 42 : Au lancement de l'application, message d'erreur
"SEVERE: Error Rendering View[/customerList.xhtml]
java.lang.IllegalStateException: This web container has not yet been started
at org.glassfish.web.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1727)
... "

Faire un "Undeploy" de l'application et redémarrer le serveur d'application devrait supprimer cette erreur.

Annexe 43 : Pendant un clean and build, erreur curieuse "Error injecting constructor, java.lang.ExceptionInInitializerError
at org.apache.maven.plugin.war.WarMojo.<init>(Unknown Source)
while locating org.apache.maven.plugin.war.WarMojo
"

Il faut mettre à jour dans pom.xml le plugin "maven-war-plugin". Tant que vous y êtes, mettez tous les plugins à jour.

Annexe 44 : Au lancement de l'application, message d'erreur

"SEVERE: Exception while invoking class org.glassfish.ejb.startup.EjbApplication start method
java.lang.IllegalStateException: java.lang.RuntimeException: Could not invoke defineClass!

..."

Un simple "Clean and Buid" devrait suffire à rétablir les choses. Sinon, undeploy et redémarrage du serveur d'application.

Annexe 45 : Erreur "The name of the driver class for the datasource is missing" durant l'exécution du wizard "New Entity Classes from Database" au début du TP 1.

Il y a plusieurs façons d'ajouter le nom de la classe du driver JDBC de MySQL dans Payara.

Une des façons est d'arrêter Payara et de modifier le fichier payara6\glassfish\domains\domain1\config\domain.xml comme suit (ajouter la ligne en caractères gras) :

<jdbc-connection-pool datasource-classname
="com.mysql.cj.jdbc.MysqlDataSource" 
    name="mySQLPool" res-type="javax.sql.DataSource">
  <property name="password" value="******"></property>
  <property name="databaseName" value="customer"></property>
  <property name="serverName" value="localhost"></property>
  <property name="driverClass" value="com.mysql.cj.jdbc.Driver"/>
  <property name="user" value="root"></property>
  <property name="portNumber" value="3306"></property>
</jdbc-connection-pool>
<jdbc-resource pool-name="mySQLPool" jndi-name="jdbc/customer">

Une autre façon est d'ajouter une variable additionnelle dans la définition du pool de connexion de Payara associé à MySQL :
nom de la variable : driverClass, valeur de la variable : com.mysql.cj.jdbc.Driver.

Redémarrer Payara pour prendre en compte la modification.

Annexe 46 : Au démarrage de l'application la page JSF de démarrage n'affiche rien et aucune erreur n'est affichée.

Quand on affiche le code de la page (Ctrl-U dans la page si on utilise Chrome), le code JSF de la page est affichée. Il semble que le code JSF n'est pas reconnu et pas transformé en code HTML par JSF.

Une erreur difficile à trouver : dans le code de web.xml, le pattern pour le servlet Faces (le servlet qui traite les pages JSF) comportait sans doute un caractère non affichable et donc le code des pages JSF n'était pas traité ! Il a suffi de retaper cet URL pour que la page de démarrage s'affiche correctement.

En cas de désespoir

Si vous avez lu tout ce qui précède, cherché sur un moteur de recherche et que les messages d'erreur qui s'affichent (il faut commencer à chercher une erreur dans votre projet en commençant par lire et essayer de comprendre les messages des logs de GlassFish/Payara) sont vraiment curieux et n'ont pas l'air de concerner votre code, voici ce que vous pouvez faire :

  1. Tapez le message d'erreur dans un moteur de recherche et essayez de trouver votre cas (déjà dit, mais je le répète, étape indispensable). Si vous pensez que cette erreur n'aurait jamais dû arriver, vous pouvez commencer par faire les étapes 2 ou même 3 et 4 suivantes en premier.
  2. Si vous ne trouvez pas, faire un "Clean and Build" du projet et réessayez. Parfois un "Clean and Build" provoque une erreur mais un simple "Clean" suffit à réparer le problème.
  3. Si ça ne marche pas, essayez de faire un Deploy depuis NetBeans.
  4. Parfois il faut aller jusqu'à un undeploy de votre projet dans GlassFish/Payara (onglet Services dans NetBeans).
  5. Si ça ne marche toujours pas, essayez de redémarrer GlassFish (onglet Services dans NetBeans), ou même NetBeans.
  6. Des erreurs sont coriaces et il faut employer les gros moyens. Par exemple j'ai rencontré le message d'erreur "Deployment error: Delegate is not set yet" ; j'ai dû arrêter NetBeans et supprimer le répertoire TargetModules qui se trouve dans le répertoire de configuration de NetBeans (par exemple sous C:\Users\toto\AppData\Roaming\NetBeans\8.0.1\config\J2EE\TargetModules si vous vous appelez "toto") et tout s'est remis à marcher. Ne me demandez pas pourquoi :-).
  7. Parfois il faut supprimer GlassFish/Payara de l'onglet Services de NetBeans et le réinstaller (essayez de ne pas en arriver là) ou même réinstaller tout NetBeans. Rassurez-vous il y a très longtemps que ça ne m'est pas arrivé.

N'oubliez pas que, le plus souvent, l'erreur vient de votre code et il suffit de lire attentivement les logs du serveur d'application pour résoudre le problème, ou au moins corriger le code pour obtenir un message d'erreur plus parlant.