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

Preview:

Citation preview

Thierry Wasylczenko

@twasyl

DU DÉVELOPPEMENTÀ LA LIVRAISON

avec JavaFX et le JDK 9

A PROPOS groupe Everial

Ingénieur R&DKnowings

@twasylSlideshowFXJStackFX

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?

SOMMAIREJava 9JavaFX 9Construction continueLivraison continueConclusion

JAVA 9

MODULARISATIONJava 9 introduit Jigsaw, la mécanique de modularisation du

JDK.

Jigsaw est similaire sur bien des concepts à OSGi:

Notion de modules et non de bundlesExport de packagesUtilisation de packages

QU'EST CE QU'UN MODULE?Un module est une collection de packages

utilisésexportésouverts

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-RESOURCESAvant Java 9:

try(final ByteArrayOutputStream output = ...) { // ... } // J'ai besoin de output!!

TRY-WITH-RESOURCESDonc ...

ByteArrayOutputStream output = null; try(output = ...) { // ... } output.toByteArray();

TRY-WITH-RESOURCESAvec Java 9:

final ByteArrayOutputStream output = new ... try(output) { // ... } output.toByteArray();

MAIS AUSSIMéthodes privées pour les interfacesGarbage collector G1 activé par défautNouvelle API pour @DeprecatedNouvelles méthodes utilitaires pour les collections :{List | Set | Map }.of(...)

OU ENCOREUne nouvelle API pour parcourir les stacktracesSupport d'Unicode 8.0La généricité des enum

OU ENCOREUne meilleure gestion des chaînes de caractèresLa Javadoc se dote d'un champ de recherche !JShell est un REPL (Real Eval Print Loop) permettantd'exécuter du code Java sans avoir à écrire toute lasyntaxe du langage.

JAVAFX 9

GÉNÉRALITÉSLes nouveautés de JavaFX 9 se situent surtout sous le

chapeau :

Modularisation complète pour s'accorder avec JigsawAPI publique pour les skins des contrôlesSupport du HDPI pour LinuxGTK 3 pour LinuxMise à 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.JAVAmodule com.twasyl.slideshowfx {

// ...

opens com.twasyl.slideshowfx.controllers to javafx.fxml;

}

CHARGEMENT DES RESSOURCESEst-ce que cela vous choque?

Ou?

ClassLoader.getResource(...);

scene.getStyleSheets().add("/com/twasyl/slideshowfx/css/Default.css");

CHARGEMENT DES RESSOURCESIl faudra faire comme cela :

Class.getResource(...);

FEUILLES DE STYLEAttention au @... dans les FXMLs

<BorderPane> <stylesheets> <URL value="@../css/default.css" /> </stylesheets> </BorderPane>

Démonstration

PACKAGINGPossible via:

javapackagerant

Support des applications modulairesTaille du package moins importanteTemps de chargement plus rapides

Démonstration

CONSTRUCTION CONTINUE

CE QUI EST NÉCESSAIRE?Un gestionnaire de sourceUn outil de construction

GESTIONNAIRE DE SOURCESToujours utiliser un gestionnaire de version des sources

(VCS) pour:

garder une trace des changementspartager son coderésoudre efficacement les conflits de modificationconcurrente

git

GITTirer parti du mécanisme de branchesMaîtriser les commandes essentielles :git commit --amendgit mergegit rebasegit pullgit push

GIT-FLOWUne branche master pour les releasesUne branche development pour les développementsdes versions futuresDes branches feature pour chacune des fonctionnalitésDes branches bugfix pour les bugsPour en savoir plus

GITHUBTirer parti de la fonctionnalité de releasesGestionnaires de ticketWikiIntégrés avec beaucoup de services de construction et delivraison continue

Construction

OUTIL DE CONSTRUCTIONIntéressant et utile pour :

exécuter les tests unitaire et d'intégrationgérer les dépendances du projetconstruire de manière aisée le livrable du projetgérer les modules Jigsaw

Ne sont pas prets

OUTILS DE CONSTRUCTIONgradle

Support limité de Java 9 et JigsawCompilation sans Jigsaw possible

mavenTravail en cours

LIVRAISON CONTINUE

ENJEUXLivraison continue Déploiement

continu

JAR JavaFX 1 WAR + n JARs

n plateformes clientes cibles 1 plateformeserveur cible

Hébergement des binaires pourtéléchargement

Serveur cible

TRAVIS CIConstruire un projet sur:

LinuxOS X

.travis.ymlSupporte git

APPVEYORConstruire un projet sur Windows

x86amd64

appveyor.ymlSupporte git

Démonstration

INCONVÉNIENTSLa version de Java peut être dépendante du service utiliséLa sauvegarde des artefacts produits n'est pas toujourspossibleTemps de construction limité

BINTRAYPermet pour les binaires de

les héberger par versionles télécharger

S'intègre avec gradlel'étape de construction permet donc l'upload

CONCLUSION

CONCLUSIONJigsaw (mais pas que)Axé performanceNouveaux composantsMise à jour

des IDEsdes outils

RESSOURCES, Jonathan Giles, Kevin

Rushforth - JavaOne 2016, Chris Bensen - JavaOne 2016

, Joe Darcy -JavaOne 2016

, Katharine

JavaFX: New and Noteworthy

Packaging Java ApplicationsJDK 9 Language, Tooling, and Library Features

How do you solve a problem like Java 9 modules andreflective access?JEPs

SOURCES DE LA DÉMONSTRATION

https://github.com/twasyl/So�Shake16

FAQ

Recommended