JavaFX et le JDK9
Construire son application
Thierry Wasylczenko
@twasyl
A propos
• Knowings groupe Everial
• Ingénieur R&D
• @twasyl
• SlideshowFX
2
Qui?
• Fait du déploiement (continu) d'application web?
• Fait du déploiement (continu) d'application lourde?
• Sait ce qu'apporte le JDK9?
• A déjà testé le JDK9?
Sommaire
• Java 9
• JavaFX 9
• Construction continue
• Livraison continue
• Conclusion
4
Java 9
5
Modularisation
Java 9 introduit Jigsaw, la mécanique de modularisation du JDK.
Jigsaw est similaire sur bien des concepts à OSGi:
• Notion de modules et non de bundles
• Export de packages
• Utilisation de packages
6
Qu'est ce qu'un module?
Un module est une collection de packages
• utilisés
• exportés
Un module est décrit à l'aide du fichier module-info.java.
7
Qu'est ce qu'un module Java 9?
module com.twasyl.slideshowfx {
requires javafx.controls;
exports com.twasyl.slideshowfx.utils to java.utils;
}
8
Qu'est ce qu'un bundle OSGi?
Bundle-Name: My bundle
Bundle-Activator: com.twasyl.slideshowfx.utils.UtilsActivator
Export-Package: com.twasyl.slideshowfx.utils
Import-Package: org.osgi.framework, javafx.controls
9
10
Java 9 ce n'est pas
que ça
try-with-resources
Avant Java 9:
try(final ByteArrayOutputStream output = ...) {
// ...
}
// J'ai besoin de output!!
11
try-with-resources
Donc ...
ByteArrayOutputStream output = null;
try(output = ...) {
// ...
}
output.toByteArray();
12
try-with-resources
Avec Java 9:
final ByteArrayOutputStream output = new ...
try(output) {
// ...
}
output.toByteArray();
13
Mais aussi
• Méthodes privées pour les interfaces
• Garbage collector G1 activé par défaut
• Nouvelle API pour @Deprecated
• Nouvelles méthodes utilitaires pour les collections :
• {List | Set | Map }.of(...)
14
Ou encore
• Une meilleure gestion des chaînes de caractères
• La Javadoc se dote d'un champ de recherche !
• JShell est un REPL (Real Eval Print Loop) permettant d'exécuter du code
Java sans avoir à écrire toute la syntaxe du langage.
15
JavaFX 9
16
Généralités
Les nouveautés de JavaFX 9 se situent surtout sous le chapeau :
• Modularisation complète pour s'accorder avec Jigsaw
• API publique pour les skins des contrôles
• Support du HDPI pour Linux
• GTK 3 pour Linux
• Mise à jour de WebKit
17
18
Cela vous parle?
Jigsaw (encore)
Jigsaw apporte une encapsulation forte:
• Comment accéder aux champs privés annotés @FXML ?
• Comment charger les ressources de son application:
• Les *.fxml ?
• Les images?
• Les feuilles de style
• …
19
@FXML - controller
Quel est le problème?
public class MonController implements Initializable {
@FXML private Button button;
}
20
@FXML - module-info.java
module com.twasyl.slideshowfx {
// ...
exports private com.twasyl.slideshowfx.controllers to javafx.fxml
}
21
Chargement des ressources
Est-ce que cela vous choque?
Ou?
ClassLoader.getResource(...);
scene.getStyleSheets().add("/com/twasyl/slideshowfx/css/Default
22
Chargement des ressources
Il faudra faire comme cela :
Class.getResource(...);
23
Feuilles de style
• Attention au @... dans les FXMLs
<BorderPane>
<stylesheets>
<URL value="@../css/default.css" />
</stylesheets>
</BorderPane>
24
25
Démonstration
Packaging
• Possible via:
• javapackager
• ant
• Support des applications modulaires
• Taille du package moins importante
• Temps de chargement plus rapides
26
27
Démonstration
Construction continue
28
Ce qui est nécessaire?
• Un gestionnaire de source
• Un outil de construction
Gestionnaire de sources
Toujours utiliser un gestionnaire de version des sources (VCS) pour:
• garder une trace des changements
• partager son code
• résoudre efficacement les conflits de modification concurrente
30
31
git
git
• Tirer parti du mécanisme de branches
• Maîtriser les commandes essentielles :
• git commit --amend
• git merge
• git rebase
• git pull
• git push
32
git-flow
• Une branche master pour les releases
• Une branche development pour les développements des versions futures
• Des branches feature pour chacune des fonctionnalités
• Des branches bugfix pour les bugs
33
GitHub
• Tirer parti de la fonctionnalité de releases
• Gestionnaires de ticket
• Wiki
• Intégrés avec beaucoup de services de construction et de livraison continue
34
Outil de construction
Intéressant et utile pour :
• exécuter les tests unitaire et d'intégration
• gérer les dépendances du projet
• construire de manière aisée le livrable du projet
• gérer les modules Jigsaw
Ne sont pas prets
35
Outils de construction
• gradle
• Support limité de Java 9 et Jigsaw
• Compilation sans Jigsaw possible
• maven
• Travail en cours
36
Livraison continue
37
Enjeux
Livraison continue Déploiement continu
JAR JavaFX 1 WAR + n JARs
n plateformes clientes cibles 1 plateforme serveur cible
Hébergement des binaires pour téléchargement Serveur cible
38
Travis CI
• Construire un projet sur:
• Linux
• OS X
• .travis.yml
• Supporte git
39
AppVeyor
• Construire un projet sur Windows
• x86
• amd64
• appveyor.yml
• Supporte git
40
41
Démonstration
Inconvénients
• La version de Java peut être dépendante du service utilisé
• La sauvegarde des artefacts produits n'est pas toujours possible
• Temps de construction limité
42
bintray
• Permet pour les binaires de
• les héberger par version
• les télécharger
• S'intègre avec gradle
• l'étape de construction permet donc l'upload
43
Conclusion
44
Conclusion
• Jigsaw (mais pas que)
• Axé performance
• Nouveaux composants
• Mise à jour
• des IDEs
• des outils
45
Ressources
• JavaFX: New and Noteworthy, Jonathan Giles, Kevin Rushforth - JavaOne
2016
• Packaging Java Applications, Chris Bensen - JavaOne 2016
• JDK 9 Language, Tooling, and Library Features, Joe Darcy - JavaOne 2016
46
Sources de la démonstration
https://github.com/twasyl/SoftShake1647
48
FAQ

JavaFX et le JDK9

  • 1.
    JavaFX et leJDK9 Construire son application Thierry Wasylczenko @twasyl
  • 2.
    A propos • Knowingsgroupe Everial • Ingénieur R&D • @twasyl • SlideshowFX 2
  • 3.
    Qui? • Fait dudéploiement (continu) d'application web? • Fait du déploiement (continu) d'application lourde? • Sait ce qu'apporte le JDK9? • A déjà testé le JDK9?
  • 4.
    Sommaire • Java 9 •JavaFX 9 • Construction continue • Livraison continue • Conclusion 4
  • 5.
  • 6.
    Modularisation Java 9 introduitJigsaw, la mécanique de modularisation du JDK. Jigsaw est similaire sur bien des concepts à OSGi: • Notion de modules et non de bundles • Export de packages • Utilisation de packages 6
  • 7.
    Qu'est ce qu'unmodule? Un module est une collection de packages • utilisés • exportés Un module est décrit à l'aide du fichier module-info.java. 7
  • 8.
    Qu'est ce qu'unmodule Java 9? module com.twasyl.slideshowfx { requires javafx.controls; exports com.twasyl.slideshowfx.utils to java.utils; } 8
  • 9.
    Qu'est ce qu'unbundle OSGi? Bundle-Name: My bundle Bundle-Activator: com.twasyl.slideshowfx.utils.UtilsActivator Export-Package: com.twasyl.slideshowfx.utils Import-Package: org.osgi.framework, javafx.controls 9
  • 10.
    10 Java 9 cen'est pas que ça
  • 11.
    try-with-resources Avant Java 9: try(finalByteArrayOutputStream output = ...) { // ... } // J'ai besoin de output!! 11
  • 12.
    try-with-resources Donc ... ByteArrayOutputStream output= null; try(output = ...) { // ... } output.toByteArray(); 12
  • 13.
    try-with-resources Avec Java 9: finalByteArrayOutputStream output = new ... try(output) { // ... } output.toByteArray(); 13
  • 14.
    Mais aussi • Méthodesprivées pour les interfaces • Garbage collector G1 activé par défaut • Nouvelle API pour @Deprecated • Nouvelles méthodes utilitaires pour les collections : • {List | Set | Map }.of(...) 14
  • 15.
    Ou encore • Unemeilleure gestion des chaînes de caractères • La Javadoc se dote d'un champ de recherche ! • JShell est un REPL (Real Eval Print Loop) permettant d'exécuter du code Java sans avoir à écrire toute la syntaxe du langage. 15
  • 16.
  • 17.
    Généralités Les nouveautés deJavaFX 9 se situent surtout sous le chapeau : • Modularisation complète pour s'accorder avec Jigsaw • API publique pour les skins des contrôles • Support du HDPI pour Linux • GTK 3 pour Linux • Mise à jour de WebKit 17
  • 18.
  • 19.
    Jigsaw (encore) Jigsaw apporteune encapsulation forte: • Comment accéder aux champs privés annotés @FXML ? • Comment charger les ressources de son application: • Les *.fxml ? • Les images? • Les feuilles de style • … 19
  • 20.
    @FXML - controller Quelest le problème? public class MonController implements Initializable { @FXML private Button button; } 20
  • 21.
    @FXML - module-info.java modulecom.twasyl.slideshowfx { // ... exports private com.twasyl.slideshowfx.controllers to javafx.fxml } 21
  • 22.
    Chargement des ressources Est-ceque cela vous choque? Ou? ClassLoader.getResource(...); scene.getStyleSheets().add("/com/twasyl/slideshowfx/css/Default 22
  • 23.
    Chargement des ressources Ilfaudra faire comme cela : Class.getResource(...); 23
  • 24.
    Feuilles de style •Attention au @... dans les FXMLs <BorderPane> <stylesheets> <URL value="@../css/default.css" /> </stylesheets> </BorderPane> 24
  • 25.
  • 26.
    Packaging • Possible via: •javapackager • ant • Support des applications modulaires • Taille du package moins importante • Temps de chargement plus rapides 26
  • 27.
  • 28.
  • 29.
    Ce qui estnécessaire? • Un gestionnaire de source • Un outil de construction
  • 30.
    Gestionnaire de sources Toujoursutiliser un gestionnaire de version des sources (VCS) pour: • garder une trace des changements • partager son code • résoudre efficacement les conflits de modification concurrente 30
  • 31.
  • 32.
    git • Tirer partidu mécanisme de branches • Maîtriser les commandes essentielles : • git commit --amend • git merge • git rebase • git pull • git push 32
  • 33.
    git-flow • Une branchemaster pour les releases • Une branche development pour les développements des versions futures • Des branches feature pour chacune des fonctionnalités • Des branches bugfix pour les bugs 33
  • 34.
    GitHub • Tirer partide la fonctionnalité de releases • Gestionnaires de ticket • Wiki • Intégrés avec beaucoup de services de construction et de livraison continue 34
  • 35.
    Outil de construction Intéressantet utile pour : • exécuter les tests unitaire et d'intégration • gérer les dépendances du projet • construire de manière aisée le livrable du projet • gérer les modules Jigsaw Ne sont pas prets 35
  • 36.
    Outils de construction •gradle • Support limité de Java 9 et Jigsaw • Compilation sans Jigsaw possible • maven • Travail en cours 36
  • 37.
  • 38.
    Enjeux Livraison continue Déploiementcontinu JAR JavaFX 1 WAR + n JARs n plateformes clientes cibles 1 plateforme serveur cible Hébergement des binaires pour téléchargement Serveur cible 38
  • 39.
    Travis CI • Construireun projet sur: • Linux • OS X • .travis.yml • Supporte git 39
  • 40.
    AppVeyor • Construire unprojet sur Windows • x86 • amd64 • appveyor.yml • Supporte git 40
  • 41.
  • 42.
    Inconvénients • La versionde Java peut être dépendante du service utilisé • La sauvegarde des artefacts produits n'est pas toujours possible • Temps de construction limité 42
  • 43.
    bintray • Permet pourles binaires de • les héberger par version • les télécharger • S'intègre avec gradle • l'étape de construction permet donc l'upload 43
  • 44.
  • 45.
    Conclusion • Jigsaw (maispas que) • Axé performance • Nouveaux composants • Mise à jour • des IDEs • des outils 45
  • 46.
    Ressources • JavaFX: Newand Noteworthy, Jonathan Giles, Kevin Rushforth - JavaOne 2016 • Packaging Java Applications, Chris Bensen - JavaOne 2016 • JDK 9 Language, Tooling, and Library Features, Joe Darcy - JavaOne 2016 46
  • 47.
    Sources de ladémonstration https://github.com/twasyl/SoftShake1647
  • 48.