Java EE : TP 20.01 et 22.01

Exercice 0.

Faites les deux exercices de la semaine dernière, l'arc-en-ciel et l'échiquier. Le "spectre" est probablement plus facile de réaliser comme une simple page JSP. Le résultat montré (et voici ma version-test) :


n'est pas saturé, les couleurs mixtes sont "sales", le mélange du rouge et vert doit être jaune, mais puisque 50% du rouge et de vert, sans bleu, n'est pas clair, la couleur devient brunâtre ; le même se passe avec le cyan et avec le violet (magenta).

Afin d'avoir les couleurs claires, utilisez le graphique à droite. Ici la couleur est toujours saturée, une composante est toujours zéro, et une est au maximum.
Cet algorithme linéaire fait la différence importante entre les couleurs primaires (RGB) et secondaires (jaune, magenta, cyan) qui n'occupent pas la même proportion d'espace ; ceci peut être visuellement gênant, car l'oeil humain préfère un certain équilibre, et on peut faire mieux, mais nous ne pouvons pas y consacrer trop de temps...

De toute façon, on peut facilement obtenir le résultat ci-dessous si on se concentre.



L'exercice avec l'échiquier est un peu pénible, car la construction des boucles, conditionnelles, switches (choose / when / otherwise) à l'aide des balises JSTL n'est pas très naturelle pour les débutants, et les sectaires qui disent que c'est "absolument" préférable, que de mélanger HTML et le code Java, oublient que le code JSTL n'est pas HTML, il y a des contraintes syntaxiques différentes, et de plus, tout dynamisme demande l'usage des expressions EL : ${...}, ce qui ajoute encore une autre couche syntaxique à la page, et les restrictions peuvent être gênantes (par ex. pas de boucles avec les bornes dynamiques). Mais cet exercice doit être réalisé avec JSTL, pour l'entraînement, car dans quelques contextes c'est une solution populaire. Il n'est pas exclu que j'utiliserai cet assemblage graphique (l'échiquier avec les pièces positionnées dynamiquement) pour votre devoir sur les bases de données, donc faites-le et vite.

Observation supplémentaire concernant le "spectre"

Un de vous m'a rappelé que CSS permet l'usage direct de mode HSL, par ex : background-color:hsl(colonne,100%,50%) où la "colonne" couvre l'angle plein, de 0 à 360. On a besoin d'une simple boucle, pas besoin de la reconstruction de rgb(...). Merci, j'en ai oublié...
Ceci dit, j'insiste à ce que faites cet exercice en utilisant RGB. Il s'agit de faire un peu de calcul en Java sur une page JSP, avec Java ou JSTL. Le résultat visuel, c'est la cerise sur le gâteau, l'essentiel est votre discipline de programmation, donc ici la paresse ne joue aucun rôle positif [même si en général la paresse humaine peut être un moteur de progrès...]


Exercice 1A. (Bases de données, prise en main)

Tout d'abord, vérifiez si vous pouvez utiliser Derby sur vos machines. Souvent on trouve Java DB installé par défaut avec le Java JDK (.../db), et accessoirement l'installation du GlassFish (vous l'avez également...) le contient aussi. Mais, comme avec Tomcat, on peut y trouver des difficultés avec les configurations.

Si cela arrive, avant d'essayer de modifier votre configuration système, importez et installez Derby chez vous. Voir ce site, et installer db-derby-10.12.1.1-bin.zip ou .tar.gz, selon votre système.

Le tutoriel Apache a vieilli, mais il est toujours utilisable. Un autre tutoriel, de José Paumard, est plus général, et vous donnera quelques infos sur d'autres BD.

L'installation se réduit au décompactage dans un dossier (33 Moctets), qui contient les sous-folders bin, demo, doc, etc. Dans bin vous trouverez la console ij, et les scripts de démarrage/arrêt du serveur. Les jars se trouvent dans le dossier lib. Vous aurez surtout besoin de deux : le pilote embarqué, et le pilote client/serveur ; les liens vers les jars correspondants doivent être placés dans "Libraries" de votre projet NB, quand vous commencez à programmer. Si vous voulez, déclarez la variable d'environnement DERBY_HOME. La console ij doit être accessible dans d'autres dossiers d'intérêt.

Dans .../docs vous trouverez toute documentation indispensable, en particulier : .../Derby/demo/programs/readme.html, avec les liens vers la doc en ligne. Dans le dossier demo il y a une base-exemple : toursdb. Pour cette raison, je trouve utile d'importer et d'installer Derby chez vous, même si le paquetage se trouve déjà dans le système, sauf si vous le trouvez complet et commode à utiliser. Lancez ij et connectez-vous à toursdb en mode "embedded". Faites un minimum de vérification : SHOW TABLES; ou/et SELECT * FROM FLIGHTS, etc. (N'oubliez pas que NetBeans vous offre l'interface-clent des BD SQL). Déconnectez la base, sinon les accès des autres clients seront bloqués.

Dans NetBeans, onglets Services/Databases, effacez - si besoin - le gestionnaire Derby par défaut, et attachez le vôtre. Déclarez l'endroit où se trouvent vos bases de données (commencez par l'équiv. de ce qui est chez moi : Database location: C:\DBases\Derby\demo\databases pour les tests, plus tard vous y déclarerez ce que vous voudrez). Connectez-vous à toursdb en mode embedded, et si cela marche : démarrez le serveur, connectez-vous à toursdb en mode client, testez l'affichage, et aussi la création d'une simple BD.

Un exemple concret.

Mais on ne travaillera avec toursdb... Eclipse est distribué avec BIRT, un projet de gestion de visualisations des données, intégrable dans des projets Java EE (parmi d'autres). Un jour ceci vous peut être utile. Importez de la page "downloads" le paquetage "Demo Database" target="_blank" ; je l'ai importé localement : birt-database-4.5.0-20150609.zip. Décompactez-le, ceci créé le dossier ClassicModels.

Ceci n'est bas une BD, mais un paquetage qui vous permettra sa construction. Entrez dans le sous-répertoire .../ClassicModels/derby , lancez ij, et créez/connectez depuis ce répertoire une BD appelée BirtSample. Ensuite exécutez (run) les deux scripts : create_classicmodels.sql [qui créé la structure et la BD vide] et load_classicmodels.sql, ce qui peuple une BD derby complète, relativement simple, utilisée dans l'exercice suivant. Fermez la console, déplacez la totalité de BirtSample là où vous voulez, et ouvrez cette BD depuis NetBeans, avec le pilote "embedded", comme auparavant toursdb. Les tables intéressantes doivent se trouver sous le schéma APP qui devrait être de préférence déclaré comme le schéma par défaut.

Appelez-moi, si le processus se bloque pour une raison quelconque.


Exercice 1B. Bases de données et applications Web

Construisez une simple application Web qui lit depuis un formulaire sur la page d'accueil le nom d'une table de notre base ; ceci peut être le choix dans une liste déroulante, avec les noms présents dans BirtSample : customers, employees, offices, ... etc. Si vous ouvrez la BD dans NetBeans, ou dans un autre client universel, par ex. Squirrel, vous récupérez les noms des tables dedans. Dans le pire des cas, vous ouvrez BirtSample dans ij, et demandez SHOW TABLES.

La page JSP ou servlet qui récupère ce paramètre, affiche le contenu complet de la table en question sur la page-réponse. Je vous demande de faire deux versions de la page qui récupère le nom de la table, et qui formate la réponse : une JSP classique, avec du code Java avec des boucles Java et les méthodes d'accès / SQL en Java, et une autre, uniquement avec JSTL, avec les couches CORE et SQL. Je vous présenterai quelques consignes oralement, et je répondrai à toute question raisonnable.

En Java commencez par exemple par la technique montrée en cours :

Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance(); // Ceci est obsolète...
conn = DriverManager.getConnection("jdbc:derby:C:/DBases/BirtSample");
...
Le reste, le décodage du paramètre, la sélection, etc. ... SVP dépensez 15 min. de votre temps pour lire mon cours et la doc. Le formatage à l'aide du JSTL demandera la connaissance des méthodes de ResultSet, et également un peu sur les métadonnées du ResultSet, afin de récupérer les noms de colonnes d'une table quelconque.


Solutions (peut-être).

Retour
Semaine suivante