Les slides de ma présentation à Devoxx France 2017.
Introduite en Java 8, l'API Collector vit dans l'ombre de l'API Stream, ce qui est logique puisqu'un collecteur doit se connecter à un stream pour fonctionner. Le JDK est organisé de sorte que l'on utilise surtout les collectors sur étagère : groupingBy, counting et quelques autres. Ces deux éléments masquent non seulement le modèle de traitement de données des collectors, mais aussi sa puissance et ses performances.
Ces présentation parle des collectors qui existent et qu'il faut connaître, ceux que l'on peut créer, ceux dont on se doute que l'on peut les créer une fois que l'on comprend un peu les choses, et les autres, tant les possibilités offertes par cette API sont illimitées.
This document provides an overview of Spring Boot and some of its key features. It discusses the origins and modules of Spring, how Spring Boot simplifies configuration and dependency management. It then covers examples of building Spring Boot applications that connect to a SQL database, use RabbitMQ for messaging, and schedule and run asynchronous tasks.
50 nouvelles choses que l'on peut faire avec Java 8José Paumard
Java 8, c'est bien sûr l'arrivée des lambdas, des Stream et des Collectors. Mais ce n'est pas que cela. Plein de nouvelles choses sont aussi offertes : un nouvelle API pour les dates, un nouveau moteur Javascript, une nouvelle version de JavaFX, une nouvelle ConcurrentHashMap, une nouvelle HashMap, des nouveautés dans le domaine de la concurrence, et toutes sortes de petites choses qui vont nous faciliter la vie, que l'on se propose de passer en revue ici.
The document provides an overview and introduction to Spring Data JPA, including:
1) How Spring Data abstracts away basic data management concepts and supports both relational and non-relational databases.
2) An example of refactoring from plain JPA to Spring Data JPA by defining a repository interface and using built-in query methods.
3) How the Spring Data repository abstraction reduces the effort to implement data access layers through interfaces like Repository.
This document discusses data access with JDBC using the Spring Framework. It covers Spring's DAO support, exception handling, and approaches for database access including JdbcTemplate, NamedParameterJdbcTemplate, and controlling connections through a DataSource. The core classes provided by Spring simplify JDBC usage and handle common database tasks like opening/closing connections and transactions.
This Edureka "Node.js Express tutorial" will help you to learn the Node.js express fundamentals with examples. Express.js is flexible and minimal node.js web application framework that provides robust set of features to develop mobile and web applications. It facilitates the rapid development of node.js applications. Below are the topics covered in this tutorial:
1) Why Express.js?
2) What is Express.js?
3) Express Installation
4) Express Routes
5) Express Middlewares
Spring Boot is a framework for creating stand-alone, production-grade Spring-based applications that can be started using java -jar without requiring any traditional application servers. It is designed to get developers up and running as quickly as possible with minimal configuration. Some key features of Spring Boot include automatic configuration, starter dependencies to simplify dependency management, embedded HTTP servers, security, metrics, health checks and externalized configuration. The document then provides examples of building a basic RESTful web service with Spring Boot using common HTTP methods like GET, POST, PUT, DELETE and handling requests and responses.
Slides for a lightning talk on Java 8 lambda expressions I gave at the Near Infinity (www.nearinfinity.com) 2013 spring conference.
The associated sample code is on GitHub at https://github.com/sleberknight/java8-lambda-samples
Spring Boot is a framework for creating stand-alone, production-grade Spring based applications that can be "just run". It aims to provide a radically faster and widely accessible starting experience for developing Spring applications. Spring Boot applications can be started using java -jar or traditional WAR deployments and require very little Spring configuration. The document then discusses system requirements, development environment, creating a simple Hello World application, using Spring Boot Admin to monitor applications, configuring databases, Spring Data JPA, REST controllers, caching with EhCache, building web applications with Thymeleaf, and project structure.
The document provides an introduction to building a simple web server in Node.js. It discusses organizing the code into modules, including a server module to start the web server, a routes module to route requests, and a request handlers module. It also covers basic concepts like using the http module to create a server, handling requests, and returning responses. The server currently returns the same "Hello World" response for all requests, and next steps involve routing requests to proper handlers to return the appropriate content based on the URL.
This document provides an introduction to Spring Boot, including its objectives, key principles, and features. It discusses how Spring Boot enables building standalone, production-grade Spring applications with minimal configuration. It demonstrates creating a "Hello World" REST app with one Java class. It also covers auto-configuration, application configuration, testing, supported technologies, case studies, and other features like production readiness and remote shell access.
Spring Batch is a lightweight, comprehensive framework for batch processing in Java. It provides reusable functions for processing large volumes of records, including reading, processing, and writing data. This document provides an overview of Spring Batch 2.0, including the domain model of jobs, steps, and processing items, and how to configure and run batch jobs using Spring Batch.
Spring Boot is a framework that makes it easy to create stand-alone, production-grade Spring based Applications that can be "just run". It takes an opinionated view of the Spring platform and third-party libraries so that new and existing Spring developers can quickly get started with minimal configuration. Key features include automatic configuration of Spring, embedded HTTP servers, starters for common dependencies, and monitoring endpoints.
This document contains an agenda and slides for a presentation on Spring Boot. The presentation introduces Spring Boot, which allows developers to rapidly build production-grade Spring applications with minimal configuration. It demonstrates how to quickly create a "Hello World" application using Spring Boot and discusses some of the features it provides out-of-the-box like embedded servers and externalized configuration. The presentation also shows how to add additional functionality like Thymeleaf templates and actuator endpoints to monitor and manage applications.
Découvrez le framework web Spring Boot qui a la cote !
Apprenez comment son système d'auto-configuration fonctionne.
Live coding et exemple de migration vers Spring Boot sont de la partie.
Mockito is a mocking framework for Java that allows developers to focus tests on interactions between objects rather than states. It provides test doubles like mocks and spies to simulate dependencies and verify expected interactions. Mockito allows mocking method calls and configuring return values or exceptions to test different scenarios. It provides default values for unstubbed calls to avoid overspecifying tests.
Microservices with Java, Spring Boot and Spring CloudEberhard Wolff
Spring Boot makes creating small Java application easy - and also facilitates operations and deployment. But for Microservices need more: Because Microservices are a distributed systems issues like Service Discovery or Load Balancing must be solved. Spring Cloud adds those capabilities to Spring Boot using e.g. the Netflix stack. This talks covers Spring Boot and Spring Cloud and shows how these technologies can be used to create a complete Microservices environment.
Bien que Docker soit facile d'utilisation, construire une image reste un exercice compliqué.
Optimisation, layers, et sécurité nécessitent de s'abstraire des Dockerfile basiques qu'on peut trouver sur internet.
Dans ce BBL, nous verrons comment bien packager une application Spring Boot dans une image Docker/OCI.
Nous allons parcourir les bonnes pratiques préconisées par Spring, les pièges à éviter, comment bien écrire un Dockerfile pour optimiser la construction et l'image finale pour une exécution dans Kubernetes et nous verrons aussi des moyens alternatifs de construction d'images Spring Boot et l'outillage d'analyse à ajouter à votre toolbox.
This document discusses data access with JDBC using the Spring Framework. It covers Spring's DAO support, exception handling, and approaches for database access including JdbcTemplate, NamedParameterJdbcTemplate, and controlling connections through a DataSource. The core classes provided by Spring simplify JDBC usage and handle common database tasks like opening/closing connections and transactions.
This Edureka "Node.js Express tutorial" will help you to learn the Node.js express fundamentals with examples. Express.js is flexible and minimal node.js web application framework that provides robust set of features to develop mobile and web applications. It facilitates the rapid development of node.js applications. Below are the topics covered in this tutorial:
1) Why Express.js?
2) What is Express.js?
3) Express Installation
4) Express Routes
5) Express Middlewares
Spring Boot is a framework for creating stand-alone, production-grade Spring-based applications that can be started using java -jar without requiring any traditional application servers. It is designed to get developers up and running as quickly as possible with minimal configuration. Some key features of Spring Boot include automatic configuration, starter dependencies to simplify dependency management, embedded HTTP servers, security, metrics, health checks and externalized configuration. The document then provides examples of building a basic RESTful web service with Spring Boot using common HTTP methods like GET, POST, PUT, DELETE and handling requests and responses.
Slides for a lightning talk on Java 8 lambda expressions I gave at the Near Infinity (www.nearinfinity.com) 2013 spring conference.
The associated sample code is on GitHub at https://github.com/sleberknight/java8-lambda-samples
Spring Boot is a framework for creating stand-alone, production-grade Spring based applications that can be "just run". It aims to provide a radically faster and widely accessible starting experience for developing Spring applications. Spring Boot applications can be started using java -jar or traditional WAR deployments and require very little Spring configuration. The document then discusses system requirements, development environment, creating a simple Hello World application, using Spring Boot Admin to monitor applications, configuring databases, Spring Data JPA, REST controllers, caching with EhCache, building web applications with Thymeleaf, and project structure.
The document provides an introduction to building a simple web server in Node.js. It discusses organizing the code into modules, including a server module to start the web server, a routes module to route requests, and a request handlers module. It also covers basic concepts like using the http module to create a server, handling requests, and returning responses. The server currently returns the same "Hello World" response for all requests, and next steps involve routing requests to proper handlers to return the appropriate content based on the URL.
This document provides an introduction to Spring Boot, including its objectives, key principles, and features. It discusses how Spring Boot enables building standalone, production-grade Spring applications with minimal configuration. It demonstrates creating a "Hello World" REST app with one Java class. It also covers auto-configuration, application configuration, testing, supported technologies, case studies, and other features like production readiness and remote shell access.
Spring Batch is a lightweight, comprehensive framework for batch processing in Java. It provides reusable functions for processing large volumes of records, including reading, processing, and writing data. This document provides an overview of Spring Batch 2.0, including the domain model of jobs, steps, and processing items, and how to configure and run batch jobs using Spring Batch.
Spring Boot is a framework that makes it easy to create stand-alone, production-grade Spring based Applications that can be "just run". It takes an opinionated view of the Spring platform and third-party libraries so that new and existing Spring developers can quickly get started with minimal configuration. Key features include automatic configuration of Spring, embedded HTTP servers, starters for common dependencies, and monitoring endpoints.
This document contains an agenda and slides for a presentation on Spring Boot. The presentation introduces Spring Boot, which allows developers to rapidly build production-grade Spring applications with minimal configuration. It demonstrates how to quickly create a "Hello World" application using Spring Boot and discusses some of the features it provides out-of-the-box like embedded servers and externalized configuration. The presentation also shows how to add additional functionality like Thymeleaf templates and actuator endpoints to monitor and manage applications.
Découvrez le framework web Spring Boot qui a la cote !
Apprenez comment son système d'auto-configuration fonctionne.
Live coding et exemple de migration vers Spring Boot sont de la partie.
Mockito is a mocking framework for Java that allows developers to focus tests on interactions between objects rather than states. It provides test doubles like mocks and spies to simulate dependencies and verify expected interactions. Mockito allows mocking method calls and configuring return values or exceptions to test different scenarios. It provides default values for unstubbed calls to avoid overspecifying tests.
Microservices with Java, Spring Boot and Spring CloudEberhard Wolff
Spring Boot makes creating small Java application easy - and also facilitates operations and deployment. But for Microservices need more: Because Microservices are a distributed systems issues like Service Discovery or Load Balancing must be solved. Spring Cloud adds those capabilities to Spring Boot using e.g. the Netflix stack. This talks covers Spring Boot and Spring Cloud and shows how these technologies can be used to create a complete Microservices environment.
Bien que Docker soit facile d'utilisation, construire une image reste un exercice compliqué.
Optimisation, layers, et sécurité nécessitent de s'abstraire des Dockerfile basiques qu'on peut trouver sur internet.
Dans ce BBL, nous verrons comment bien packager une application Spring Boot dans une image Docker/OCI.
Nous allons parcourir les bonnes pratiques préconisées par Spring, les pièges à éviter, comment bien écrire un Dockerfile pour optimiser la construction et l'image finale pour une exécution dans Kubernetes et nous verrons aussi des moyens alternatifs de construction d'images Spring Boot et l'outillage d'analyse à ajouter à votre toolbox.
Spring Framework Petclinic sample applicationAntoine Rey
Spring Petclinic is a sample application that has been designed to show how the Spring Framework can be used to build simple but powerful database-oriented applications.
The fork named Spring Framework Petclinic maintains a version both with a plain old Spring Framework configuration and a 3-layer architecture (i.e. presentation --> service --> repository).
The document appears to be notes from a presentation on Java 8 lambdas and functional programming concepts like mapping, filtering, and reducing collections of objects. It introduces lambda expressions as a more concise way to represent functions compared to anonymous inner classes in Java 7. Examples are provided of using lambdas with interfaces like Mapper, Predicate, and Reducer to process a List of Person objects by mapping to ages, filtering adults, and reducing to a sum. Corner cases and limitations of reduction operations are also briefly discussed.
Java 8, Streams & Collectors, patterns, performances and parallelizationJosé Paumard
This document discusses Java 8 streams and collectors. It provides an overview of streams, operations on streams like forEach(), filter(), and peek(), and functional interfaces like Consumer and Predicate. It notes that streams efficiently process data in a parallel and pipelined manner without storing intermediate data. Key points covered include what streams are, how to create them from collections, common stream operations, and issues around concurrency with mutable operations.
Comment mesurer les performances ? Comment savoir ce qu'il faut optimiser en premier ? Y'a-t-il des antipatterns à éviter ?
Nous allons vous présenter une démarche efficace pour mener vos campagnes de performance dans l'univers Java. Ponctuée de retours d'expérience, de best practices et de suggestions d'architecture, découvrez comment rendre vos applications plus performantes.
Par William Montaz et Jean-Pascal Thiery, consultants chez Xebia
Le développement d'applications lourdes à base de JavaScript est désormais possible. Cependant, cela requiert de bien connaître le langage en lui-même ainsi que les meilleurs patterns et pratiques établit ces 10 dernières années à travers des frameworks comme YUI ou jQuery par exemple. Vous verrez donc ici comment bien structurer votre code, comment utiliser des approches permettant de palier à certaines limitations de JS et comment également industrialiser le code grâce à la mise en place de tests unitaires.
JavaScript est le langage le plus utilisé dans le monde.
L'avènement de ES6 puis ES7, la montée en puissance de node.js coté backend et l'apparition de transpillers comme TypeScript vont encore augmenter le potentiel du dév web.
TypeScript permet dès aujourd'hui de bénéficier de nouvelles fonctionnalités et de nouveaux outils pour être encore plus productif.
Nous verrons ce qu'il peut apporter dès aujourd'hui : Décorateurs, Metadata ou Non nullables Types.
Nous verrons enfin ce que pourrait devenir JavaScript en abordant ASM.JS et WebAssembly.
Javascript - Fonctions : que fait ce code ?Ruau Mickael
Ce document a été conçu et utilisé sur plusieurs sessions de formation professionnelles pour développeurs logiciels.
Il présente la syntaxe du langage javascript à usage d'un public de développeurs maîtrisant déjà un langage de développement (langage C, Java, C Sharp, PHP...).
Niveau : débutant.
Séance numéro : 4/10.
Temps nécessaire à la séance : environ 1h.
Cette séance est issue d'une série de 10 séances présentant le langage javascript (niveau débutant à confirmé).
Le niveau débutant de la série se réalise en 2 jours.
La niveau confirmé se réalise en 3 jours.
Ce programme est conforme aux titres du ministère du travail :
- Développeur Logiciel
- Concepteur Développeur Informatique
Il permet de valider les modules correspondants de ces titres RNCP (compétences développement de pages web).
La méthode utilisée mélange les approches interrogatives et actives :
- à partir d'exemples de code, faire raisonner les stagiaires par raisonnement hypothético-déductif ("que fait ce code?")
- à partir de code "à trous", faire découvrir et appliquer des éléments de syntaxe (travaux pratiques "construisons ensemble")
- à partir des problèmes rencontrés, faire rechercher des solutions possibles aux problèmes soulevés par le code "énigme" ("quelles solutions?")
- à partir de code "énigme", faire vérifier l'assimilation des connaissances ("vrai ou faux?")
Inclus :
- code à trou
- grille d'évaluation
Ce document powerpoint est également disponible en marque blanche. Nous contacter via notre compte twitter @forgelogicielle.
Comme des millions de développeurs, vous utilisez C# quotidiennement … mais en maitrisez-vous les subtilités ? Cette session ludique vous plongera au cœur de votre langage de prédilection au travers programmes et exemples de code qui ne cesseront de vous surprendre. Avec en prime quelques (petits) lots à gagner pour les développeurs les plus perspicaces !
Automatiser les tests d'acceptation : comment s'y prendre ?Vincent Tencé
Session présentée à Agile Tour Montréal 2016
Si vous rencontrez des défis dans l’automatisation de vos tests d’acceptation ou si vous vous posez des questions sur la meilleure marche à suivre, cette séance est pour vous.
Découvrez comment mettre en place une batterie de tests d’acceptation utile et pérenne en ayant du plaisir à le faire. Attention, code en vue !
Automatiser les tests d’acceptation : comment s’y prendre ? - Vincent TencéAgile Montréal
Automatiser les tests d’acceptation : comment s’y prendre?
Si vous rencontrez des défis dans l’automatisation de vos tests d’acceptation ou si vous vous posez des questions sur la meilleure marche à suivre, cette séance est pour vous.
Découvrez comment mettre en place une batterie de tests d’acceptation utile et maintenable en ayant du plaisir à le faire. Attention, code en vue!
À propos de Vincent Tencé
Vincent a la passion du développement logiciel. Il œuvre à construire un monde meilleur dans lequel les logiciels enrichissent et simplifient nos vies. Au cours de sa carrière, il a participé à de nombreux projets de développement logiciel dans une grande variété d’industries, que ce soit en tant que coéquipier, Scrum Master, Product Owner ou coach. Il est un fervent promoteur de l’Agilité depuis ses premières expériences avec Extreme Programming en 2000 et Scrum en 2002. À Pyxis, il occupe son temps à changer le monde soit une ligne de code à la fois soit en enseignant Scrum quelque part sur la planète.
Vincent s’intéresse tout particulièrement au développement piloté par les tests (test-driven development), aux sciences cognitives et aux systèmes décentralisés. Il est un ingénieur diplômé de l’École Nationale de l’Aéronautique et de l’Espace (Toulouse, France). Il est également titulaire d’un MBA du Collège des Ingénieurs (Paris, France).
http://www.parisjug.org/xwiki/bin/view/Meeting/20130514
Quand j'écris une application Web, il y a pléthore de frameworks Web. Quand j'accède à une base de données, il y a des solutions de persistance (Hibernate, etc.). Quand je fais du batch, je suis... à poil ! Les batchs seraient-ils les parents pauvres de Java ? Spring Batch offre pourtant une solution pour vous guider lors de l'écriture de vos batchs en Java en toute décontraction. Le 14 Mai, Olivier et Julien vous présenteront Spring Batch et vous donneront une autre vision des batchs en Java.
Intervenants : Julien Jakubowski et Olivier Bazoud
JavaScript est désormais omniprésent et rend possible l'écriture d'applications complexes et riches. Mais il est souvent mal connu des développeurs orientés objets classiques comme ceux pratiquant le C#, le Java ou le PHP. Cette session passera donc en revue les bases du langage JavaScript, ses spécificités comme les portées, les closures, le this différent de ce que vous pouvez connaître. Bref, vous verrez qu'il y a des pièges à éviter et qu'il ne faut pas négliger JavaScript. Il est très puissant mais potentiellement différent de ce vous connaissez déjà. Venez apprendre à le respecter avant de le maitriser!
Vous ne vous y retrouver pas dans la nébuleuse Spring ?
Vous avez entendu parler de Spring Batch (ou pas d’ailleurs), vous aimeriez que l’on vous explique comment on s’en sert ?
Vous voulez en savoir plus sur ce framework ?
Alors venez au prochain NormandyJUG !
Jean-Philippe Briend est Architecte chez Infin-IT, société de service de petite taille spécialisée en Nouvelles Technologies et Finance / Assurance.
Il est intervenu chez de grands comptes (grande distribution, finance, assurance, éditeurs, etc…) sur des projets Java / J2ee stratégiques.
En 2010, il est intervenu comme Architecte pour la refonte de batchs orientée Performance chez un grand éditeur français.
Il nous présentera Spring Batch et son retour d’expérience de ce projet.
Nouveautés JavaScript dans le monde Microsoftdavrous
Présentation delivrée le 19 mars 2015 lors du JavaScript Open Day: http://www.meetup.com/Javascript-Open-Day/events/220087351/
Au programme: les nouveautés du moteur du projet Spartan comme Web Audio ou ECMAScript 6
The Loom project has been under work for many years, and just delivered Virtual Threads as a preview feature in the JDK 19. We now have a very precise idea of what they are and what you can do with them. Our good old Threads, created more than 25 years ago, will see a new kind of lightweight threads. This presentation shows you that creating a thread is easier and much cheaper, allowing the creation of millions of them in a single JVM. These virtual threads can be block at almost no cost. These new virtual threads bring with them new notions that will be covered in this talk. Loom threads are coming, and they will change the landscape of concurrent programming in Java.
The features released between Java 11 and Java 17 have brought a greater opportunity for developers to improve application development productivity as well and code expressiveness and readability. In this deep-dive session, you will discover all the recent Project Amber features added to the Java language such as Text blocks, Records (including Records serialization), Pattern Matching for instanceof, switch expression, sealed classes, and pattern matching for switch. The main goal of the Amber Project is to bring Pattern Matching to the Java platform, which will impact both the language and the JDK APIs. You will discover record patterns, array patterns, as well as deconstruction patterns, through constructors, factory methods, and deconstructors.
The Future of Java: Records, Sealed Classes and Pattern MatchingJosé Paumard
The release of the JDK 17 brings interesting features in the Java language: sealed types and pattern matching for switch. Along with the introduction of records, the implementation of pattern matching in the Java language begins to take shape. This presentation shows you how records, sealed types, and pattern matching can change the way we write Java code, on real patterns. It also shows you what we can expect to see on this topic in the future. It is mostly a live coding presentation, with some slides when the code is shown cannot be executed.
The features released between Java 11 and Java 17 have brought a greater opportunity for developers to improve application development productivity as well and code expressiveness and readability. In this deep-dive session, you will discover all the recent Project Amber features added to the Java language such as Records (including Records serialization), Pattern Matching for `instanceof`, switch expression, sealed classes, and hidden classes. The main goal of the Amber Project is to bring Pattern Matching to the Java platform, which will impact both the language and the JDK APsI. You will discover record patterns, array patterns, as well as deconstruction patterns, through constructors, factory methods, and deconstructors.
You can find the code shown here: https://github.com/JosePaumard/devoxx-uk-2021
Designing functional and fluent API: application to some GoF patternsJosé Paumard
These are the slides of my Devnexus 2020 talk. The code is avaiblable on my GitHub account: https://github.com/JosePaumard/devnexus-2020-visitor-lambda. You can see a replay of this talk (in a slightly different version) here: https://youtu.be/gq23w9nycBs
Those are the slides of the presentation we made with Maurice Naftalin à Goto: Copenhagen 2019.
Functional programmers have been saying for decades that they know the way to the future. Clearly they've been wrong, since imperative languages are still far more popular. Clearly they've also been right, as the advantages of functional programming have become increasingly obvious. Is it possible to combine the two models? Scala is one language that does this, and Java too has been on a journey, which still continues, of learning from functional languages and carefully adding features from them. In this talk, we'll review what Java has learned from functional languages, what it can still learn, and how its added features compare to Scala's original ones.
The document discusses the evolution of functional programming features in Java and Scala over time. It notes that Scala was able to adopt features like generics, higher-order functions, and pattern matching earlier than Java due to not having backwards compatibility constraints. Java gradually added these features in pieces (generics in 2004, higher-order functions in 2014, pattern matching is upcoming) while Scala incorporated them as a whole when it launched in 2004. The document also examines some of the challenges Java faced in implementing these features due to its type erasure approach to generics and desire to maintain backwards compatibility.
Designing functional and fluent API: example of the Visitor PatternJosé Paumard
This is the slide deck of my talk from Devoxx Belgium 2019. You can watch the video here https://www.youtube.com/watch?v=gq23w9nycBs and get the code here: https://github.com/JosePaumard/devoxx-belgium-2019-visitor-lambda.
Among the patterns from the GoF, the Visitor is probably the more complex to implement. One of the difficulties is that you need to implement it in your object model, leading to complex refactoring for legacy applications. Based on the use of all the nifty tools brought by functional programming: chaining, composition, and partial application, you can implement Visitors without having to change your object model, using a functional and fluent API. This approach can be used to implement other patterns: Builder and Validator. Using this way of designing API leads to readable and robust code, designed following the GoF patterns.
Les slides du Tools in Action que j'ai donné à Devoxx France 2019.
Le JDK est open source et son développement aussi. L'ensemble des nouveautés vit sur des branches Mercurial qui peuvent être téléchargées et compilées à la demande. Cela permet de jouer avec des fonctionnalités encore en chantier, de regarder comment les nouvelles syntaxes fonctionneront, bref, de jouer avec un JDK du futur, qui n'existera peut-être jamais. L'objet de ce tools in action est simple : montrer comment tout ceci fonctionne, de l'installation d'une machine Ubuntu à l'exécution d'un JDK recompilé maison.
Le slide deck de l'Université que nous avons donnée avec Rémi Forax à Devoxx France 2019.
Comme promis, Java sort sa version majeure tous les 6 mois. Le train passe et amène son lot de nouveautés. Parmi elles, certaines sont sorties : une nouvelle syntaxe pour les clauses switch et l'instruction de byte code CONSTANT_DYNAMIC. D'autres sont en chantier, plus ou moins avancé : une nouvelle façon d'écrire des méthodes de façon condensée, un instanceof 'intelligent', des constantes évaluées au moment où elles sont utilisées. Les projets progressent. Loom, et son nouveau modèle de programmation concurrente que l'ont peut tester avec Jetty. Amber, qui introduit les data types et des nouvelles syntaxes. Valhalla, dont les value types donnent leurs premiers résultats. S'il est difficile de prévoir une date de sortie pour ces nouveautés, on sait en revanche qu'une fois prêtes elles sortiront en moins de 6 mois. De tout ceci nous parlerons donc au futur et en public, avec des démonstrations de code, des slides, du code, de la joie et de la bonne humeur !
Lambdas and Streams Master Class Part 2José Paumard
These are the slides of the talk we made with Stuart Marks at Devoxx Belgium 2018. This second part covers the Stream API, reduction and the Collector API.
What is the state of lambda expressions in Java 11? Lambda expressions are the major feature of Java 8, having an impact on most of the API, including the Streams and Collections API. We are now living the Java 11 days; new features have been added and new patterns have emerged. This highly technical Deep Dive session will visit all these patterns, the well-known ones and the new ones, in an interactive hybrid of lecture and laboratory. We present a technique and show how it helps solve a problem. We then present another problem, and give you some time to solve it yourself. Finally, we present a solution, and open for questions, comments, and discussion. Bring your laptop set up with JDK 11 and your favorite IDE, and be prepared to think!
Lambda and Stream Master class - part 1José Paumard
These are the slides of the talk we made with Stuart Marks at Devoxx Belgium 2018. This first part covers Lambda Expressions and API design with functional interfaces.
What is the state of lambda expressions in Java 11? Lambda expressions are the major feature of Java 8, having an impact on most of the API, including the Streams and Collections API. We are now living the Java 11 days; new features have been added and new patterns have emerged. This highly technical Deep Dive session will visit all these patterns, the well-known ones and the new ones, in an interactive hybrid of lecture and laboratory. We present a technique and show how it helps solve a problem. We then present another problem, and give you some time to solve it yourself. Finally, we present a solution, and open for questions, comments, and discussion. Bring your laptop set up with JDK 11 and your favorite IDE, and be prepared to think!
Slides of the talk we gave with David Delabassee at Oracle Code One 2018.
The FnProject was released about a year ago, proposing new ways to design asynchronous systems in a very flexible way. This tutorial shows you how to set up a Fn Server on a local development machine running Windows with a first simple function. Then we cover the design of multi-functions systems, connected together in an asynchronous way, leveraging the Fn Flow API. This API is first presented, including how it compares to the the Java 8 CompletableFuture API. We then set up a real example made of several functions, producing multiple results and see how we can leverage their asynchronous nature to make a non-blocking system, handling errors in a simple and intuitive way. Most of the examples are shown both on slides and live coding parts.
Avec la version 9 sortie en septembre 2017, Java appuie sur la pédale ! Le rythme des livraisons passe à une version majeure tous les 6 mois. Java 10 est sorti en mars, prochaine version en septembre. Java 10 apporte le 'var' et l'inférence de type pour les variables locales. D'autres nouveautés sont en préparation : les constantes dynamiques, les classes de données, un nouveau switch à base de lambda, des interfaces fermées, de nouvelles choses du coté des génériques et bien plus encore.
Cela viendra-t-il en 11, 12, 15 ? Ne spéculons pas, mais quand ces nouveautés seront prêtes, elles sortiront en quelques mois. On se propose de présenter ces nouveautés, celles qui sont presque prêtes, celles qui seront prêtes bientôt, et celles qui ne seront pas prêtes avant un moment. Quels seront les impacts sur le langage, sur la JVM et donc sur les performances ? Que cela va-t-il nous apporter au quotidien, en tant que développeurs ? Quels seront les nouveaux patterns ? Voici le programme de cette présentation, avec des slides, du code, de la joie et de la bonne humeur !
JAX-RS and CDI Bike the (Reactive) BridgeJosé Paumard
This session explains how JAX-RS and CDI became reactive capable in Java EE 8. We put some new features of JAX-RS 2.1 and CDI 2.0 into perspective and show some reactive patterns to improve your application. Add Java 8 CompletionStage to the mix and this API trio becomes your best bet to easily go reactive without leaving the Java EE train.
The slides of my talk at Devoxx BE 2017. This in depth talk is all about collectors: those available, because we need to know them, those that we can create, those we had no idea they could be created, and the others, as there is in fact no limit to what can be done with this API. The concept of downstream collector will be used to show how we can write entire data processing pipelines using collectors only, and pass them as parameters to other pipelines.
The slides of my Java One 2017 talk about the Spliterator Patterns, or, how to extend the Stream API using the Spliterator API.
The video is available on YouTube: https://www.youtube.com/watch?v=xgHGpsubL5M
The slides of my JavaOne 2017 talk. It describes how you can create API using functional interfaces, default and static methods starting with Java 8. You can watch the video here: https://www.youtube.com/watch?v=64UO1YjVcZ0
The slides of my university talk, Devoxx Belgium 2016.
The goal of this talk is to compare the two most popular implementations of List: LinkedList and ArrayList, and provide hints on which one to use in what case.
Group Dynamics for Teams 5th Edition Levi Test Bankpittihalindx
Group Dynamics for Teams 5th Edition Levi Test Bank
Group Dynamics for Teams 5th Edition Levi Test Bank
Group Dynamics for Teams 5th Edition Levi Test Bank
Learning concurrent programming in Scala learn the art of building intricate ...hinalkijak1l
Learning concurrent programming in Scala learn the art of building intricate modern scalable and concurrent applications using Scala Second Edition Prokopec
Learning concurrent programming in Scala learn the art of building intricate modern scalable and concurrent applications using Scala Second Edition Prokopec
Learning concurrent programming in Scala learn the art of building intricate modern scalable and concurrent applications using Scala Second Edition Prokopec
ISO 22000-HACCP Presentation HAMMANI BACHIR .pptxssuser6d4314
► LA NORME ISO 22000 V 2018
► Système de Management de la Sécurité des denrées Alimentaires : exigences pour tout organisme appartenant à la chaine alimentaire
► ISO 22000 est une norme internationale, relative à la sécurité des denrées alimentaires. Elle est applicable pour tous les organismes de la filière agroalimentaire.
► La sécurité des produits alimentaires est une préoccupation majeure sur le marché actuel.
► Il est devenu de plus en plus difficile d'avoir une connaissance correcte des méthodes de production et de l'origine des produits alimentaires.
► Les mesures de sécurité alimentaire reconnues au niveau international ne sont plus un privilège; elles sont devenues une exigence de base pour toutes les organisations qui s'occupent de la production ou de services alimentaires.
حن نجيد التحدث عن بعضنا، لا مع بعصنا
"ان ارضيناك فتحدث عنا، وان لم نرضك تحدث الينا"
فلنطبقها لتنتهي الغيبة بيننا
اللسان ليس له عظام لكنه يقتل أمم
والحياة ما هي الا حياة قصيرة
من تراب - على تراب- الى تراب
ثم حساب- فثواب- او عقاب
فعش حياتك لله - تكن اسعد خلق الله
Jeux de rôle pour les formateurs Proust et Boutros.pdfAmina CHEROUANA
Présentation du livre : Jeux de rôle pour les formateurs
Un outil pratique pour dynamiser vos formations et renforcer les apprentissages.
Dans un monde professionnel en constante évolution, les méthodes d'apprentissage doivent s'adapter pour rester efficaces. Jeux de rôle pour les formateurs est un ouvrage conçu pour accompagner les formateurs, coachs, enseignants et responsables pédagogiques dans l'intégration de techniques d'animation participatives et immersives.
Ce livre propose une sélection de jeux de rôle prêts à l’emploi, classés par thématiques (communication, management, gestion des conflits, vente, etc.), accompagnés de fiches pratiques détaillées. Chaque jeu est structuré pour vous guider pas à pas : objectifs pédagogiques, déroulement, consignes, rôle des participants, débriefing, et conseils d’animation.
Pourquoi utiliser le jeu de rôle en formation ?
Parce qu’il place l’apprenant en situation réelle ou simulée, favorise l’engagement, l’expérimentation, la prise de recul et l’intelligence collective. Il transforme une simple transmission de savoirs en une expérience vivante et impactante.
Que vous soyez débutant ou expérimenté dans l’animation de groupes, cet ouvrage vous permettra :
de varier vos approches pédagogiques,
d’aborder des situations sensibles de façon ludique et constructive,
de créer des séances dynamiques et interactives.
Un livre pratique, concret et directement applicable sur le terrain.
🎤 Grand oral - Et si vous pouviez improviser n'importe quel discours avec con...Miguel Delamontagne
Et si vous pouviez improviser n'importe quel discours avec confiance ?
🚫 Problème :
➔La peur de devoir parler sans préparation nous fige.
➔Trouver ses mots devient une épreuve.
⚠️ Conséquences :
➔ Discours confus
➔ Stress visible
➔ Impression négative sur l'auditoire
➔ Baisse de la note au Grand Oral
✨ Vision idéale :
Imaginez parler spontanément...
➔ Avec clarté, fluidité et impact, même sans avoir rédigé votre discours.
📚 Définition simple :
Un discours improvisé, c'est :
➔ Construire et livrer un discours sans notes pré-écrites.
➔ Structurer ses idées en temps réel, avec méthode et confiance.
🎯 Caractéristiques d'un bon discours improvisé :
➔ Spontanéité : Réagir dans l'instant.
➔ Flexibilité : S'adapter aux questions et au public.
➔ Réactivité : Intégrer les réactions en direct.
🏆 Les avantages pour vous :
➔ Plus d'authenticité devant le jury.
➔ Développement de l'agilité mentale.
➔ Meilleure communication dans toutes les situations.
😰 Les défis à surmonter :
➔ Gérer le stress de l'imprévu.
➔ Structurer ses idées pour rester clair et convaincant.
🔗 La passerelle vers la maîtrise :
Bonne nouvelle : La capacité à improviser efficacement s'apprend !
Notre méthode progressive vous guide pas à pas.
🚀 Conclusion / Appel à l'action :
👉 Maîtrisez l'art du discours improvisé pour briller au Grand Oral.
📖 Découvrez notre méthode complète dans Le 📘 Le Grand Oral – Méthode innovante de préparation - Tome 1 - Miguel DELAMONTAGNE
---
L'idée de structurer les trois tomes en une méthode progressive de préparation à l'épreuve
du grand oral est excellente et offre de nombreux avantages tant pour les enseignants que
pour les élèves. Voici quelques réflexions sur cette approche :
Cohérence et Progression
- Cohérence d'ensemble
- Développement progressif des compétences
Flexibilité et Adaptabilité
- Adaptabilité à différents niveaux
- Utilisation modulaire
Avantages Pédagogiques
- Préparation exhaustive
- Encouragement à la réflexion et à l'autonomie
Conclusion
La collection des trois tomes en tant que méthode progressive de préparation à l'épreuve du grand oral est une approche stratégique et pédagogique qui offre une feuille de route claire et structurée pour les élèves. Elle garantit que chaque étape de la préparation est abordée de manière approfondie, tout en offrant la flexibilité nécessaire pour s'adapter aux besoins individuels des élèves. En fin de compte, cette méthode favorise un apprentissage durable, confiant, et efficace, ce qui augmente les chances de réussite des élèves à l'épreuve du grand oral.
🎤 Grand Oral - Le Jury Peut-Il Remettre en Cause la Question ? - FAQ 29Miguel Delamontagne
Le Jury Peut-Il Remettre en Cause la Question ?
Slide 2 : Sommaire
Introduction
Aucune « mauvaise » question
Ce qui compte vraiment
Pourquoi éviter la course à la « meilleure question »
Conseils pour les candidats
Conclusion
Slide 3 : Introduction
Le Grand Oral est une épreuve phare du baccalauréat.
Une question fréquente : le jury peut-il contester la question choisie par l'élève ?
Réponse : Non, la question elle-même ne fait pas l’objet d’une évaluation.
Slide 4 : Aucune « Mauvaise » Question
Toutes les questions sont valables, si elles respectent les consignes et le programme.
Le jury n’évalue pas la pertinence de la question.
L’épreuve valorise l’élève, pas la question.
Slide 5 : Ce Qui Compte Vraiment
La capacité de l’élève à :
S’approprier la question.
Structurer une réponse claire.
Développer une argumentation solide.
Apporter des exemples concrets.
Slide 6 : Pourquoi Éviter la Course à la « Meilleure Question » ?
Objectif : Réduire le stress inutile.
Pas besoin de chercher une question trop originale ou technique.
Le jury évalue le travail et la présentation orale, pas le sujet.
Slide 7 : Conseils pour les Candidats
Choisissez une question qui vous passionne.
Une question simple mais bien traitée vaut mieux qu’une question complexe mal exploitée.
Préparez-vous à :
Argumenter avec logique.
Captiver votre auditoire.
Slide 8 : Conclusion
Le jury ne remet pas en cause la question.
L’évaluation repose sur :
Votre réflexion.
Votre éloquence.
Votre capacité à convaincre.
Le secret : maîtrisez votre sujet, soyez clair et captivant !
🛠️ Comment bien se préparer ?
● Entraînement régulier
● Maîtrise de la structure du discours
● Techniques de gestion du stress
🎬 Nos guides pour réussir
📘 Découvrez nos guides pratiques
📚 Des outils pour exceller au Grand Oral
📕 Le Grand Oral : Rapide et facile avec GPT-4
📗 Le grand oral: Méthode innovante de préparation : Le discours improvisé – Tome 1
📘 Le grand oral: Méthode innovante de préparation: Exercices pratiques corrigés – Tome 2
🎯 Guides par spécialité :
🔢 Le grand oral: Exemples rédigés en Mathématique
🧪 Le grand oral: Exemples rédigés en Physique Chimie
🌿 Le grand oral: Exemples rédigés en SVT - Sciences de la Vie et de la Terre
💻 Le grand oral: Exemples rédigés en NSI - Numérique et Sciences Informatiques
📈 Le grand oral: Exemples rédigés en SES - Sciences Économiques et Sociales
🌍 Le grand oral: Exemples rédigés en HGGSP - Histoire-Géographie, Géopolitique et Sciences Politiques
Marketing Real People Real Choices 9th Edition Solomon Test Bankgrubecovarxq
Marketing Real People Real Choices 9th Edition Solomon Test Bank
Marketing Real People Real Choices 9th Edition Solomon Test Bank
Marketing Real People Real Choices 9th Edition Solomon Test Bank
MultiMedia Modeling 23rd International Conference MMM 2017 Reykjavik Iceland ...rhodaeickeat
MultiMedia Modeling 23rd International Conference MMM 2017 Reykjavik Iceland January 4 6 2017 Proceedings Part II 1st Edition Laurent Amsaleg
MultiMedia Modeling 23rd International Conference MMM 2017 Reykjavik Iceland January 4 6 2017 Proceedings Part II 1st Edition Laurent Amsaleg
MultiMedia Modeling 23rd International Conference MMM 2017 Reykjavik Iceland January 4 6 2017 Proceedings Part II 1st Edition Laurent Amsaleg
🎤 Grand oral - Votre arme secrète pour briller au Grand Oral - 3/17Miguel Delamontagne
Clarté + Organisation = Votre arme secrète pour briller au Grand Oral
⚠️ Constat implicite :
Un discours intelligent, mais confus…
➔ Résultat : perte d'attention, perte de points.
💬 Caractéristique 1 :
Clarté = transmettre vos idées simplement, efficacement, sans confusion.
📚 Caractéristique 2 :
Organisation = enchaîner vos arguments de manière logique et fluide.
🎯 Avantage 1 :
Un discours clair et structuré :
➔ capte l'attention du jury
➔ maintient leur intérêt jusqu'à la fin.
🏆 Avantage 2 :
Vous donnez l’image d’un orateur :
➔ Compétent
➔ Confiant
➔ Maîtrisant parfaitement son sujet
🎓 Bénéfice 1 :
Vous maximisez vos points sur :
✔ Clarté
✔ Argumentation
✔ Aisance orale
🚀 Bénéfice 2:
Après le bac, vous utiliserez cette compétence :
➔ En entretien
➔ En réunion
➔ En débat public
🧠 Résumé :
Idées claires ➔ Jury convaincu ➔ Meilleure note
📘 Appel à l'action :
Découvrez comment structurer vos discours simplement et efficacement dans 📘 Le Grand Oral – Méthode innovante de préparation - Tome 1 - Miguel DELAMONTAGNE
📚 Boostez votre note, boostez votre avenir.
---
L'idée de structurer les trois tomes en une méthode progressive de préparation à l'épreuve du grand oral est excellente et offre de nombreux avantages tant pour les enseignants que pour les élèves. Voici quelques réflexions sur cette approche :
Cohérence et Progression
- Cohérence d'ensemble
- Développement progressif des compétences
Flexibilité et Adaptabilité
- Adaptabilité à différents niveaux
- Utilisation modulaire
Avantages Pédagogiques
- Préparation exhaustive
- Encouragement à la réflexion et à l'autonomie
Conclusion
La collection des trois tomes en tant que méthode progressive de préparation à l'épreuve du grand oral est une approche stratégique et pédagogique qui offre une feuille de route claire et structurée pour les élèves. Elle garantit que chaque étape de la préparation est abordée de manière approfondie, tout en offrant la flexibilité nécessaire pour s'adapter aux besoins individuels des élèves. En fin de compte, cette méthode favorise un apprentissage durable, confiant, et efficace, ce qui augmente les chances de réussite des élèves à l'épreuve du grand oral.
Compounds of Uranium and Fluorine Chemical Compounds 1st Edition Christopher ...shirkamiahlp
Compounds of Uranium and Fluorine Chemical Compounds 1st Edition Christopher Estep
Compounds of Uranium and Fluorine Chemical Compounds 1st Edition Christopher Estep
Compounds of Uranium and Fluorine Chemical Compounds 1st Edition Christopher Estep
🎤 Grand oral - Et si votre spontanéité devenait votre plus grande force au...Miguel Delamontagne
Et si votre spontanéité devenait votre plus grande force au Grand Oral ?
❓ Problème :
Le Grand Oral n’est pas un texte à réciter.
C’est une épreuve vivante, interactive, parfois déstabilisante.
⚠️ :
➤ Vous êtes interrompu.
➤ On vous interroge à l'improviste.
➤ Vous devez reformuler, expliquer, argumenter... sans note.
⛔ Conséquence :
Sans entraînement à l’improvisation :
😟 perte de moyens, confusion, réponses floues, perte de points.
✅ Solution :
Le discours improvisé vous apprend à :
➤ Structurer vos idées rapidement
➤ Rester clair sous pression
➤ Réagir avec pertinence et confiance
🎯 Compétences clés développées :
✔ Clarté et précision
✔ Qualité de l’argumentation
✔ Aisance orale
✔ Interaction avec le jury
🧠 Méthodes d’entraînement efficaces :
🎤 Mini-débat 1 min / 1 min
💬 Reformulation d’idées en 30 sec
❓ Entraînement Q/R flash entre pairs
🚀 Résultats concrets :
➤ Vous gagnez en assurance
➤ Vous marquez des points
➤ Vous sortez du lot avec naturel
📣 Appel à l’action :
Commencez à vous entraîner dès aujourd’hui.
L’improvisation, ça se travaille, et ça paie.
📘 Conclusion + présentation du livre :
Retrouvez notre méthode dans Le 📘 Le Grand Oral – Méthode innovante de préparation - Tome 1 - Miguel DELAMONTAGNE
Un guide pas à pas pour maîtriser l’art du discours improvisé et réussir votre oral.
---
L'idée de structurer les trois tomes en une méthode progressive de préparation à l'épreuve du grand oral est excellente et offre de nombreux avantages tant pour les enseignants que pour les élèves. Voici quelques réflexions sur cette approche :
Cohérence et Progression
- Cohérence d'ensemble
- Développement progressif des compétences
Flexibilité et Adaptabilité
- Adaptabilité à différents niveaux
- Utilisation modulaire
Avantages Pédagogiques
- Préparation exhaustive
- Encouragement à la réflexion et à l'autonomie
Conclusion
La collection des trois tomes en tant que méthode progressive de préparation à l'épreuve du grand oral est une approche stratégique et pédagogique qui offre une feuille de route claire et structurée pour les élèves. Elle garantit que chaque étape de la préparation est abordée de manière approfondie, tout en offrant la flexibilité nécessaire pour s'adapter aux besoins individuels des élèves. En fin de compte, cette méthode favorise un apprentissage durable, confiant, et efficace, ce qui augmente les chances de réussite des élèves à l'épreuve du grand oral.
Microsoft Access 2013 Comprehensive 1st Edition Pratt Test Bankforsthazer79
Microsoft Access 2013 Comprehensive 1st Edition Pratt Test Bank
Microsoft Access 2013 Comprehensive 1st Edition Pratt Test Bank
Microsoft Access 2013 Comprehensive 1st Edition Pratt Test Bank
Nursing Delegation and Management of Patient Care 2nd Edition Motacki Test Bankmaniapurickul
Nursing Delegation and Management of Patient Care 2nd Edition Motacki Test Bank
Nursing Delegation and Management of Patient Care 2nd Edition Motacki Test Bank
Nursing Delegation and Management of Patient Care 2nd Edition Motacki Test Bank
10. #J8Async @JosePaumard
• 3ème façon de faire :
• Plus rapide ?
En général oui
Approche « non blocking »
AsynchroneAsynchrone
11. #J8Async @JosePaumard
• Différence avec le modèle synchrone multithread ?
1) Le traitement décide de passer d’une tâche à l’autre
2) Pas de problème d’atomicité / visibilité
• Performances ?
Pas de « context switch »
AsynchroneAsynchrone
13. #J8Async @JosePaumard
• Pattern
• Callback ou tâche : lambda expression
AsynchroneAsynchrone
queryEngine.select("select user from User")
.forEach(user ‐> System.out.prinln(user)) ;
14. #J8Async @JosePaumard
• Pattern
• Callback ou tâche : lambda expression
• Enchaînement : lorsque le résultat est disponible
alors on enchaîne avec le traitement
AsynchroneAsynchrone
queryEngine.select("select user from User")
.forEach(System.out::prinln) ;
15. #J8Async @JosePaumard
• Pattern
• Callback ou tâche : lambda expression
• Enchaînement : lorsque le résultat est disponible
alors on enchaîne avec le traitement
• Comment écrire ceci en Java ?
AsynchroneAsynchrone
queryEngine.select("select user from User")
.forEach(System.out::prinln) ;
16. #J8Async @JosePaumard
Notion de tâcheNotion de tâche
• Depuis Java 1 : Runnable
• Java 5 : Callable
• Java 5 : ExecutorService (pool de threads)
• On donne une tâche, on récupère un Future
17. #J8Async @JosePaumard
Notion de tâcheNotion de tâche
• Pattern
Callable<String> task = () ‐> "select user from User" ;
Future<String> future = executorService.submit(task) ;
18. #J8Async @JosePaumard
Notion de tâcheNotion de tâche
• Pattern
Callable<String> task = () ‐> "select user from User" ;
Future<String> future = executorService.submit(task) ;
List<User> users = future.get() ; // blocking
users.forEach(System.out::println) ;
19. #J8Async @JosePaumard
Notion de tâcheNotion de tâche
• Pattern
• Le passage d’un objet d’une tâche à l’autre se fait
dans le thread « maître »
Callable<String> task = () ‐> "select user from User" ;
Future<String> future = executorService.submit(task) ;
List<User> users = future.get() ; // blocking
users.forEach(System.out::println) ;
27. #J8Async @JosePaumard
• Nouvelle interface en Java 8 : CompletionStage
De quoi s’agit-il ?De quoi s’agit-il ?
/**
* A stage of a possibly asynchronous computation, that performs an
* action or computes a value when another CompletionStage completes.
* A stage completes upon termination of its computation, but this may
* in turn trigger other dependent stages.
*/
28. #J8Async @JosePaumard
• Nouvelle interface en Java 8 : CompletionStage
• CompletionStage = une tâche qui se déclenche sur
une autre et qui peut en déclencher d’autres
De quoi s’agit-il ?De quoi s’agit-il ?
/**
* A stage of a possibly asynchronous computation, that performs an
* action or computes a value when another CompletionStage completes.
* A stage completes upon termination of its computation, but this may
* in turn trigger other dependent stages
*/
29. #J8Async @JosePaumard
• Classe d’implémentation : CompletableFuture
• Implémente à la fois :
Future
CompletionStage
De quoi s’agit-il ?De quoi s’agit-il ?
32. #J8Async @JosePaumard
• CompletableFuture : modélise une tâche
• Peut être dans trois états :
En train d’être calculée
Calculée, ayant produit un résultat
De quoi s’agit-il ?De quoi s’agit-il ?
33. #J8Async @JosePaumard
• CompletableFuture : modélise une tâche
• Peut être dans trois états :
En train d’être calculée
Calculée, ayant produit un résultat
Calculée, ayant généré une exception
De quoi s’agit-il ?De quoi s’agit-il ?
38. #J8Async @JosePaumard
CompletableFutureCompletableFuture
• Méthodes de type « future » :
V join() ; // may throw an unchecked exception
V getNow(V valueIfAbsent) ; // returns immediately
boolean complete(V value) ; // sets the returned value is not returned
void obtrudeValue(V value) ; // resets the returned value
39. #J8Async @JosePaumard
CompletableFutureCompletableFuture
• Méthodes de type « future » :
V join() ; // may throw an unchecked exception
V getNow(V valueIfAbsent) ; // returns immediately
boolean complete(V value) ; // sets the returned value is not returned
void obtrudeValue(V value) ; // resets the returned value
boolean completeExceptionnaly(Throwable t) ; // sets an exception
void obtrudeException(Throwable t) ; // resets with an exception
40. #J8Async @JosePaumard
Création d’un CompletableFutureCréation d’un CompletableFuture
• CompletableFuture déjà terminé
public static <U> CompletableFuture<U> completedFuture(U value) ;
41. #J8Async @JosePaumard
Création d’un CompletableFutureCréation d’un CompletableFuture
• CompletableFuture déjà terminé
public static <U> CompletableFuture<U> completedFuture(U value) ;
public static <U> CompletableFuture<U>
supplyAsync(Supplier<U> value, Executor executor) ;
public static <U> CompletableFuture<U>
runAsync(Runnable runnable, Executor executor) ;
44. #J8Async @JosePaumard
CompletionStage – chaînageCompletionStage – chaînage
• Chaînage après, même thread
public <U> CompletionStage<U>
thenApply(Function<? super T,? extends U> fn);
public CompletionStage<Void>
thenAccept(Consumer<? super T> action);
public CompletionStage<Void>
thenRun(Runnable action);
45. #J8Async @JosePaumard
CompletionStage – chaînageCompletionStage – chaînage
• Chaînage après, autre thread (common FJ pool)
public <U> CompletionStage<U>
thenApplyAsync(Function<? super T,? extends U> fn);
public CompletionStage<Void>
thenAcceptAsync(Consumer<? super T> action);
public CompletionStage<Void>
thenRunAsync(Runnable action);
46. #J8Async @JosePaumard
CompletionStage – chaînageCompletionStage – chaînage
• Chaînage après, autre thread (executor)
public <U> CompletionStage<U>
thenApplyAsync(Function<? super T,? extends U> fn, Executor executor);
public CompletionStage<Void>
thenAcceptAsync(Consumer<? super T> action, Executor executor);
public CompletionStage<Void>
thenRunAsync(Runnable action, Executor executor);
47. #J8Async @JosePaumard
CompletionStage – compositionCompletionStage – composition
• Composition
public <U> CompletionStage<U>
thenCompose(Function<? super T, ? extends CompletionStage<U>> fn);
public CompletionStage<Void>
thenComposeAsync(
Function<? super T, ? extends CompletionStage<U>> fn);
public CompletionStage<Void>
thenComposeAsync(
Function<? super T, ? extends CompletionStage<U>> fn,
Executor executor);
48. #J8Async @JosePaumard
Chaînage & compositionChaînage & composition
• Ces deux familles de fonction permettent d’enchaîner
une opération après l’autre
49. #J8Async @JosePaumard
Chaînage & compositionChaînage & composition
• On peut aussi enchaîner une tâche à la suite de deux
autres tâches
public CompletionStage<V> thenCombine
(CompletionStage<U> other,
BiFunction<T, U, V> function) ;
50. #J8Async @JosePaumard
Chaînage & compositionChaînage & composition
• On peut aussi enchaîner une tâche à la suite de deux
autres tâches
• Prend les résultats de this et other
Et les combine dans function
public CompletionStage<V> thenCombine
(CompletionStage<U> other,
BiFunction<T, U, V> function) ;
51. #J8Async @JosePaumard
Chaînage & compositionChaînage & composition
• On peut aussi enchaîner une tâche à la suite de deux
autres tâches
public CompletionStage<V> thenCombine
(CompletionStage<U> other,
BiFunction<T, U, V> function) ;
public CompletionStage<V> thenCombineAsync
(CompletionStage<U> other,
BiFunction<T, U, V> function) ;
52. #J8Async @JosePaumard
Chaînage & compositionChaînage & composition
• On peut aussi enchaîner une tâche à la suite de deux
autres tâches
public CompletionStage<V> thenCombine
(CompletionStage<U> other,
BiFunction<T, U, V> function) ;
public CompletionStage<V> thenCombineAsync
(CompletionStage<U> other,
BiFunction<T, U, V> function, Executor executor) ;
54. #J8Async @JosePaumard
Chaînage & compositionChaînage & composition
• Versions avec Runnable
public CompletionStage<Void> runAfterBoth
(CompletionStage<?> other,
Runnable action) ;
public CompletionStage<Void> runAfterBothAsync
(CompletionStage<?> other,
Runnable action) ;
public CompletionStage<Void> runAfterBothAsync
(CompletionStage<?> other,
Runnable action, Executor executor) ;
55. #J8Async @JosePaumard
Chaînage & compositionChaînage & composition
• Ces tâches se déclenchent conditionnellement à this
et à la tâche passée en paramètre
• Lorsque ces tâches sont terminées
• On peut aussi déclencher lorsque la première se
termine
59. #J8Async @JosePaumard
Chaînage multipleChaînage multiple
• Version runnable
public CompletionStage<V> runAfterEither
(CompletionStage<U> other,
Runnable action) ;
public CompletionStage<V> runAfterEitherAsync
(CompletionStage<U> other,
Runnable action) ;
public CompletionStage<V> runAfterEitherAsync
(CompletionStage<U> other,
Runnable action, Executor executor) ;
60. #J8Async @JosePaumard
Création sur plusieurs tâchesCréation sur plusieurs tâches
• Méthodes statiques
public static CompletableFuture<Void>
allOf(CompletableFuture<?>... cfs) ;
public static CompletableFuture<Object>
anyOf(CompletableFuture<?>... cfs) ;
61. #J8Async @JosePaumard
Création sur plusieurs tâchesCréation sur plusieurs tâches
• Attention à la sémantique !
• Imprime « null »
public static CompletableFuture<Void>
allOf(CompletableFuture<?>... cfs) ;
CompletableFuture<Void> allOf = CompletableFuture.allOf() ;
System.out.println("allOF : " + allOf.join()) ;
62. #J8Async @JosePaumard
Création sur plusieurs tâchesCréation sur plusieurs tâches
• Attention à la sémantique !
• Ne rend pas la main…
public static CompletableFuture<Void>
allOf(CompletableFuture<?>... cfs) ;
CompletableFuture<Object> anyOf = CompletableFuture.anyOf() ;
System.out.println("anyOf : " + anyOf.join()) ;
63. #J8Async @JosePaumard
Création sur plusieurs tâchesCréation sur plusieurs tâches
• Attention à la sémantique !
public static CompletableFuture<Void>
allOf(CompletableFuture<?>... cfs) ;
CompletableFuture<Object> anyOf = CompletableFuture.anyOf() ;
System.out.println("anyOf : " + anyOf.getNow("Nothing to say")) ;
64. #J8Async @JosePaumard
Gestion des exceptionsGestion des exceptions
• Point délicat :
Une première étape consiste à créer les tâches et à
décrire leur enchaînement
L’exécution des tâches démarre indépendamment des
appels
À chaque étape, un CompletableFuture est créé
65. #J8Async @JosePaumard
Gestion des exceptionsGestion des exceptions
• Un CompletableFuture peut dépendre :
Cas 1 : d’un autre CompletableFuture
Cas 2 : de deux autres CompletableFuture
Cas 3 : de N CompletableFuture
66. #J8Async @JosePaumard
Gestion des exceptionsGestion des exceptions
• Une exception est jetée dans le cas 1
Tous les CompletableFuture sont en erreur
• Ils se terminent « exceptionnellement »
isExceptionnaly() retourne true
L’appel à get() jette une ExecutionException
get().getCause() retourne l’exception première
67. #J8Async @JosePaumard
Gestion des exceptionsGestion des exceptions
• Une exception est jetée dans le cas 2
Tous les CompletableFuture en aval sont en erreur
• Ils se terminent « exceptionnellement »
• L’autre tâche peut se terminer normalement
On peut l’interroger par get() pour avoir son résultat
68. #J8Async @JosePaumard
Gestion des exceptionsGestion des exceptions
• Une exception est jetée dans le cas 3
Le CompletableFuture retourné est en erreur
• Il se termine « exceptionnellement »
• Les autres tâches peuvent se terminer normalement
On peut l’interroger par get() pour avoir son résultat
69. #J8Async @JosePaumard
Gestion des exceptionsGestion des exceptions
• On peut aussi traiter une exception normalement
Dans ce cas, l’exception est passée à la fonction
Utile pour les checked exception
CompletionStage<T> exceptionally(
Function<Throwable, ? extends T> function);
70. #J8Async @JosePaumard
Gestion des exceptionsGestion des exceptions
• Méthode whenComplete()
Dans ce cas t ou e est nul dans l’appel de action
Le CompletableFuture retourné peut ne pas être en
erreur
CompletionStage<T> whenComplete
(BiConsumer<T, Throwable> action) ;
72. #J8Async @JosePaumard
Gestion des exceptionsGestion des exceptions
• Méthode handle()
Dans ce cas t ou e est nul dans l’appel de function
Retourne un CompletableFuture qui peut ne pas être
en erreur
CompletionStage<T> handle
(BiFunction<T, Throwable, U> function) ;
74. #J8Async @JosePaumard
Une dernière méthodeUne dernière méthode
• CompletableFuture : On peut obtenir une estimation
du nombre de tâches qui attendent l’exécution d’une
tâche donnée
int getNumberOfDependents() ;
75. #J8Async @JosePaumard
Exemple – 1Exemple – 1
• Lecture asynchrone de liens et affichage
CompletableFuture.supplyAsync(
() ‐> readPage("http://whatever.com/")
)
76. #J8Async @JosePaumard
Exemple – 1Exemple – 1
• Lecture asynchrone de liens et affichage
CompletableFuture.supplyAsync(
() ‐> readPage("http://whatever.com/")
)
.thenApply(page ‐> linkParser.getLinks(page))
77. #J8Async @JosePaumard
Exemple – 1Exemple – 1
• Lecture asynchrone de liens et affichage
CompletableFuture.supplyAsync(
() ‐> readPage("http://whatever.com/")
)
.thenApply(page ‐> linkParser.getLinks(page))
.thenAccept(
links ‐> displayPanel.display(links)
) ;
78. #J8Async @JosePaumard
Exemple – 1Exemple – 1
• Lecture asynchrone de liens et affichage
CompletableFuture.supplyAsync(
() ‐> readPage("http://whatever.com/")
)
.thenApply(page ‐> linkParser.getLinks(page))
.thenAcceptAsync(
links ‐> displayPanel.display(links),
executor
) ;
79. #J8Async @JosePaumard
Exemple – 1Exemple – 1
• Lecture asynchrone de liens et affichage
public interface Executor {
void execute(Runnable command);
}
80. #J8Async @JosePaumard
Exemple – 1Exemple – 1
• Lecture asynchrone de liens et affichage
public interface Executor {
void execute(Runnable command);
}
Executor executor = runnable ‐> SwingUtilities.invokeLater(runnable) ;
81. #J8Async @JosePaumard
Exemple – 1Exemple – 1
• Lecture asynchrone de liens et affichage
CompletableFuture.supplyAsync(
() ‐> readPage("http://whatever.com/")
)
.thenApply(page ‐> linkParser.getLinks(page))
.thenAcceptAsync(
links ‐> displayPanel.display(links),
runnable ‐> SwingUtilities.invokeLater(runnable)
) ;
82. #J8Async @JosePaumard
Exemple – 1Exemple – 1
• Lecture asynchrone de liens et affichage
CompletableFuture.supplyAsync(
() ‐> readPage("http://whatever.com/")
)
.thenApply(Parser::getLinks)
.thenAcceptAsync(
DisplayPanel::display,
SwingUtilities::invokeLater
) ;
83. #J8Async @JosePaumard
Exemple – 2Exemple – 2
• Événements asynchrones dans CDI
@Inject
Event<String> event ;
event.fire("some event") ; // returns void
public void observes(@Observes String payload) {
// handle the event, called in the firing thread
}
84. #J8Async @JosePaumard
Exemple – 2Exemple – 2
• Événements asynchrones dans CDI
public void observes(@Observes String payload) {
// handle the event, called in the firing thread
CompletableFuture.anyOf(/* some task */) ;
}
85. #J8Async @JosePaumard
Exemple – 2Exemple – 2
• Événements asynchrones dans CDI
@Inject
Event<String> event ;
event.fireAsync("some event") ; // returns CompletableFuture<Object> (?)
public void observes(@Observes String payload) {
// handle the event in another thread
}
86. #J8Async @JosePaumard
Exemple – 2Exemple – 2
• Événements asynchrones dans CDI
@Inject
Event<String> event ;
event.fireAsync("some event", executor) ;
public void observes(@Observes String payload) {
// handle the event in the executor
}
87. #J8Async @JosePaumard
Exemple – 2Exemple – 2
• Événements asynchrones dans CDI
@Inject
Event<String> event ;
event.fireAsync("some event", executor) ;
@Produces @SwingExecutor
Executor executor = SwingUtilities::invokeLater
public void observes(@Observes String payload,
@SwingExecutor Executor executor) {
// handle the event in the Swing thread
}
88. #J8Async @JosePaumard
Exemple – 2Exemple – 2
• Événements asynchrones dans CDI
@Inject
Event<String> event ;
event.fireAsync("some event", executor) ;
@Produces @SwingExecutor
Executor executor = SwingUtilities::invokeLater
public void observes(@Observes @SwingExecutor String payload) {
// handle the event in the Swing thread
}
94. #J8Async @JosePaumard
ConclusionConclusion
• On a une API pour le calcul asynchrone dans le JDK !
• Très riche et souple à l’utilisation
• Construite sur l’utilisation des lambda
• Permet un contrôle fin des threads
95. #J8Async @JosePaumard
ConclusionConclusion
• On a une API pour le calcul asynchrone dans le JDK !
• Très riche et souple à l’utilisation
• Construite sur l’utilisation des lambda
• Permet un contrôle fin des threads
• Gère différents types de chaînage
96. #J8Async @JosePaumard
ConclusionConclusion
• On a une API pour le calcul asynchrone dans le JDK !
• Très riche et souple à l’utilisation
• Construite sur l’utilisation des lambda
• Permet un contrôle fin des threads
• Gère différents types de chaînage
• Gère intelligemment les exceptions