Assurez-vous que MySQL est bien démarré. Sous Windows, si MySQL est démarré comme un service, il faut aller démarrer le service de MySQL. Voir la page d'installation de MySQL.
Cette base de données va être utilisée ci-dessous et dans le TP 1. Elle contient quelques tables correspondant à un magasin de produits informatiques.
Lancez le Workbench de MySQL (menu Windows > MySQL > MySQL Workbench).
Clic sur la connexion à l'instance que vous venez d'installer. Vous allez devoir donner le mot de passe de root que vous avez choisi pendant l'installation.
Dans le Workbench, menu File > New Query Tab.
Dans l'onglet créé, tapez
create database customer;
Lancez la commande en cliquant sur l'icône "Execute the selected portion of the script, or everything is there is no selection". La zone Output du bas devrez vous confirmer que tout s'est bien passé.
Lancez la commande (n'oubliez pas !)
use customer;
Il reste à créer les tables et à entrer les données. Pour cela, vous allez utiliser ce script.
Copiez le contenu du script et collez-le à la suite des 2 commandes que vous venez de taper.
Sélectionnez tout ce que vous venez de coller et cliquez sur la même icône "Execute the selected portion of the script, or everything is there is no selection". Vérifiez que tout s'est bien passé dans la zone Output.
Pour vous en assurer, tapez la requête
select name, discount.rate from customer join discount where customer.discount_code = discount.code;
Si vous savez le faire, créez un nouveau compte utilisateur et donnez-lui tous les droits sur la base customer (aide). Dans la suite et dans les TPs vous utiliserez ce compte, plutôt que root, pour vous connecter à MySQL. Si vous ne savez pas faire, vous utiliserez root (seulement pour des développements en local, à ne pas faire en production).
Si tout va bien, vous pouvez sortir de workbench, sinon corrigez les éventuelles erreurs.
Pour l'intégration de MySQL à NetBeans et à Payara vous avez besoin du driver JDBC de MySQL.
Normalement ce driver a été installé lors de l'installation de MySQL. Pour Windows, cherchez le fichier mysql-connector-java-8.0.32.jar (pour la version 8.0.32) à l'endroit où vous avez installé MySQL. C'est ce fichier que vous allez devoir copier pour intégrer MySQL à NetBeans et Payara. Sur mon ordinateur, le fichier était dans le répertoire "C:\Program Files (x86)\MySQL\Connector J 8.0".
Si vous ne le trouvez pas, il faudra relancer l'installeur et ajouter l'installation du Connecteur pour Java (Connector/J).
Ouvrez NetBeans et allez dans la fenêtre Services (si elle n'est pas déjà ouverte, ouvrez-la avec le menu Window > Services).
Ouvrez l'entrée Databases, vous devriez voir ceci (ouvrez l'entrée Drivers par un double clic si elle n'est pas ouverte) :
Pour le cas où vous n'auriez pas déjà une entrée MySQL.
Clic droit sur l'entrée "MySQL (Connector/J driver)" sous Drivers et choix de Customize. Vérifiez les informations : le fichier driver et la classe du driver. Si le fichier driver est manquant, cliquez sur Add et indiquez l'emplacement du fichier jar que vous avez récupéré à l'étape précédente :
Clic sur Next. Donnez le mot de passe de root (ou celui de l'utilisateur que vous avez créé quand vous avez créé la base de données customer). Vous pouvez choisir d'enregistrer le mot de passe ou non. Si vous ne l'enregistrez pas, il vous sera demandé à chaque connexion (ça serait plus sûr dans le cas où vous travailleriez avec des données sensibles).
Donnez customer comme base de données. Avec cette définition vous pourrez accéder avec ce driver à toutes les bases de données utilisées pendant les TPs, même celles qui ne s'appellent pas customer.
Inutile de modifier l'URL comme ci-dessous (c'était nécessaire pour des anciennes versions de MySQL).
Remarque : si, malgré tout, vous avez un message d'erreur du type
"The server time zone value '*********' is unrecognized or represents more than one" lors de la connexion avec la base de données MySQL, ajoutez le paramètre server Timezone avec, par exemple, la valeur UTC (comme dans l'image ci-dessous). En ce cas, ajoutez aussi ce paramètre dans la définition du pool de connexion, pour l'intégration à Payara.
Testez la connexion en cliquant sur "Test Connection". Vous devriez avoir le message "Connection Succeded" en bas de la fenêtre. Si un message d'erreur s'affiche, revoyez bien toutes les informations saisies ; vous avez dû faire une erreur.
Si jamais vous avez des problèmes de connexion après avoir oublié de lancer le service Windows pour MySQL (message d'erreur "Connection could not be allocated because: Public Key Retrieval is not allowed"), modifiez l'URL : jdbc:mysql://localhost:3306/mysql?zeroDateTimeBehavior=CONVERT_TO_NULL&allowPublicKeyRetrieval=true
Cliquez 2 fois sur Next. Vous pourrez modifier le nom de la connexion. Par exemple "MySQL8.0.25 (root)".
Après un clic sur Finish une nouvelle entrée a été ajoutée :
Ouvrez la sous-entrée customer placée sous l'entrée "Other databases". Si vous ouvrez Tables vous devriez voir les tables que vous avez créées dans cette base. S'il n'y a pas de de sous-entrées, clic droit sur la nouvelle connexion et "Connect...".
Juste pour tester, clic droit sur la table customer et "View Data...".
Pour les applications Jakarta EE, une base de données est représentée par une "source de données" qui peut être définie de plusieurs façons.
Le plus souvent les sources de données sont définies sur le serveur d'application pour des raisons de sécurité et pour faciliter leur utilisation par plusieurs applications. La définition dans l'application est plus souple et évite des manipulations dans le serveur d'application si on veut changer de serveur d'application. La définition d'une source de données n'est pas standardisée et elle est bien différente selon les serveurs d'application, alors que la définition dans l'application est standardisée.
Pour définir une source de données dans Payara (je le répète, cette procédure sera très différente si vous utilisez, par exemple le serveur WildFly ou le serveur Open Liberty), il faut utiliser la console d'administration ou la commande asadmin de Payara. Vous utiliserez la console d'administration.
Payara a besoin du driver JDBC de MySQL que vous avez récupéré auparavant.
Le fichier jar du driver doit être copié dans le répertoire lib
du domaine que vous utilisez. Ce répertoire fait partie du classpath utilisé par Payara pendant son exécution.
Si vous n'avez rien fait de spécial et si vous avez installé Payara dans le répertoire C:\autresprogrammes\payara\payara-6.xxx
, ça sera le répertoire C:\autresprogrammes\payara\payara-6.xxx\payara6\glassfish\domains\domain1\lib
.
Attention, si Payara est déjà démarré, il faut le redémarrer pour que le driver soit pris en compte.
Il faut commencer par lancer Payara comme c'est expliqué dans cette page.
La console d'administration peut s'afficher dans un navigateur de 2 façons :
Dans la console d'administration de Payara, allez dans l'entrée Resources > JDBC > JDBC Connection Pools et cliquez sur New pour ajouter un nouveau pool de connexions.
Entrez le nom du pool : mySQLPool (petite faute de frappe dans l'image ci-dessous), le type de ressource : javax.sql.DataSource
, le vendeur : MySql8 (attention, pas MySql).
Clic sur Next.
Le nom de la classe pour les sources de données (Datasource Classname) doit être com.mysql.cj.jdbc.MysqlDataSource
.
Descendez en bas de la nouvelle fenêtre (Additional Properties) pour modifier les valeurs des propriétés.
Le plus simple est de supprimer toutes les propriétés et d'ajouter les suivantes (attention à bien respecter les majuscules/minuscules) :
Cliquez ensuite sur Finish.
Dans la liste des pools de connexions, cliquez sur le pool que vous venez de créer et cliquez sur le bouton Ping. Vous devez voir "Ping Succeeded" en haut de la page. Sinon, lisez le message d'erreur et trouvez l'erreur que vous avez faite. Si vous modifiez des valeurs, n'oubliez pas de cliquer sur Save pour les sauvegarder.
Dans la console d'administration de Payara, clic sur JDBC Resources.
Clic sur New.
Saisissez ces valeurs :
JNDI Name : jdbc/customer
Pool Name : mySQLPool (le nom du pool que vous venez de créer)
Cliquez sur OK pour sauvegarder votre définition.
La façon que vous venez de voir ne permet pas l'automatisation et ça n'est donc pas la façon préférée des administrateurs système.
Voici une autre façon qui utilise la commande "asadmin" fournie par Payara (Ne la suivez pas car vous avez déjà créé le pool et la ressource JDBC) :
create-jdbc-connection-pool --datasourceclassname com.mysql.cj.jdbc.MysqlDataSource --restype javax.sql.DataSource --property portNumber=3306:user=****:password=****:databaseName=customer:serverName=localhost:useSSL=false:allowPublicKeyRetrieval=true:driverClass=com.mysql.cj.jdbc.Driver MySQLPool create-jdbc-resource --connectionpoolid MySQLPool jdbc/customer
Pour automatiser encore plus il suffit de réunir les 2 dernières commandes dans un fichier texte (nommons-le creationressource.txt) et de lancer (./admin si le séparateur de votre OS est "/")
.\asadmin --user admin multimode --file creationressource.txt