Thématiques principales

jeudi 31 janvier 2019

Lecture: Devops et agilité

Lecture du debut d annee:
le devops ou la philosophie de la communication/outillage/monitoring pour pousser le concept de la gestion du cycle de vie du logiciel comme d un logiciel comme un autre...
et une relecture d un livre toujours d actualité sur l agilité et l importance de l humain dans le développement. Un livre donc que je conseille qui meme apres 13 ans de sa premiere lecture m apprend toujours des choses.

Differents mais complementaire allez y!


mercredi 30 janvier 2019

OSGI : les frameworks

Nous avons vu le fonctionnement de OSGI dans ses principes généraux et un peu plus dans le détails sur les mécanismes qu’il met en oeuvre pour l'exécution des bundles, des services et de leur interconnexion. Dans cet article, un peu plus court j'espère, nous allons un peu plus nous intéresser à ses implémentations [osgi-impl], leur fonctionnalité et contenu et leur intégration dans les outils JEE standard.

Implémentation

Les implémentations du framework OSGI ne sont pas légion, alors bien sur il existe une implémentation de référence fourni par l’OSGI Alliance mais il est bien précisé que celle ci n’est à utiliser qu’à titre d’exemple et ne pourrait être exploité en production car non optimisé. [OSGI-impl-ref]

Heureusement, grâce à son “grand âge”, OSGI a su intéresser des projets qui ont porté quelques implémentations associé à des versions plus ou moins divers d’OSGI. On peut ainsi en note 4 principales.

samedi 26 janvier 2019

La haute disponibilité, les Webservices et JMS dans weblogic

Un article court aujourd'hui pour parler d'architecture JEE et de haute disponibilité dans le cadre JMS.

Nous avons déjà parlé du fonctionnement de JMS mais nous n'avons pas forcement traité la question de la haute disponibilité. Mais qu'est ce que la haute disponibilité?

La haute disponibilité [HD] est la capacité d'un système a fournir un service selon un taux de disponibilité pre-déterminer.

Cela semble un peu de la paraphrase mais cela se traduit par quelles solutions doivent ou peuvent être mises en oeuvre afin de garantir le rendu d'un service par un système?

Pour répondre a cette problématique, il existe une approche simple, la duplication. il suffit de fournir le service de manière répliquée de façon à palier à des éventuelles erreurs et crash.

Dans le cadre des systèmes a base de web-services, souvent la haute disponibilité est couplé a des systèmes de répartition de charge [weblogic-WS-LB]. Le flux http/https est adressé sur un load-balancer qui a pour charge de rediriger ces flux successivement sur les différents serveurs/containeurs d'un cluster construis pour rentre le service attendu.



jeudi 24 janvier 2019

OSGI : Architecture

Nous avions vu dans un précédent article ce qu'était OSGI dans ses grandes lignes et ses principaux concepts [uetteu-osgi]. Dans celui ci, je vous propose de rentrer un peu plus dans le côté technique de cette technologie en détaillant globalement les utilisations de celle ci (surtout pour rappel), d’identifier son écosystème et ensuite de passer en revue la construction des bundles, leur constitution, leur cycle de vie et la déclaration et consommation des services.

À la suite de cela, nous nous intéresserons alors aux différents implémentations du framework réalisé au fil de ces dernières années pour enfin étudier (sommairement) leur différentes intégrations au sein des serveurs d’application Java les plus connu (à notre insu)

Architecture: Vue d’ensemble

Nous avions vu dans ce dernier article [uetteu-osgi] que OSGI était un framework Java modulaire orienté service permettant la modélisation et l'exécution de composants nommés bundle.

Ils permettent à mise en oeuvre d’application dans des contextes d'équipement à ressources limitées, s’appuient sur un modèle de collaboration utilisant une registry pour le partage de services et facilitant l'accès à ces derniers pour les consommateurs.

OSGI permet aussi une gestion à chaud de ses bundles offrant ainsi la possibilité de chargement, mise à jour et déchargement de fonctionnalité dynamiquement sans interruption de service.

Enfin OSGI offre un cycle de vie fourni un cycle de vie à ces bundles et services (que nous verrons dans un des chapitres suivant) permettant la mise en oeuvre d’une gestion intelligente des fonctionnalités mis en ligne.

C’est pour ces différentes raisons que OSGI est aujourd’hui intégrée par défaut dans la grande majorité des serveurs d’applications JEE permettant l’ajout de fonctionnalité java standard de manière plus aisé et ce même dans un contexte JEE.

Environnement d'exécution

De par son côté modulaire, OSGI offre donc la possibilité de construire des applications via une logique de puzzle où de briques, constitué selon des niveaux fonctionnelles différentes. Cette approche a donc permis de constituer un catalogue riche et varié de bundles offrant une multitude de services métiers et ou technique [tuto-osgi-oscar].

On trouvera ainsi facilement sous la forme de bundle des

  • services de base permettant l’utilisation de logs
  • bundle de gestion de configuration
  • bundles de gestions de Préférences
  • Services HTTP (e.g :servlets, ou Spark [uetteu-spark]))
  • Gestion des utilisateurs
  • Parseurs XML
  • Gestion de droits,
  • Politique de sécurité
  • Monitoring
  • de l'intégration JEE [integ-jee]



lundi 14 janvier 2019

Server Web leger : Spark

Petit article pour parler rapidement d’un framework permettant de faire des webservice REST. Il s'appelle Spark [spark-rest] et non il n'a rien à voir avec le framework Big Data Spark [spark-bd] dont on parlera aussi prochainement.

Non ici on parle de Spark [spark-rest], un framework complet mais très simple à utiliser et très rapide à mettre en oeuvre. Il intègre un serveur web permettant l'écoute d’un port de connexion.

Le plus simple est de mettre en oeuvre. Commençons par importer l'artefact maven associé.


<dependency>
    <groupId>com.sparkjava</groupId>
    <artifactId>spark-core</artifactId>
    <version>2.8.0</version>
</dependency>

Ensuite tout passe par l’utilisation de la classe statique “spark.Spark”. Celle ci fourni les moyens d'écoute sur un port (reconfigurable)


Spark.port(port);

Ensuite il reste à définir le mapping entre url et path avec des méthodes à exécuter lors de l'utilisation de ces urls. Par exemple on peut faire à un appel d’une méthode sans paramètres:


Spark.get("/bundles", (request, response) -> this.bundleList(response));

Lorsqu'il y a des paramètres à manipuler alors on utilise la notation :variable, par exemple:


Spark.get("/bundle/:bundleName/:version", (request, response) -> this.bundleInfo(response,request.params(":bundleName"),request.params(":version")));

Il est bien sur possible d’utiliser d’autres primitives http que GET, comme POST, CREATE, DELETE. Je vous renvoie sur la doc pour ces points, n’en ayant pas eut besoin.

Ensuite il ne faut pas oublier que Spark est un serveur web et que du coup on peut aussi le configurer de façon à rendre accessible des ressources statiques. Pour cela on utilise la commande


Spark.staticFiles.externalLocation("/var/www/resources");

Voila j'avais parlé d'un article court, et avec ces quelques fonctions on peut déjà faire pas mal de choses. L'implémentation dont est extrait les exemples est dans le bundle OSGI tc-osgi-bundle-manager du depot Github [github]

Il est par contre à noter que ce code est voué à être déplacé dans un bundle dédié et qu’à terme il ne sera plus accessible à cette url. j’ajouterai une note à ce propos à ce moment là… ou pas… lol

En fait depuis il est dispo dans [gh-misc] et utilisé dans la composition docker associée [doc-spark]

Références

[spark-rest] http://sparkjava.com/
[spark-bd] http://spark.apache.org/
[github] https://github.com/collonville-tom/tc-equinox-loader/tree/master/tc-osgi-bundle-manager
[gh-misc] https://github.com/collonville-tom/tc-misc-osgi
[doc-spark] https://cloud.docker.com/u/collonvtom/repository/docker/collonvtom/tc-osgi-bundle-spark

jeudi 3 janvier 2019

2019 une nouvelle année

Nous voilà en 2019, depuis septembre 2017 que je tiens ce blog, je tiens un rythme de croisière de 4 à 5 articles par mois arrivant pour l’année 2018 à environ 70 articles écrits. Certes la qualité n’est pas toujours au top que ce soit orthographiquement ou en terme de présentation mais sur le fond je pense que les choses posées sont à minima intéressantes.

Du coup on aura vu un peu de docker (surtout dernièrement) du Java, du python, et de l’IA. On se sera aussi intéressé au processus d’apprentissage et de veille technologique avec l’utilisation de AsciiDoc comme moyen de mise en forme (changeant assez avantageusement de latex et Beamer il faut l’avouer).

En 2018 j’avais également changé de boulot quittant Thales pour Capgemini et son client Grdf où il avait fallu faire une montée de version de son SI. Aujourd’hui, la tâche étant en passe de se finaliser et n’ayant pas, au vue des discussions que j’ai pu entretenir avec mes managers de perspectives autres que ce projet décidé de quitter de nouveau ce poste pour aller vers d’autres aventures.

Ainsi en 2019, je rejoins Norsys qui m'ont semblé être une boite responsable, voulant tirer ses collaborateurs vers le haut. Cela me va parfaitement, moi qui ne voulait clairement pas passer mon temps sur les mêmes activités je pense que chez eux j’aurais largement l’opportunité de diversifier mes tâches. Nous verrons cela.

Du coup en terme de blog qu’est ce qui s’annonce pour 2019? En l'état un peu la même chose que 2018, continuer sur l’IA et parfaire les sujets autour du machine learning afin de pouvoir passer au Deep Learning. En parallèle, il sera aussi question de terminer les dossiers autour de OSGI et Docker (aborder les outils compose, machine, swarm). Essayer également de traiter un peu plus finement la question de la modélisation (du MDE, du DDD des ontologies) et parler de Spark le framework BigData en oubliant pas Scala, R, python etc....

Voila, ca fait encore de belles perspectives et beaucoup de travail surtout que j’aimerai de nouveau également aborder la question de la publication scientifique (en tentant de publier en démarrant déjà sur mon travail de thèse et celui sur l’IA de ces derniers mois), les approches de validation (fréquentiste, bayésienne) et parler un peu peut être de scepticisme avec les approches zététiques (on verra que c’est un sujet intéressant surtout en lien avec l’IA)

Enfin voila, en vous souhaitant une bonne année 2019, je vous dis à bientôt pour le prochain article qui ne devrait pas arriver dans très longtemps.