Thierry Wasylczenko
@twasyl
DU DÉVELOPPEMENT
À LA LIVRAISON
avec JavaFX et le JDK 9
A PROPOS
groupe Everial
Ingénieur R&D
Knowings
@twasyl
SlideshowFX
JStackFX
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
JAVA 9
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
QU'EST CE QU'UN MODULE?
Un module est une collection de packages
utilisés
exportés
ouverts
Un module est décrit à l'aide du fichier module-info.java.
Un module peut être ouvert.
QU'EST CE QU'UN MODULE JAVA 9?
module com.twasyl.slideshowfx {
requires javafx.controls;
exports com.twasyl.slideshowfx.utils to java.utils;
}
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
Java 9 ce n'est pas que ça
TRY-WITH-RESOURCES
Avant Java 9:
try(final ByteArrayOutputStream output = ...) {
// ...
}
// J'ai besoin de output!!
TRY-WITH-RESOURCES
Donc ...
ByteArrayOutputStream output = null;
try(output = ...) {
// ...
}
output.toByteArray();
TRY-WITH-RESOURCES
Avec Java 9:
final ByteArrayOutputStream output = new ...
try(output) {
// ...
}
output.toByteArray();
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(...)
OU ENCORE
Une nouvelle API pour parcourir les stacktraces
Support d'Unicode 8.0
La généricité des enum
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.
JAVAFX 9
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
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
…
@FXML - CONTROLLER
Quel est le problème?
public class MonController implements Initializable {
@FXML private Button button;
}
@FXML - MODULE-INFO.JAVA
module com.twasyl.slideshowfx {
// ...
opens com.twasyl.slideshowfx.controllers to javafx.fxml;
}
CHARGEMENT DES RESSOURCES
Est-ce que cela vous choque?
Ou?
ClassLoader.getResource(...);
scene.getStyleSheets().add("/com/twasyl/slideshowfx/css/Default.css");
CHARGEMENT DES RESSOURCES
Il faudra faire comme cela :
Class.getResource(...);
FEUILLES DE STYLE
Attention au @... dans les FXMLs
<BorderPane>
<stylesheets>
<URL value="@../css/default.css" />
</stylesheets>
</BorderPane>
Démonstration
PACKAGING
Possible via:
javapackager
ant
Support des applications modulaires
Taille du package moins importante
Temps de chargement plus rapides
Démonstration
CONSTRUCTION CONTINUE
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
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
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
Pour en savoir plus
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
Construction
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
OUTILS DE CONSTRUCTION
gradle
Support limité de Java 9 et Jigsaw
Compilation sans Jigsaw possible
maven
Travail en cours
LIVRAISON CONTINUE
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
TRAVIS CI
Construire un projet sur:
Linux
OS X
.travis.yml
Supporte git
APPVEYOR
Construire un projet sur Windows
x86
amd64
appveyor.yml
Supporte git
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é
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
CONCLUSION
CONCLUSION
Jigsaw (mais pas que)
Axé performance
Nouveaux composants
Mise à jour
des IDEs
des outils
RESSOURCES
, Jonathan Giles, Kevin
Rushforth - JavaOne 2016
, Chris Bensen - JavaOne 2016
, Joe Darcy -
JavaOne 2016
, Katharine
JavaFX: New and Noteworthy
Packaging Java Applications
JDK 9 Language, Tooling, and Library Features
How do you solve a problem like Java 9 modules and
reflective access?
JEPs
SOURCES DE LA DÉMONSTRATION
https://github.com/twasyl/So Shake16
FAQ

Du développement à la livraison avec JavaFX et le JDK9