10 mars 2022

Le monde a-t-il vraiment besoin d'un autre framework frontend ?

Le monde a-t-il vraiment besoin d'un autre framework frontend ? Je pense que c'est le cas, car différents cadres ont différentes hypothèses sous-jacentes qui conduisent à une optimisation pour différentes choses. Jetons un coup d'œil aux principes qui ont amenés à construire Hilla en tant que framework qui intègre des backends Spring Boot avec des frontends TypeScript réactifs.



‘Autour du code’ Bonjour, dans cet article, nous allons partir à la découverte de hilla.

Nous utilisons souvent les Frameworks web et librairie JavaScript comme Vuejs, React ou encore Angular pour créer nos applications web d’entreprise, le constat est que l’approche typique du développement d’application web n’est pas parfaitement alignée sur les besoins des applications métier typiques, pas de panique un nouveau cadre est mis en place pour ces types d’application.

Hilla qu'est-ce que c'est ? 

Hilla est un framework web moderne pour Java.

Hilla intègre un back-end Java Spring Boot avec un front-end TypeScript réactif. Il vous aide à créer des applications plus rapidement grâce à une communication serveur sécurisée, des composants d'interface utilisateur inclus et des outils intégrés.





Hilla vous aide à accéder facilement à l'arrière-plan grâce à des points d'accès sécurisés.

  • Hilla génère automatiquement des définitions TypeScript pour tous les types de paramètres et de
     retours.
  • Appelez le serveur via des méthodes TypeScript asynchrones au lieu d'URL.
  • Vérification de type au moment de la construction.
  • Les points de terminaison sont sécurisés par défaut.




Déclaratif et basé sur les composants.

Hilla utilise un modèle de programmation réactive simple, mais puissant, basé sur Lit
Il permet de :
  • Définir les composants et les vues de manière déclarative en HTML.
  • Mettre à jour le modèle efficacement chaque fois que l'état de l'application change.
  • De lier les propriétés et les valeurs à l'aide de la syntaxe JavaScript standard.
  • Créer et valider des formulaires à l’aide de Binder
  • Naviguer entre les vues et saisissez les paramètres avec Router.



Il faut savoir que les composants Vaadin inclus comprennent tous les éléments de base dont on a besoin pour créer des applications complexes.

Le backend avec Spring Boot 

Hilla utilise Spring Boot sur le serveur. Cela signifie que vous pouvez démarrer rapidement et avoir accès à toute la puissance de l'écosystème Spring :
  • Accédez simplement à votre base de données avec Spring Data.
  • Sécurisez votre application avec Spring Security.
  • Déployez votre application sous forme de JAR autonome.


Hilla offre une chaîne d'outils sans configuration pour créer des applications Web qui incluent à la fois votre interface utilisateur frontend et votre pile Java dans un seul projet. L'extraction de données à partir du back-end Java est simple, grâce au code TypeScript généré automatiquement.

Hilla combine Java côté serveur et TypeScript côté client pour une productivité accrue.

Allez plus loin avec Hilla 
Pour quoi avoir construit Hilla

"backends for frontends" #pattern.




13 févr. 2022

Création d'un conteneur Docker pour une application Spring Boot

Nous allons créer un conteneur Docker pour une simple application hello World ! Spring boot en utilisant Maven


Prérequis :

Une fois que vous avez installé tous les logiciels requis, il est temps de télécharger le code source à partir de git.

Téléchargez et décompressez le code source ou clonez le code en utilisant Git  :


Comprendre le POM.xml qui se trouve dans le repo git cloné.


Ici, nous avons l'artefact requis pour construire le Docker avec le groupId et la version. Nous mentionnons ici le préfixe de l'image Docker que nous allons construire à l'étape suivante. Cette configuration spécifie une chose obligatoire, à savoir que l'image sera créée sous le nom de mydocker/docker-spring-boot



Cette partie de POM.xml contient les plugins nécessaires à la construction du projet.

Le plugin Maven de Spring Boot collecte tous les jars sur le classpath et construit un seul jar exécutable "docker-spring-boot-1.0.jar", ce qui rend plus pratique l'exécution et le transport de votre service. Il recherche la méthode public static void main() pour la signaler comme classe exécutable. Il fournit également un résolveur de dépendances intégré qui définit le numéro de version pour correspondre aux dépendances de Spring Boot.

La configuration spécifie également les éléments suivants :

  • une tâche pour décompresser le fichier jar
  • le nom de l'image (ou balise) est défini à partir des propriétés du fichier jar, qui se retrouvera ici sous la forme suivante mydocker/docker-spring-boot
  • l'emplacement du fichier Jarfile décompressé, que nous aurions pu coder en dur dans le fichier Dockerfile 
  • un argument de construction pour docker pointant vers le fichier jar (le fichier jar peut être renommé dans le pom.xml avec la balise <finalName>hello</finalName>)


Configuration de l'application Spring Boot 

Comprendre la classe MainApplication.java qui se trouve dans le dossier src du répertoire cloné.



La classe est marquée comme @SpringBootApplication et comme @RestController, ce qui signifie qu'elle est prête à être utilisée par Spring MVC pour gérer les requêtes web. @RequestMapping fait correspondre / à la méthode hello() qui envoie simplement une réponse " Hello Docker World ". La méthode main() utilise la méthode SpringApplication.run() de Spring Boot pour lancer une application.

Exécutez l'application sans le conteneur Docker (c'est-à-dire dans l'OS hôte).

Avec Maven, exécutez le cmd ci-dessous pour construire le jar et lancer l'application sur le port 8080
./mvnw package && java -jar target/hello.jar
et allez sur localhost:8080 pour voir votre message "Hello Docker World".

Si vous pouvez voir le message "Hello Docker World", l'application Spring Boot est en place et fonctionne dans Tomcat. Mais elle n'est pas encore conteneurisée.


Conteneurisons-le

Comprendre le Dockerfile simplifié qui est là dans le repo cloné.




Ce Dockerfile possède un paramètre JAR_FILE pointant vers un répertoire dans lequel nous avons les jar de l'application. Avant de construire l'image Docker, vérifions que Docker est en cours d'exécution en exécutant la commande ci-dessous

docker ps
Si vous obtenez un message d'erreur, quelque chose ne va pas. Revoyez la configuration de Docker


Construction de l'image Docker avec le plugin maven

./mvnw spring-boot:build-image

Exécuter l'image Docker

$ docker run -p 8081:8080 -t docker-spring-boot:1.0
L'application est alors disponible sur http://localhost:8081 (visitez-la et elle dit "Hello Docker World"). Ici, 8081 est le port du Docker et 8080 est le port de Tomcat. Cela signifie que l'application fonctionnant sur le port 8080 de Tomcat sera disponible sur le port 8081 de Docker.

Lorsque le Docker est en cours d'exécution, vous pouvez voir dans la liste des conteneurs, par ex :
$ docker ps


Pour arrêter le Docker, vous pouvez faire docker stop avec l'id du conteneur. 

$  docker stop 9606259fb494


C'est fait ! Nous avons créé un conteneur Docker pour l'application Spring Boot.


28 nov. 2021

Les opérations intermédiaires de Java Stream

Salut, aujourd’hui nous sommes à la version 17 de java ce qui ne nous empêche pas ici Autour du code de faire un tour d’horizon sur les opérations intermédiaires de l'API Stream dévoilé depuis la version 8 de Java ;

Comprenons avec des exemples les opérations suivantes :
  • filter()
  • map()
  • flatMap()
  • distinct()
  • sorted()
  • peek()
  • limit()
  • skip()

Avant de voir une série d'exemples pour comprendre les opérations cités, nous reprendre a une question,
Qu’est-ce qu’un Stream ?

Un Stream est une séquence d'éléments sur laquelle on peut effectuer un groupe d'opération de manière séquentielle ou parallèle contrairement a une collection ou une structure de donnée de manière générale.
D’ailleurs l’implémentation Java définit bien une interface spécifique : public interface Stream<T>

filter()

La méthode Java Stream filter() peut être utilisée pour filtrer les éléments d'un flux Java Stream. La méthode filter prend un prédicat (une condition) qui est appelé pour chaque élément du flux. Si l'élément doit être inclus dans le flux résultant, le prédicat doit renvoyer true. Si l'élément ne doit pas être inclus, le prédicat doit renvoyer false.

Voici un exemple d'un filtre avant l'arrivée de Java 8 :































Output:



Voici un exemple d'appel de la méthode Java Stream filter() :




















Output:


map()


La méthode Java Stream map() convertit (map) un élément en un autre objet. Par exemple, si vous avez une liste de chaînes de caractères, elle peut convertir chaque chaîne en minuscule, en majuscule, en une sous-chaîne de la chaîne d'origine ou en quelque chose de complètement différent. 

Voici un exemple de Java Stream map() : 

Si vous avez une liste de chaînes et que vous voulez la convertir en une liste d'entiers, vous pouvez utiliser map() pour le faire.



















Output:




flatMap()

La fonction Stream.flatMap(), comme son nom l'indique, est la combinaison d'une map (converti on) et d'une opération flat (aplatissement). Cela signifie que vous appliquez d'abord la fonction map, puis vous aplatissez le résultat. 

Pour comprendre en quoi consiste l'aplatissement d'un flux, considérez une structure comme [ [1,2,3], [4,5,6], [7,8,9] ] qui a "deux niveaux". Il s'agit en fait d'une grande liste contenant trois autres listes. L'aplatir signifie la transformer en une structure à "un niveau", par exemple [ 1,2,3,4,5,6,7,8,9 ], c'est-à-dire une seule liste.

Par exemple : Dans le programme ci-dessous, vous pouvez voir que nous avons trois listes qui sont fusionnées en une seule en utilisant une fonction flatMap().





Output:



distinct()


La méthode Java Stream distinct() est une opération non terminale qui renvoie un nouveau Stream qui ne contiendra que les éléments distincts du flux d'origine. Les éventuels doublons seront éliminés. 

Voici un exemple de la méthode Java Stream distinct() :




Output:




sorted()


La méthode Java Stream sorted() est une opération non terminale qui renvoie un nouveau Stream qui contiendra les éléments triés du flux d'origine. Les éventuels doublons seront éliminés. 

Voici un exemple de la méthode Java Stream sorted() :



Output:


La méthode Java Stream stored() utilise un comparateur.

 

peek()


La méthode Java Stream peek() est une opération non terminale qui prend une interface Consumer comme paramètre. Le Consumer sera appelé pour chaque élément du flux. La méthode peek() renvoie un nouveau Stream qui contient tous les éléments du flux d'origine.

L'objectif de la méthode peek() est, comme elle le dit, de regarder les éléments du flux, et non de les transformer. Gardez à l'esprit que la méthode peek ne lance pas l'itération interne des éléments du flux. Vous devez appeler une opération terminale pour cela. 

Voici un exemple de la méthode Java Stream peek() :




Output:




limit()


La méthode Java Stream limit() permet de limiter le nombre d'éléments d'un flux à un nombre donné à la méthode limit() en tant que paramètre. La méthode limit() renvoie un nouveau flux qui contiendra au maximum le nombre d'éléments donné. 

Voici un exemple de la méthode limit() de Java Stream :




Output:



skip()


La méthode Java Stream skip() permet de sauter le nombre d'éléments d'un flux à un nombre donné à la méthode skip() en tant que paramètre. La méthode skip() renvoie un nouveau flux. 

Voici un exemple de la méthode skip() de Java Stream :




Output:


20 nov. 2019

Un Pool de connexion ?

Qu'est-ce qu'un pool de connexion?

Un pool de connexions est un magasin de connexions à une base de données qui peut être utilisé et (plus important encore) réutilisé pour se connecter à une base de données.
Pourquoi a-t-on besoin de pools de connexion?

Les connexions aux bases de données sont coûteuses à créer et à maintenir. Les raisons en sont nombreuses, notamment:

    Établissement d'une connexion réseau au serveur de base de données
    Analyser les informations de la chaîne de connexion
    Authentification de l'utilisateur
    Initialisation de la connexion à la base de données dans la base de données
    Établissement de contextes transactionnels

Désormais, si vous avez une application Web avec un seul utilisateur, vous pouvez simplement créer une connexion à une base de données au début de la session utilisateur, puis la fermer à la fin. Cependant, ce scénario est hautement improbable!

Imaginez maintenant un scénario plus réaliste dans lequel des centaines, voire des milliers d’utilisateurs, accéderont à votre application Web. Si la session de chaque utilisateur crée une connexion à une base de données, vos utilisateurs subiront un retard pendant l'installation de cette connexion et, deuxièmement, les performances globales de votre système se détérioreront.

Alors, en réponse à la question de savoir pourquoi ils sont nécessaires, ils améliorent à la fois les performances et l'évolutivité de votre système.
Comment fonctionnent les pools de connexion?

Plutôt que de créer une nouvelle connexion chaque fois que nécessaire, un pool de connexions est créé au démarrage de votre serveur d'applications. Ces connexions peuvent ensuite être utilisées et réutilisées. Lorsqu'une nouvelle connexion est requise, le pool recherche une connexion disponible. S'il en existe un, il est renvoyé au demandeur. Si aucune n'est disponible, la demande est mise en file d'attente ou une nouvelle connexion est établie en fonction du nombre de connexions déjà présentes dans le pool et de la configuration de celui-ci. Une fois la connexion établie, au lieu de la fermer, la connexion est renvoyée au pool de connexions pour être utilisée par le demandeur suivant.

OK.

17 juil. 2017

Intégration MDL et JSF





Bonjour, voici une idée pour utiliser du MDL dans vos future projet #jsf une intégration complète du MDL avec les vues xhtml (facelets), utilisant le support ajax et bien évidement la notion de templating, les bean managed de type CDI et bien d'autre techno de la JEE.

le code source ici: https://github.com/ricken07/javatuto/tree/master/jsf

17 mai 2017

GlassFish Encodage, modifier la valeur par Defaut

Le codage par défaut de GlassFish renvoie le texte codé en ISO-8859-1. Ceci est basé sur le protocole de transfert hypertexte - HTTP / 1.1 RFC 3.7.1 Canonicalisation et valeurs par défaut du texte qui requiert le codage par défaut pour que le texte soit renvoyé de cette manière.

Les développeurs d'applications Web utilisent souvent UTF-8 comme encodage dans leurs applications, mais ne parviennent pas à modifier les valeurs par défaut du serveur. Cela s'applique à tout ce qui utilise Servlets (y compris JSP et JSF). Vous pouvez modifier les valeurs par défaut dans sun-web.xml ou glassfish-web.xml comme indiqué ci-dessous en définissant l'élément de codage de paramètres.

<glassfish-web-app>
    <!-- Modifiez le codage de caractères par défaut de ISO-8859-1 à UTF-8 -->
    <parameter-encoding default-charset="UTF-8"/>
</glassfish-web-app>


fichier glassfich-web.xml










source: JHON YEARY

Le monde a-t-il vraiment besoin d'un autre framework frontend ?

Le monde a-t-il vraiment besoin d'un autre framework frontend ? Je pense que c'est le cas, car différents cadres ont différentes hyp...