Atelier Framework Web Côté Serveur
TP N° 2
Les Bases de Symfony
Objectifs
• Découvrir l’architecture d’un projet Symfony et son principe de fonctionnement,
• Découvrir la structure des fichiers PHP sous Symfony (namespace, Class, use, …)
• Créer un Bundle et découvrir son architecture,
• Découvrir les Contrôleurs et les Routes.
Clairement dans cette version, nous assistons à une volonté de simplification. Plus de lisibilité du code, plus d’outils pour ne plus avoir à perdre de temps sur des opérations simples et courantes, pour au final un code de meilleur qualité et plus accessible. La plupart de ces améliorations se trouvent dans cette présentation.
Atelier Framework Web Côté Serveur
TP N° 2
Les Bases de Symfony
Objectifs
• Découvrir l’architecture d’un projet Symfony et son principe de fonctionnement,
• Découvrir la structure des fichiers PHP sous Symfony (namespace, Class, use, …)
• Créer un Bundle et découvrir son architecture,
• Découvrir les Contrôleurs et les Routes.
Clairement dans cette version, nous assistons à une volonté de simplification. Plus de lisibilité du code, plus d’outils pour ne plus avoir à perdre de temps sur des opérations simples et courantes, pour au final un code de meilleur qualité et plus accessible. La plupart de ces améliorations se trouvent dans cette présentation.
Apache Mina is a simple-to-use TCP/IP communications framework that allows for network application development. It provides an object-oriented framework for developing asynchronous network applications, simplifying network programming by handling low-level socket programming tasks. The project's homepage is http://mina.apache.org/.
Apache MINA2 is a Java open-source network application framework that provides an asynchronous, non-blocking infrastructure for developing network applications. It features reusable and extensible components like IoSession for connections, IoService for servers/clients, IoFilters for cross-cutting concerns, and ProtocolCodecFilters for encoding network protocols. MINA supports various network protocols and data types and provides an elegant way to build scalable and manageable network applications.
Apache MINA is an open source Java network application framework that can be used to create scalable, high-performance network applications. It shields application developers from low-level I/O details by handling I/O internally using APIs while allowing developers to focus on application logic. MINA supports asynchronous, event-driven communication over various transports like TCP/IP and UDP/IP. It provides a unified API and is highly customizable with its thread model. Unit testing is also supported through mock objects. The document demonstrates a simple echo server implementation using MINA that requires only 4 lines of code and is multithreaded and extensible.
Rapid Network Application Development with Apache MINAtrustinlee
The document is a presentation about the Apache MINA framework. It summarizes that Apache MINA is a Java open-source network application framework that allows developers to easily build scalable, stable, and manageable network applications using any protocol. It provides core components like IoSession for connections, IoBuffer for message handling, IoHandlers for business logic, and IoFilters for cross-cutting concerns. It also supports integration with JMX for runtime management and has future plans to improve performance and expand protocol support.
Nio sur Netty par Mouhcine Moulou - 3 avril 2014SOAT
La vidéo de cette conférence est visible ici : http://youtu.be/T7r7UlSoe7k
La croissance continue du Web a accru la nécessité pour les applications Client/serveur de gérer la monté en charge et la performance. Heureusement, Java est livré avec les outils nécessaires pour créer des applications performantes, et scalables ! Les premières versions de Java incluent le support des communications réseau avec la jdk 1.4 qui a introduit l'API NIO. La nouvelle version, NIO 2, introduite dans Java 7, a été conçue pour permettre l'écriture asynchrone en réseau, Aujourd'hui, encore peu de gens s'intéressent au développement d'applications réseaux, car l'API Jdk reste complexe.
Netty est une bibliothèque Java pour l'écriture d'applications et de services réseau hautement concurrent et scalable. Netty est une API complétement asynchrone : l'Api vous propose une nouvelle façon de développer vos applications réseau en assurant un découplage entre votre logique métier et les traitements réseau grâce à son modèle basé sur une architecture "event-driven".
Dans cette conférence, vous comprendrez l'architecture de Netty, et comment des entreprises comme Twitter, Facebook, RedHat et autres l'utilisent pour répondre à leurs problématiques de communication réseau.
- le niveau : développeurs Java débutants et expérimentés
- la durée : 2h
Building High Performance Scalable TCP/IP Servers with Apache MINAelliando dias
This document provides an overview of Apache MINA, an asynchronous I/O framework for building scalable TCP/IP servers. It discusses MINA's architecture including key components like IoHandlers, IoFilters, and IoProcessors. It demonstrates converting a blocking I/O code sample to use MINA. Performance is improved with MINA as it allows scaling to utilize multiple CPU cores. Various MINA-based projects are also highlighted.
Objectif général : Prendre en main l’un des frameworks PHP les plus utilisés
Objectifs spécifiques
Faire correspondre une URL donnée à un traitement précis grâce au routage
Regrouper des traitements connexes grâce aux contrôleurs
Récupérer les données d’une requête http grâce à Request
Retourner des contenus aux formats texte, HTML, JSON, etc. grâce à Response
Intégrer des données dans des templates grâce à Blade
Interagir avec l’utilisateur grâce aux formulaires
Créer, mettre à jour et suivre les évolutions d’un schéma de base de données grâce aux migrations
Faciliter la communication avec une base de données grâce à Eloquent
Programmation Android - 09 - Web servicesYann Caron
Voici le cours sur android que j'enseigne à l'ENSG
Retrouvez tous le cours et le TP sur GitHub :
https://github.com/YannCaron/Android-ENSG
Si vous avez des besoin en formation, n'hésitez pas à me contacter : CyaNn (at) gmail (dot) com
MarsJUG - Le classpath n'est pas mort, mais presqueAlexis Hassler
En 2009, la mort du classpath a été annoncée. Les classloaders à plat ou hiérarchiques devaient être remplacés par des systèmes modulaires et tous nos problèmes de dépendances devaient se résoudre d'eux-même. Quatre ans plus tard, le classpath vit toujours et pour quelques années encore.
Dans la première partie de cette session, nous reviendrons sur le fonctionnement des classloaders du JDK et les problèmes infernaux posés par le classpath. Nous verrons aussi comment les serveurs d'applications, comme Tomcat, gèrent leur classloaders de façon hiérarchique, afin d'isoler les applications entre elles.
Dans la deuxième partie, nous parlerons de modularité et de son impact sur la gestion des dépendances, à l'exécution des applications. Des solutions existent déjà, comme OSGi et Jigsaw, d'autres émergent, comme JBoss Modules. Nous vous montrerons comment ce dernier fonctionne, dans JBoss AS 7, en autonome, ou même dans Tomcat.
Apache Mina is a simple-to-use TCP/IP communications framework that allows for network application development. It provides an object-oriented framework for developing asynchronous network applications, simplifying network programming by handling low-level socket programming tasks. The project's homepage is http://mina.apache.org/.
Apache MINA2 is a Java open-source network application framework that provides an asynchronous, non-blocking infrastructure for developing network applications. It features reusable and extensible components like IoSession for connections, IoService for servers/clients, IoFilters for cross-cutting concerns, and ProtocolCodecFilters for encoding network protocols. MINA supports various network protocols and data types and provides an elegant way to build scalable and manageable network applications.
Apache MINA is an open source Java network application framework that can be used to create scalable, high-performance network applications. It shields application developers from low-level I/O details by handling I/O internally using APIs while allowing developers to focus on application logic. MINA supports asynchronous, event-driven communication over various transports like TCP/IP and UDP/IP. It provides a unified API and is highly customizable with its thread model. Unit testing is also supported through mock objects. The document demonstrates a simple echo server implementation using MINA that requires only 4 lines of code and is multithreaded and extensible.
Rapid Network Application Development with Apache MINAtrustinlee
The document is a presentation about the Apache MINA framework. It summarizes that Apache MINA is a Java open-source network application framework that allows developers to easily build scalable, stable, and manageable network applications using any protocol. It provides core components like IoSession for connections, IoBuffer for message handling, IoHandlers for business logic, and IoFilters for cross-cutting concerns. It also supports integration with JMX for runtime management and has future plans to improve performance and expand protocol support.
Nio sur Netty par Mouhcine Moulou - 3 avril 2014SOAT
La vidéo de cette conférence est visible ici : http://youtu.be/T7r7UlSoe7k
La croissance continue du Web a accru la nécessité pour les applications Client/serveur de gérer la monté en charge et la performance. Heureusement, Java est livré avec les outils nécessaires pour créer des applications performantes, et scalables ! Les premières versions de Java incluent le support des communications réseau avec la jdk 1.4 qui a introduit l'API NIO. La nouvelle version, NIO 2, introduite dans Java 7, a été conçue pour permettre l'écriture asynchrone en réseau, Aujourd'hui, encore peu de gens s'intéressent au développement d'applications réseaux, car l'API Jdk reste complexe.
Netty est une bibliothèque Java pour l'écriture d'applications et de services réseau hautement concurrent et scalable. Netty est une API complétement asynchrone : l'Api vous propose une nouvelle façon de développer vos applications réseau en assurant un découplage entre votre logique métier et les traitements réseau grâce à son modèle basé sur une architecture "event-driven".
Dans cette conférence, vous comprendrez l'architecture de Netty, et comment des entreprises comme Twitter, Facebook, RedHat et autres l'utilisent pour répondre à leurs problématiques de communication réseau.
- le niveau : développeurs Java débutants et expérimentés
- la durée : 2h
Building High Performance Scalable TCP/IP Servers with Apache MINAelliando dias
This document provides an overview of Apache MINA, an asynchronous I/O framework for building scalable TCP/IP servers. It discusses MINA's architecture including key components like IoHandlers, IoFilters, and IoProcessors. It demonstrates converting a blocking I/O code sample to use MINA. Performance is improved with MINA as it allows scaling to utilize multiple CPU cores. Various MINA-based projects are also highlighted.
Objectif général : Prendre en main l’un des frameworks PHP les plus utilisés
Objectifs spécifiques
Faire correspondre une URL donnée à un traitement précis grâce au routage
Regrouper des traitements connexes grâce aux contrôleurs
Récupérer les données d’une requête http grâce à Request
Retourner des contenus aux formats texte, HTML, JSON, etc. grâce à Response
Intégrer des données dans des templates grâce à Blade
Interagir avec l’utilisateur grâce aux formulaires
Créer, mettre à jour et suivre les évolutions d’un schéma de base de données grâce aux migrations
Faciliter la communication avec une base de données grâce à Eloquent
Programmation Android - 09 - Web servicesYann Caron
Voici le cours sur android que j'enseigne à l'ENSG
Retrouvez tous le cours et le TP sur GitHub :
https://github.com/YannCaron/Android-ENSG
Si vous avez des besoin en formation, n'hésitez pas à me contacter : CyaNn (at) gmail (dot) com
MarsJUG - Le classpath n'est pas mort, mais presqueAlexis Hassler
En 2009, la mort du classpath a été annoncée. Les classloaders à plat ou hiérarchiques devaient être remplacés par des systèmes modulaires et tous nos problèmes de dépendances devaient se résoudre d'eux-même. Quatre ans plus tard, le classpath vit toujours et pour quelques années encore.
Dans la première partie de cette session, nous reviendrons sur le fonctionnement des classloaders du JDK et les problèmes infernaux posés par le classpath. Nous verrons aussi comment les serveurs d'applications, comme Tomcat, gèrent leur classloaders de façon hiérarchique, afin d'isoler les applications entre elles.
Dans la deuxième partie, nous parlerons de modularité et de son impact sur la gestion des dépendances, à l'exécution des applications. Des solutions existent déjà, comme OSGi et Jigsaw, d'autres émergent, comme JBoss Modules. Nous vous montrerons comment ce dernier fonctionne, dans JBoss AS 7, en autonome, ou même dans Tomcat.
The document introduces Tugdual Grall, a technical evangelist from Couchbase, and provides an agenda for his presentation on NoSQL and Couchbase Server 2.0. The agenda includes discussing why NoSQL is needed, the NoSQL landscape, document design, use cases, and an introduction to Couchbase Server 2.0. Trends like big data, cloud computing, and more data-driven mobile users are driving disruption of the database market and increased adoption of NoSQL technologies.
The document discusses using Lombok and Guava annotations and utilities to simplify Java code by automatically generating boilerplate code like getters, setters, toString methods. It provides an example of how Lombok reduces a Dog class from 210 lines to just 12 lines by adding annotations, and shows how Guava provides cleaner implementations of common methods like toString and equals.
JMS (Java Message Services) est une API qui permet aux applications Java de s'échanger des messages asynchrones par le biais d'un MOM (Message Orieneted Middleware). Cette session passera en revue l'API Java Message Services et présentera quelques retours d'expérience sur sa mise en œuvre.
Bonita Open Solution est la première solution Open Source complète de Business Process Management (BPM). Basée sur un moteur de workflow robuste, elle fournit tout l'outillage nécessaire pour créer efficacement des applications d’automatisation de processus métier, avec tous les bénéfices de l'approche BPM et une forte connectivité avec les systèmes d'informations existants.
Cette présentation introduira d'abord le concept du BPM et ses objectifs, puis une démonstration de Bonita Open Solution montrera comment elle peut être utilisée pour implémenter des applications métier. Ensuite, nous étudierons les choix et l'architecture techniques et nous verrons comment Bonita tire parti de technologies bien connues et efficaces (Eclipse RCP, Goolge Web Toolkit, Hibernate, Groovy...). Nous pourrons même donner quelques détails sur la manière dont l'équipe de Bonita utilise Scrum pour gérer le cycle de développement du produit.
Par Aurélien Pupier
GWT allows developers to create AJAX applications using Java instead of JavaScript. It provides a Java compiler that translates Java code into optimized JavaScript that can run across browsers. Key features include easy RPC, JSON handling, debugging, internationalization, and reuse of custom widgets. Some myths are that GWT is only for Java programmers or that it only works with Java backends, but it can integrate with any server technology and lower the barrier to AJAX development.
This document provides an overview and agenda for a presentation on Java EE 6 and GlassFish v3. Key points include:
- Java EE 6 and GlassFish v3 were final releases in December 2009.
- The presentation will provide an overview of the new Java EE 6 specifications and demos of JPA 2.0, Servlet 3.0, EJB 3.1, JSF 2.0, and more.
- The speakers are experts on Java EE and GlassFish with experience at Sun Microsystems and as authors and conference speakers.
- The agenda includes deep dives on the major Java EE 6 specifications and building a sample web application using many of the new features.
Comment concilier Agilité et projet au forfait ?Lorraine JUG
La gestion de projet Agile à capacité à devenir un mode privilégié de production de logiciel dans les prochaines années. Il donne une excellente visibilité sur la réalisation, et concentre les vecteurs de qualité sur le produit plutôt que sur les procédures.
Mais dans le cadre d’une sous-traitance du développement informatique, la gestion de projet agile se heurte naturellement à la notion de contrat forfaitaire. Au travers de 2 retours d’expériences de projets menés en Scrum je vous montre comment le forfait classique handicape l’agilité, mais aussi comment on peut réussir sur la base de nouveaux types de contrats.
Par Jean-François Jagodzinski
This document discusses how to foster continuous improvement through retrospectives. It begins with an agenda that covers why continuous improvement matters, what retrospectives are, and how to run them. It then discusses concepts like kaizen and gemba walks for improvement. Retrospectives are presented as an important tool for iterative development. Effective facilitation, structure, and participation are emphasized. Sample exercises and anti-patterns to avoid are provided. The document concludes by introducing a "retrospective cookbook" with additional techniques.
Montrer la mécanique de Scrum en l'appliquant à la session elle-même. Comme cette mécanique est mise en œuvre avec iceScrum, la session permet également de présenter un outil Open Source dédié à Scrum. Le backlog utilisé contient des sujets autour de Scrum et de l’agilité. C’est interactif : les participants sont invités à proposer des sujets pour compléter le backlog initial défini par les animateurs, à choisir ceux qui les intéressent le plus et à dire si un sujet (une "story") est terminé.
Par Claude Aubry (Aubry Conseil) & Vincent Barrier (iceScrum Technologies)
Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)Laurent Speyser
(Conférence dessinée)
Vous êtes certainement à l’origine, ou impliqué, dans un changement au sein de votre organisation. Et peut être que cela ne se passe pas aussi bien qu’attendu…
Depuis plusieurs années, je fais régulièrement le constat de l’échec de l’adoption de l’Agilité, et plus globalement de grands changements, dans les organisations. Je vais tenter de vous expliquer pourquoi ils suscitent peu d'adhésion, peu d’engagement, et ils ne tiennent pas dans le temps.
Heureusement, il existe un autre chemin. Pour l'emprunter il s'agira de cultiver l'invitation, l'intelligence collective , la mécanique des jeux, les rites de passages, .... afin que l'agilité prenne racine.
Vous repartirez de cette conférence en ayant pris du recul sur le changement tel qu‘il est généralement opéré aujourd’hui, et en ayant découvert (ou redécouvert) le seul guide valable à suivre, à mon sens, pour un changement authentique, durable, et respectueux des individus! Et en bonus, 2 ou 3 trucs pratiques!
Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...OCTO Technology
Par Nicolas Bordier (Consultant numérique responsable @OCTO Technology) et Alaric Rougnon-Glasson (Sustainable Tech Consultant @OCTO Technology)
Sur un exemple très concret d’audit d’éco-conception de l’outil de bilan carbone C’Bilan développé par ICDC (Caisse des dépôts et consignations) nous allons expliquer en quoi l’ACV (analyse de cycle de vie) a été déterminante pour identifier les pistes d’actions pour réduire jusqu'à 82% de l’empreinte environnementale du service.
Vidéo Youtube : https://www.youtube.com/watch?v=7R8oL2P_DkU
Compte-rendu :
Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...OCTO Technology
par Claude Camus (Coach agile d'organisation @OCTO Technology) et Gilles Masy (Organizational Coach @OCTO Technology)
Les équipes infrastructure, sécurité, production, ou cloud, doivent consacrer du temps à la modernisation de leurs outils (automatisation, cloud, etc) et de leurs pratiques (DevOps, SRE, etc). Dans le même temps, elles doivent répondre à une avalanche croissante de demandes, tout en maintenant un niveau de qualité de service optimal.
Habitué des environnements développeurs, les transformations agiles négligent les particularités des équipes OPS. Lors de ce comptoir, nous vous partagerons notre proposition de valeur de l'agilité@OPS, qui embarquera vos équipes OPS en Classe Business (Agility), et leur fera dire : "nous ne reviendrons pas en arrière".
L'IA connaît une croissance rapide et son intégration dans le domaine éducatif soulève de nombreuses questions. Aujourd'hui, nous explorerons comment les étudiants utilisent l'IA, les perceptions des enseignants à ce sujet, et les mesures possibles pour encadrer ces usages.
Constat Actuel
L'IA est de plus en plus présente dans notre quotidien, y compris dans l'éducation. Certaines universités, comme Science Po en janvier 2023, ont interdit l'utilisation de l'IA, tandis que d'autres, comme l'Université de Prague, la considèrent comme du plagiat. Cette diversité de positions souligne la nécessité urgente d'une réponse institutionnelle pour encadrer ces usages et prévenir les risques de triche et de plagiat.
Enquête Nationale
Pour mieux comprendre ces dynamiques, une enquête nationale intitulée "L'IA dans l'enseignement" a été réalisée. Les auteurs de cette enquête sont Le Sphynx (sondage) et Compilatio (fraude académique). Elle a été diffusée dans les universités de Lyon et d'Aix-Marseille entre le 21 juin et le 15 août 2023, touchant 1242 enseignants et 4443 étudiants. Les questionnaires, conçus pour étudier les usages de l'IA et les représentations de ces usages, abordaient des thèmes comme les craintes, les opportunités et l'acceptabilité.
Résultats de l'Enquête
Les résultats montrent que 55 % des étudiants utilisent l'IA de manière occasionnelle ou fréquente, contre 34 % des enseignants. Cependant, 88 % des enseignants pensent que leurs étudiants utilisent l'IA, ce qui pourrait indiquer une surestimation des usages. Les usages identifiés incluent la recherche d'informations et la rédaction de textes, bien que ces réponses ne puissent pas être cumulées dans les choix proposés.
Analyse Critique
Une analyse plus approfondie révèle que les enseignants peinent à percevoir les bénéfices de l'IA pour l'apprentissage, contrairement aux étudiants. La question de savoir si l'IA améliore les notes sans développer les compétences reste débattue. Est-ce un dopage académique ou une opportunité pour un apprentissage plus efficace ?
Acceptabilité et Éthique
L'enquête révèle que beaucoup d'étudiants jugent acceptable d'utiliser l'IA pour rédiger leurs devoirs, et même un quart des enseignants partagent cet avis. Cela pose des questions éthiques cruciales : copier-coller est-il tricher ? Utiliser l'IA sous supervision ou pour des traductions est-il acceptable ? La réponse n'est pas simple et nécessite un débat ouvert.
Propositions et Solutions
Pour encadrer ces usages, plusieurs solutions sont proposées. Plutôt que d'interdire l'IA, il est suggéré de fixer des règles pour une utilisation responsable. Des innovations pédagogiques peuvent également être explorées, comme la création de situations de concurrence professionnelle ou l'utilisation de détecteurs d'IA.
Conclusion
En conclusion, bien que l'étude présente des limites, elle souligne un besoin urgent de régulation. Une charte institutionnelle pourrait fournir un cadre pour une utilisation éthique.
OCTO TALKS : 4 Tech Trends du Software Engineering.pdfOCTO Technology
En cette année 2024 qui s’annonce sous le signe de la complexité, avec :
- L’explosion de la Gen AI
-Un contexte socio-économique sous tensions
- De forts enjeux sur le Sustainable et la régulation IT
- Une archipélisation des lieux de travail post-Covid
Découvrez les Tech trends incontournables pour délivrer vos produits stratégiques.
OCTO TALKS : 4 Tech Trends du Software Engineering.pdf
NIO 2
1.
2. Qui suis-je ?
Architecte logiciel Java/.Net
Auteur de deux didacticiels diffusés sous la licence GNU
FDL : http://www.jmdoudoux.fr
Développons en Java (2330 pages)
Développons en Java avec Eclipse (600 pages)
Rédacteur pour developpez.com,
Membre du Yajug et du CA du Lorraine Jug
2
3. Plan
NIO2
FileSystem API
Lectures/écritures : API mises à jour
Canaux asynchrones (Asynchronous I/0)
Conclusion
3
5. Les défauts de java.io
Le manque d’opérations basiques (copie,
déplacement de fichiers, …)
Ne fonctionne pas de la même manière sur
toutes les plateformes
Support limité des liens symboliques et des
méta-données
…
5
6. Les défauts de la classe File
Encapsule le chemin et les opérations
Gestion de certaines erreurs : certaines
méthodes renvoient un booléen sans lever
d’exceptions (delete() par exemple)
Manque de performance de certaines méthodes
notamment listFiles()
…
=> besoin d’une nouvelle API
6
8. NIO 2
JSR 203 : ajout de nouvelles API au package NIO
Accès et manipulation du système de fichiers
Mise à jour de l’API existante
Canaux asynchrones (asynchronous channels)
Inclus dans Java SE 7
8
10. FileSystem API
API moderne, complète et extensible
Package java.nio.file et sous packages
Accès et gestion des systèmes de fichiers
(fichiers, répertoires, liens symboliques)
Support des méta-datas
Parcours des répertoires
Extensible pour fournir sa propre
implémentation (sous classe de FileSystem)
10
12. Les principaux nouveaux concepts
Path : encapsule un chemin dans le système de
fichiers
Files : méthodes statiques pour des opérations
sur les fichiers et les répertoires
FileSystem : encapsule un système de fichiers,
fabrique d’objets pour y accéder
FileSystems : fabrique d’instances de FileSystem
FileStore : encapsule le système de stockage
sous jacent
12
14. L’interface Path
Encapsule tout ou partie du chemin d’un
élément du système de fichiers
Dépendant du système de fichier
Le chemin encapsulé existe ou non
Immuable
Chemin encapsulé absolu ou relatif
Pas de gestion des extensions des fichiers
Implémente Iterable et Comparable
14
15. L’interface Path
Création à partir d’un String, URI ou java.io.File
La classe helper Paths
Paths.get("monfichier.txt");
Paths.get("jm/AppData/Local/Temp/monfichier.txt");
Paths.get("C:/Users/jm/AppData/Local/Temp/monfichier.txt");
Paths.get("C:UsersjmAppDataLocalTempmonfichier.t
xt");
Paths.get(URI.create("file:///C:/Users/jm/AppData/Local/Temp
/monfichier.txt"));
Paths.get(System.getProperty("java.io.tmpdir"),
"monfichier.txt");
FileSystems.getDefault().getPath("logs", "access.log");
15
16. L’interface Path : gérer les éléments du chemin
Nombreuses méthodes pour gérer les éléments
hiérarchiques du chemin
Path getFileName() : nom du dernier élément
Path getParent() : chemin parent ou null
Path getRoot() : racine du chemin ou null
Path subPath(int, int) : sous chemin
Path getName(int) : élément à l’index fourni
int getNameCount() : nombre d’éléments dans
le chemin
16
18. L’interface Path : manipuler des chemins
Plusieurs méthodes pour manipuler les chemins
Path normalize() : supprime les éléments
redondants (par exemple . et ..), purement
syntaxique
Path resolve(Path) : combiner deux chemins
Path relativize(Path) : chemin relatif entre le
chemin et celui fournit
18
20. L’interface Path : comparer des chemins
Plusieurs méthodes pour comparer les chemins
int compareTo(Path other) Compare le chemin
avec celui fourni en paramètre
boolean endsWith(Path other)
boolean endsWith(String other)
Compare la fin du chemin avec celui fourni
boolean startsWith(Path other)
boolean startsWith(String other)
Compare le début du chemin avec celui fourni
20
21. L’interface Path : convertir des chemins
Plusieurs méthodes pour convertir les chemins
Path toAbsolutePath() : retourner le chemin
absolu du chemin
Path toRealPath(LinkOption…) : retourner le
chemin physique du chemin notamment en
résolvant les liens symboliques selon les
options fournies. Exception si le fichier n’existe
pas ou s’il ne peut pas être accédé
21
22. L’interface Path : intégration dans l’existant
Path File.toPath()
File Path.toFile()
URI Path.toUri() : retourner le chemin sous la
forme d’une URI
22
23. Glob
Pattern à appliquer sur un élément du système
de fichiers
Sous ensemble des expressions régulières : *
** ? [] {}
*.java éléments dont le nom fini par .java
??? éléments dont le nom est composé de trois
alphanumériques
A*.java éléments dont le nom commence par un a et se
termine par .java
*[0-9]* éléments dont le nom contient au moins un chiffre
*.{htm,html} éléments dont le nom se termine par htm ou html
23
32. Les liens symboliques
Support optionnel selon le FS (Unix)
Liens symboliques suivis par défaut avec
quelques exceptions : delete(), move(),
walkFileTree()
Files.isSameFile() permet de vérifier si deux
chemins font référence au même endroit
Files.isSymbolicLink()
Files.readSymbolicLink()
32
33. Exemple : créer un lien
Path lien = Paths.get("C:/java/test/monlien");
Path cible = Paths.get("C:/java/test/monfichier.txt");
Files.createLink(lien, cible);
if (Files.isSameFile(lien, cible)) {
System.out.println("Identique");
} else {
System.out.println("Non identique");
}
33
34. Exemple : créer un lien symbolique
Path lien = Paths.get("/home/jm/monlien");
Path cible = Paths.get("/home/jm/monfichier.txt");
Files.createSymbolicLink(lien, cible);
if (Files.isSameFile(lien, cible)) {
System.out.println("Identique");
} else {
System.out.println("Non identique");
}
34
36. WatchService
Notifications de changements dans un
répertoire
Evite d’avoir à écrire du code de type pooling
sur un répertoire
Abonnement à des événements lors de la
création, modification, suppression de fichiers
36
37. WatchService : enregistrement
Instanciation avec
FileSystem.newWatchService()
Enregistrement avec WatchService.register()
WatchService watcher =
FileSystems.getDefault().newWatchService();
Path dir = Paths.get("c:/java");
WatchKey key = dir.register(watcher, ENTRY_CREATE)
37
38. WatchService : obtenir les événements
for (;;) {
try {
key = watcher.take();
} catch (InterruptedException ex) {
ex.printStackTrace();
}
for (WatchEvent<?> event : key.pollEvents()) {
if (event.kind() == StandardWatchEventKinds.ENTRY_CREATE) {
Path name = (Path) event.context();
System.out.format(event.kind() + " " + "%s created", name);
}
}
key.reset();
}
38
40. Les attributs
Gestion complète des attributs qui sont
dépendantes du système sous jacent
Taille, type d’élément, caché, …
Attributs communs (BasicFileAttributes)
ou attributs spécifiques (DosFileAttributes,
PosixFileAttributes)
Gestion des permissions Posix
Méthodes de la classe Files pour en modifier
un
40
41. Les attributs DOS
Path fichier = Paths.get("c:/java/test.txt");
FileTime now =
FileTime.fromMillis(System.currentTimeMillis());
Files.setLastModifiedTime(fichier, now);
Files.setAttribute(fichier, "dos:hidden", true);
DosFileAttributes attr = Files.readAttributes(fichier,
DosFileAttributes.class);
System.out.println(attr.isReadOnly());
System.out.println(attr.isHidden());
System.out.println(attr.isRegularFile());
System.out.println(attr.isSystem());
System.out.println(attr.lastModifiedTime());
41
48. La classe FileStore
Encapsule un système de stockage : un disque
dur, une partition, …
Obtenir des informations
FileStore Files.getFileStore(Path)
48
49. La classe FileStore : exemple
Path path = Paths.get("c:/test.txt");
FileStore store = Files.getFileStore(path);
long total = store.getTotalSpace() / (1024 * 1024);
long used = (store.getTotalSpace() –
store.getUnallocatedSpace()) / (1024 * 1024);
Long avail = store.getUsableSpace() / (1024 * 1024);
System.out.println("total "+total+" mb ");
49
51. La classe FileSystem
Encapsule un système de fichiers
Obtenir celui du système par défaut ou
invoquer une fabrique
FileSystem fs = FilesSystems.getDefault();
Utiliser une fabrique pour obtenir une
implémentation spécifique
Fabrique pour des objets de l’API
Extensible : possibilité de créer sa propre
implémentation
class MonFileSystem extends FileSystem();
51
52. Le séparateur du système de fichiers
String separateur = File.separator;
String separateur =
FileSystems.getDefault().getSeparator();
52
53. Les providers de FileSystem
Il est possible d’utiliser ou de créer des
fournisseurs de FileSystem
N’ont pas besoin d’être lié à un « vrai »
système de fichiers
Peut permettre d’offrir différentes vues d’un
système de fichiers (cacher les fichiers
sensibles, accès un lecture seule, …)
java.nio.file.spi
53
54. Un provider FileSystem pour les zip
Permet de traiter le contenu d’un zip comme
un FileSystem
Facilite l’utilisation des archives de type zip
54
55. Exemple : afficher un fichier d’un zip
Path jarfile = Paths.get("c:/java/archive.jar");
FileSystem fs = FileSystems.newFileSystem(jarfile, null);
Path mf = fs.getPath("META-INF", "MANIFEST.MF");
try (BufferedReader readBuffer =
Files.newBufferedReader(mf, Charset.defaultCharset())) {
String ligne = "";
while ((ligne = readBuffer.readLine()) != null) {
System.out.println(ligne);
}
}
55
56. Exemple : extraire un fichier d’un zip
Path jarfile = Paths.get("c:/java/archive.jar");
FileSystem fs = FileSystems.newFileSystem(jarfile, null);
Path cible = Paths.get("c:/java/MANIFEST.MF");
Files.deleteIfExists(cible);
// extaire un élément de l'archive
Files.copy(fs.getPath("/META-INF/MANIFEST.MF"), cible);
56
58. La classe DirectoryStream
Itération sur le contenu d’un répertoire
Performance sur un gros répertoire, consomme
moins de ressources
Possibilité d’appliquer un filtre en utilisant un
glob ou une expression régulière
Invoquer la méthode close() après utilisation
58
59. La classe DirectoryStream : exemple
Path dir = Paths.get("C:/java/projets");
try (DirectoryStream<Path> stream =
Files.newDirectoryStream(dir, "*.java")) {
for (Path entry : stream) {
System.out.println(entry.getFileName());
}
}
59
61. WalkFileTree
Parcourir une arborescence en utilisant le
design pattern visitor (opérations récursives)
Files.walkFileTree()
FileVisitor invoqué sur chaque fichier /
répertoire (pre/post)
SimpleFileVisitor : contrôle du parcours par la
valeur de retour (CONTINUE, PRUNE)
Liens symboliques non suivis par défaut
(FOLLOW_LINKS) : détection des références
circulaires
61
62. WalkFileTree : exemple
Path dir = Paths.get("C:/java/projets");
Files.walkFileTree(dir, new SimpleFileVisitor<Path>() {
public FileVisitResult visitFile(Path file,
BasicFileAttributes attrs) throws IOException {
String nom = file.getFileName().toString();
if (nom.endsWith(".java")) {
System.out.println("Fichier : " + nom);
}
return FileVisitResult.CONTINUE;
}
public FileVisitResult preVisitDirectory(Path dir,
BasicFileAttributes attrs) throws IOException {
System.out.println("Repertoire : " + dir);
return FileVisitResult.CONTINUE;
}
});
62
72. Canaux asynchrones
Channel avec opérations non bloquantes
(connexion, lecture, écriture)
Exécution des opérations de manière
asynchrone (dans un thread)
Contrôle des opérations après leur initialisation
via deux solutions :
java.util.concurrent.Future
java.nio.channels.CompletionHandler
72
73. Canaux asynchrones avec Future
Utiliser l’objet de type Future pour connaitre le
statut et le résultat de l’opération
Future.get() : obtenir le résultat (bloquant!)
Future.get() : avec un timout
Future.isDone() : l’opération est elle terminée
Future.cancel(boolean) : annuler l’opération
73
74. Canaux asynchrones avec CompletionHandler
Callback qui sera invoqué lorsque l’opération
se termine (bien ou mal)
Paramétré avec le type de résultat et un objet
en attachement (contexte qui peut être null)
interface CompletionHandler<V, A> {
void completed(V result, A attachment);
void failed(Throwable t, A attachment);
}
completed() invoqué en cas de succès
failed() invoqué en cas d’erreur
74
75. Exemple : dupliquer un ficher de manière asynchrone
public static void copierAsync(final AsynchronousFileChannel in,
final AsynchronousFileChannel out) {
final ByteBuffer buffer = ByteBuffer.allocate(16384);
class ReadCompletionHandler implements CompletionHandler<Integer, Integer> {
@Override
public void completed(Integer result, Integer position) {
if (result == -1) {
System.out.println("copie terminee");
return;
}
buffer.flip();
System.out.println("ecriture buffer");
out.write(buffer, position, position + result,
new CompletionHandler<Integer, Integer>() {
@Override
public void completed(Integer result, Integer newPosition) {
buffer.compact();
System.out.println("Lecture buffer");
in.read(buffer, newPosition, newPosition, ReadCompletionHandler.this);
}
75
76. Exemple : dupliquer un ficher de manière asynchrone
@Override
public void failed(Throwable exc, Integer attachment) {
System.out.println(exc);
throw new IOError(exc);
}
});
}
@Override
public void failed(Throwable exc, Integer attachment) {
System.out.println(exc);
throw new IOError(exc);
}
}
System.out.println("Lecture buffer");
in.read(buffer, 0, 0, new ReadCompletionHandler());
}
76
77. Les groupes
Les callbacks CompletionHandler sont
invoqués par des threads
AsynchronousChannelGroup qui encapsule un
pool de threads
DefaultThreadPool
FixedThreadPool
CachedThreadPool
77
79. Conclusion
NIO 2 apporte de nombreuses fonctionnalités attendues
depuis longtemps
Les canaux asynchrones ne sont pas facile à utiliser
mais les serveurs d’applications devraient en tirer partie
Téléchargez le JDK 7 et essayez
79