Projet JavaEE EMSI Casablanca 2013-2014

De $1

Version de 19:51, 16 Avr 2024

cette version.

Revenir à liste des archives.

Voir la version actuelle

Introduction

Vous connaissez Deezer, Spotify, GrooveShark etc ? Ce sont des services qui permettent d'écouter de la musique en streaming. Vous allez faire pareil:

  • Chez vous, vous avez un serveur glassfish qui tourne, avec votre fantastique site web privé, réservé à vous et à vos amis, qui permet, en se connectant sur un URL de type http://monsiteweb.ma/musique, d'afficher un site web permettant de visualiser votre collection de chansons, et en cliquant sur une chanson, de l'écouter en streaming.
     
  • Bien entendu, il n'y a pas trois chansons, mais quelques centaines, et il est possible de naviguer dans la collection par chanson, par artiste, par album, par genre, par année, etc.
     
  • Il est aussi possible de rechercher une chanson en tapant quelques mots de son titre, de trier les résultats visualisés dans des tables en cliquant sur les colonnes, etc.
     
  • Le site ne sera accessible qu'après s'être identifié par un login / password. Taper un URL sans être identifié devra renvoyer inexorablement vers la page de connexion. Vous devrez gérer dans une session le fait que l'utilisateur est connecté ou pas, et utiliser la technique vue dans le projet de gestion du login / password proposé dans la page principale du cours (on n'affiche rien si on est pas connecté, à part le formulaire login/password)
     
  • Seul l'administrateur peut créer des comptes, ou lancer un scan des morceaux pour initialiser la base de données.
     
  • La base de données est créée en scannant récursivement tous les dossiers qui contiennent des morceaux, en extrayant à l'aide d'une librairie spécialisée (à trouver sur internet) les tags Id3 des morceaux de musique. Une fois les tags extraits, la base sera remplie.
     
  • Un utilisateur devra pouvoir créer des playlistes, leur donner un nom, et organiser les morceaux à l'intérieur (ordre, tri, etc).
     
  • BIEN ENTENDU IL FAUT POUVOIR ECOUTER LES CHANSONS, pas question d'avoir juste des données sur la page, il en faut aussi pour les oreilles! Pour cela les morceaux de musique seront déposés dans le docroot de glassish (à la racine du domaine). Avant toute chose déposez un mp3 à cet endroit, puis tapez localhost:8080/toto.mp3 et vérifiez bien que ça streame le son.

Fonctionnalités minimales attendues:

  • Accès par login /password,
     
  • Template basique avec menu à gauche et connexion/deconnexion dans le header en haut des pages,
     
  • Au moins 300 chansons, utilisation du lazy loading dans les datatables,
  • Recherche multicritère,
     
  • navigation par facettes: j'ai le tableau des chansons, avec titre, artiste, année, genre, je dois pouvoir cliquer sur n'importe quel élément pour avoir un tableau de tous les morceaux de l'artiste, du genre, de l'année, etc.
     
  • On doit pouvoir écouter les morceaux.
     
  • Gestion minimale de playliste: ajouter/supprimer des morceaux à une playliste, les écouter.
     
  • Utiliser au moins 7 ou 8 nouveaux composants primefaces non vus en cours.

Fonctionalités facultatives/avancées:

  • Pouvoir organiser la playliste: ordre des morceaux, 
     
  • Que ca enchaine les morceaux en cas de lecture de playliste,
     
  • Que ca affiche les pochettes des albums dans la vue par albums, y'a des composants sympas primefaces pour ça (fisheye, etc.)
     
  • Que ça affiche la biographie des artistes en allant la chercher sur des APIs de musique comme MusicBrainz, on peut aussi choper les pochettes directement sur des web services...
     
  • Partage des playlistes entre utilisateurs (on peut lister les autres utilisateurs et proposer à un autre de voir sa playliste, le top: l'autre utilisateur est prévenu quand il se connecte : "michel buffa a préparé une playlist pour vous", vous pouvez l'écouter).
     
  • Autres, je vous laisse le choix...

Conseils de développement

  • Vous n'êtes pas experts dans les technologies que vous allez utiliser, donc procéder incrémentalement:
  1. Tester le remplissage de la base de données: on commence par faire un prpgramme Java tout bête (avec un main) qui scanne des mp3 et fait des println des différents tags récupérés, on regarde si tout va bien.
     
  2. On met ce code dans un Stateless Session Bean, on fait un managed bean tout bête avec une fonction scan() qui appelle la fonction scan() de l'EJB, on fait une page xhtml toute bête qui appelle la méthode scan() du managed bean. On teste en cliquant sur le bouton dans la page, on regarde la console de glassfish, ça doit afficher le résultat des println. Pour que ça marche penser à mettre les mp3 à scanner dans le docroot du domaine de glassfish.
     
  3. Ok, maintenant on va réfléchir au modèle de données. On va commencer par juste faire une table pour les morceaux, avec des colonnes id, titre, artiste, etc Pourle moment vous ne faites qu'une table, on verra plus tard pour les relations. NE CREEZ PAS LA TABLE, écrivez la classe Morceau.java qui est une entity, écrivez un bean stateless MorceauFacade.java avec une méthode construireBD(). Rajoutez un bouton dans votre page xhtml, une méthode dans le backing bean qui appelle cet EJB. Testez et vérifiez que la table a été construite et les lignes insérées. Tant que vous n'avez pas cette partie qui fonctionne ça ne sert à rien d'aller plus loin.
     
  4. Je serai vous je ne modifierai pas le modèle de données pour le moment (une table pour un morceau suffira bien qu'on puisse faire déjà des relations morceau-artiste-genre-annee etc.). Ajoutez une méthode getAllMorceaux(start, max) dans le bean MorceauFacade, et débrouillez vous pour avoir une datatable dans une page MorceauList.xhtml qui affiche convenablement les morceaux. Ensuite regardez la doc de primefaces ou le projet d'exemple BanqueGoualmy à la fin du TP3, pour implémenter le lazy loading afin que si on a des milliers de morceaux on puisse faire des reqêtes paginées.
     
  5. Bon, maintenant, vous allez rajouter des liens sur les données affichées dans la datatable. Si on clique sur un artiste, on va appeler une méthode dans le backing bean qui va appeler une méthode dans le bean MorceauFacade, la méthode getMorceauxParArtiste(Artiste a, start, max), qui va renvoyer la collection de morceaux de l'artiste concerné. Là aussi on fait du lazy loading et de la pagination.
     
  6. idem pour les genres, pour l'année, etc.
     
  7. Vous pourrez rajouter des tris et des champs de recherche comme dans le TP1.
     
  8. Maitenant on va s'attaquer à la lecture des morceaux. Regardez les démos primefaces pour les composants multimedia permettant de lire des mp3. Vous allez trouver! Rajoutez donc un lecteur audio qui sera appelé quand on clique sur un morceau, pour l'écouter.
     
  9. Allez, on va regarder les playlistes maintenant. Réflechissez au modèle de données, il y a forcément des relations entre la table des playlists et les morceaux, il va falloir ajouter un index pour pouvoir numéroter les positions dans la playlist, trier en fonction de cet index pour afficher les morceaux dans l'ordre etc. Relisez bien le cours sur les relations, sur comment trier les relations, etc.
     
  10. Ecrivez donc un entity Playliste.java, un bean façade PlayListFacade() qui contiendra les fonctionnalités sur les playlistes: creerPlayliste(), ajouterMorceau(), getMorceaux(), etc.
     
  11. Ajoutez une méthode "creePlayListDeTest()" qui va créer une playliste juste pour vérifier que tout est cohérent. Vérifier dans les tables que c'est bon.
     
  12. Maitenant, créez une interface (backing bean + page xhtml) pour la visualiser et travailler dessus, ajouter et supprimer des morceaux, etc... Y'a du boulot, la gestion des playliste est qulque chose de difficile à réaliser.
     
  13. Une fois que tout a été fait, intégrez donc la gestion des playlistes dans l'interface graphique principale. 
     
  14. Ajoutez la gestion des utilisateurs et de l'admin. Rappel: on a vu l'héritage, donc pourquoi pas une classe entité Utilisateur et une sous Classe Admin ? Pensez à faire un bean façade.
     
  15. Ajoutez tant qu'à faire un bean InitBD comme vu en cours, pour que dès le déploiement de l'application il y a ait quelques comptes utilisateurs et un compte admin de créé dans la base. Vous utiliserez un bean stateless @Singleton @Startup et une méthode initBD() précédée par un @PostConstruct. Il y a sur la page principale du cours un projet d'exemple qui montre comment ça marche ce type de bean.
     
  16. Vous ajouterez les relations utilisateur-playliste et ajouterez de la fonctinalité.
     
  17. En parallèle, ou à la fin vous pourrez mettre un joli template pour embellir tout cela. Il y a des templates primefaces avec des thèmes, ou bien vous pourrez faire un template simple comme dans la deuxième partie du TP2.