RSS
 

Optimiser une application JAVA – Partie 2

20 juin

Avec l’arrivée d’une montée en charge, ou face à une volumétrie croissante, les applications Java peuvent rencontrer des problèmes de performance. A ce moment se pose la question de l’optimisation. Comment optimiser efficacement ?

 

Cet article est la suite de l’article « Optimiser une application JAVA – Partie 1« .

Il présente les différents étapes nécessaires à une optimisation efficace d’une application JAVA.

Pour rappel :

Les étapes de l’optimisation

Une optimisation se réalise de manière cyclique selon les étapes suivantes :

  1. Identifier les processus les plus pénalisants

  2. Cibler et réaliser une optimisation

  3. Vérifier le gain obtenu

  4. Si le gain obtenu est satisfaisant, l’optimisation est terminée. Sinon retour à l’étape 1, en cherchant le nouvel élément le plus pénalisant.

1. Identifier les processus pénalisants

Sans cette étape, il est impossible de réaliser une optimisation efficace. Elle nous permet de focaliser les travaux d’optimisation sur les points les plus bloquants. L’utilisation d’un profiler facilite leur recherche. Il existe de nombreux profiler p our J ava . Les captures d’écran ci-dessous illustre des résultats obtenus avec Your Kit Java Profiler (YJP) , un profiler dont l’utilisation et la mise en place est simple et rapide.

 

Les sources de lenteurs d’une application peuvent avoir de nombreuses origines. Les plus fréquemment rencontrées sont :

  • une utilisation CPU trop importante

  • une saturation de la mémoire

  • les contentions de threads

  • un nombre trop important de requêtes SQL provoquant des latences à cause des appels réseaux

  • ou bien encore des libérations massives d’objets volumineux, provoquant un pique d’activité pour le Garbage Collector.

 

Le profiler nous permet de mesurer l’activité de tous ces éléments, comme l’illustre les capture d’écran ci-dessous :

  • Les méthodes les plus consommatrices en CPU

    Mesures CPU

     

     

  • Les méthodes les plus consommatrices en mémoire

    Mesures mémoire

  • Les contentions de threads

    Etats threads

  • Les requêtes SQL utilisées, avec leurs temps d’exécution et leurs nombres d’invocations

    Requêtes SQL

  • L’activité du Garbage Collector

    Mesures Garbage Collector

     

2. Cibler et réaliser des optimisations

Les résultats du profilage nous permettent maintenant de connaître les méthodes les plus critiques. L’optimisation devra donc se concentrer sur ces méthodes afin de garantir un gain significatif. Il nous reste donc à déterminer quoi faire. Selon les problématiques rencontrées, il existe plusieurs solutions pour améliorer les temps d’exécution. Ci-dessous, une liste présente des problèmes fréquents.

Activité trop importante du CPU

Les pics de CPU sont souvent provoqués par des boucles ou des méthodes dont les traitements durent longtemps. Une solution peut être de découper le traitement :

  • le traitement peut-il être réalisé en plusieurs étapes ?

  • Le traitement peut-il être adapter à un algorithme multithreadé ?

Mémoire saturée

La saturation de la mémoire peut être provoquée par un traitement qui charge en mémoire un nombre trop important de données. Par exemple, une méthode qui crée une liste de tout le contenu d’une table, alors que celle-ci contient plusieurs dizaines de milliers de tuples. Dans un cas comme celui-ci, la solution est soit de récupérer les données par lots de données, ou d’utiliser un curseur pour traiter les données une à une sans charger toute la table d’un coup.

Contention de threads

Une contention de threads provient d’un ensemble de threads qui se retrouvent dans l’état bloqué. Si ce blocage durent trop longtemps, l’application peut subir des latences. Les blocages peuvent être induit à plusieurs niveaux : soit au niveau java à cause de l’utilisation de synchronize, soit au niveau de la base de données à cause de deadlocks. Dans cette situation, la solution provient souvent de l’amélioration de l’algorithme afin de contourner l’utilisation des verrous, ou d’en réduire au maximum l’utilisation.

Requêtes SQL pénalisantes

Les requêtes SQL peuvent être à l’origine de plusieurs problèmes.

Des temps de réponses de requêtes trop longs

Une requête SQL qui met trop longtemps à répondre, par exemple, demandera des optimisations au niveau de la base de données. Ce genre de problème se résous en analysant le plan d’exécution ( EXPLAIN PLAN) de la requête concernée.

Un nombre très important de requêtes

Lorsqu’une application provoque un très grand nombre de requêtes SQL, elle est souvent victime de latence à cause du nombre d’appels répétés à la base de données. Dans cette situation, la solution dépend de l’usage des requêtes SQL.

De nombreuses requêtes SELECT identiques

Un nombre important de requêtes de type SELECT identique peut être résolu par l’utilisation de recherche en lot en utilisant une clause IN. Par exemple, un traitement qui engendre un grand nombre de requêtes du genre suivant :

SELECT * FROM PRODUCT WHERE PRODUCT_ID = ?

Si le traitement le permet, il sera plus efficace de traiter les produits par lots, et de les rechercher en une seule requête :

SELECT * FROM PRODUCT WHERE PRODUCT_ID IN (?, … ,?)

De nombreuses requêtes SELECT hétérogènes

Par ailleurs, le problème provient peut être d’un nombre important de requêtes hétérogènes. Si les requêtes sont toutes de types SELECT et qu’elles proviennent du même processus, alors les données sont peut être liées. Dans ce cas, il est préférables d’utiliser des jointures pour rechercher l’ensemble des données en une seule requête plutôt que de les rechercher indépendamment. Par exemple, un traitement qui recherche les prix d’un ensemble de produits, en effectuant une première recherche pour trouver les informations sur les produits puis leurs prix :

SELECT * FROM PRODUCT WHERE PRODUCT_ID IN (?, … ,?)
SELECT * FROM PRODUCT_PRICE WHERE PRODUCT_ID IN (?, … ,?)

Il sera plus performant de rechercher les données en combinant les deux requêtes :

SELECT *
FROM PRODUCT P
INNER JOIN PRODUCT_PRICE PP ON PP.PRODUCT_ID = P.PRODUCT_ID
WHERE P.PRODUCT_ID IN (?, … ,?)

De nombreuses requêtes hétérogènes et de tous types

Dans des traitements batches par exemple, on peut se retrouver dans une situation qui requière de très nombreuses opérations de mises à jour. Dans une configuration comme celle-ci, l’utilisation du mode JDBC batch-update permet d’améliorer très significativement les performances, en envoyant en une seule fois l’ensemble des opérations à effectuer à la base de données. Deux modes sont disponibles qui répondent à des usages différents :

  1. Mode PREPARED_STATEMENT : on souhaite envoyer un nombre important de mises à jour mais toujours avec la même requête, seul les paramètres de cette requête changent.
    Exemple : On souhaite mettre à jour les noms de produits d’une liste de produits

     
    
    PreparedStatement ps = connection.prepareStatement(
    "UPDATE PRODUCT SET INTERNAL_NAME = ? WHERE PRODUCT_ID = ?");
    ps.setString(1, "Produit1");
    ps.setString(2, "0001");
    ps.addBatch();
    ps.setString(1, "Produit2");
    ps.setString(2, "0002");
    ps.addBatch();
    ps.executeBatch();
    
  2. Mode STATEMENT : on souhaite envoyer un grand nombre de requêtes toutes différentes UPDATE et/ou DELETE mélangés avec des paramètres, des opérations et des clauses différentes.
    Exemple : On souhaite mettre à jour un produit, supprimer un autre et changer un prix, toutes les requêtes seront envoyés en un seul appel bien qu’elles soient toutes différentes.

    Statement st = connection.createStatement() ;
    st.addBatch(
    "UPDATE PRODUCT SET INTERNAL_NAME = 'TUTU' WHERE PRODUCT_ID = '1'");
    st.addBatch("DELETE FROM PRODUCT WHERE PRODUCT_ID = '3'");
    st.addBatch(
    "UPDATE PRODUCT_PRICE SET PRICE = 29.99 WHERE PRODUCT_ID = '5'");
    st.executeBatch();
    

     

    3. Valider l’efficacité des optimisations réalisées

    La dernière étape consiste à profiler à nouveau l’application pour mesurer le gain obtenu. Si l’optimisation réalisée est efficace, le partie optimisée ne devrait plus apparaître comme critique.

    Ensuite, il reste à réitérer les étapes de l’optimisation sur les points critiques suivants jusqu’à obtenir une optimisation globale satisfaisante.

 

Optimiser une application JAVA – Partie 1

06 juin

Avec l’arrivée d’une montée en charge, ou face à une volumétrie croissante, les applications Java peuvent rencontrer des problèmes de performance. A ce moment se pose la question de l’optimisation. Comment optimiser efficacement ?

Pourquoi et quand optimiser ?

  • Les temps d’exécution / de réponses sont devenus trop longs
  • Les ressources de la machine sont trop sollicités : CPU, mémoire ou I/O
  • La charge de l’application augmente significativement

Les étapes de l’optimisation

Une optimisation se réalise de manière cyclique selon les étapes suivantes :

  1. Identifier les processus les plus pénalisants
  2. Cibler et réaliser une optimisation
  3. Vérifier le gain obtenu
  4. Si le gain obtenu est satisfaisant, l’optimisation est terminée. Sinon retour à l’étape 1, en cherchant le nouvel élément le plus pénalisant.

Prérequis

Avant de commencer tout chantier, il est important de préparer un cas de tests rejouable afin de mesurer et comparer les résultats de l’optimisation. Ce test permettra initialement de mesurer les performances avant optimisation, puis il servira à mesurer et valider l’optimisation.

Des tests de non régression seront également un outil précieux pour vérifier que les optimisations n’ont pas engendrées d’effet de bord indésirable.

Estimer les gains d’une optimisation

La difficulté dans un chantier d’optimisation est de ne pas connaître d’avance précisément le gain obtenu. Par conséquent, il est difficile de déterminer si le gain d’une optimisation mérite le coût de sa réalisation. La première étape avant tout chantier est donc d’analyser l’état de l’application :

  • Quels sont les processus critiques – en terme de performance – de l’application ?

    Il s’agit ici de trouver les méthodes dont les temps d’exécution sont les plus longs, ou les plus bloquants.

  • Quels en sont les causes ?

    Les causes de lenteurs peuvent être nombreuses : trop de requêtes SQL, contention de threads, etc.

Cette première phase doit permettre de lister les points les plus pénalisant, et d’estimer les gains et le coût de l’optimisation. Bien qu’on ne puisse pas déterminer par avance le gain précis qu’une optimisation pourra apporter, cette étape doit nous permettre au moins d’en avoir une idée sur les axes d’amélioration. Par exemple, si on constate qu’une méthode monopolise à elle seule plus de 50% du temps, alors on sait d’avance que son optimisation sera le gain le plus important.

 

Nous détaillerons les étapes d’optimisation dans un prochain article…

 

Agrément CIR

17 mai
Crédit Impôt Recherche

Agrément

SALTO-CONSULTING est agréé CIR (Crédit Impôt Recherche) pour les années 2010 – 2011 et 2012 par le Ministère de l’Enseignement Supérieur et de la Recherche.

Les clients de Salto-Consulting peuvent alors prétendre à un crédit d’impôt pour des travaux de recherche (Recherche et Conception de solution – Développement d’un prototype ou Proof Of Concept) qu’ils lui confieraient.

Cet agrément concrétise les travaux de recherche et de développement dont SALTO-CONSULTING a déjà fait profiter ses clients à travers des projets de PROOF OF CONCEPT comme entre autre :

  • Utilisation d’un moteur de règle pour créer une couche « Middle Office » d’une plate-forme de eCommerce permettant à partir des résultats d’un moteur de recherche de :
    • faire un ranking de présentation des résultats (Mise en avant des produits pour un fournisseur donné sur une période données en fonction des disponibilités, des accords commerciaux, du contexte saisonnier, etc.) permettant ainsi de construire des têtes de gondole « virtuelles »,
    • construire dynamiquement les menus de la vitrine (packaging de produits – univers – etc.),
    • mettre en avant les promotions en fonction de critères de vente, d’objectifs, etc.
    • etc.
  • Utilisation d’un moteur de règle pour la gestion des contrats de travail (Externalisation des règles dans DROOLS pour permettre aux utilisateurs de modifier le réglementaire du code de travail)
  • Création d’un éditeur « User Friendly » en mode WEB pour la création de contrats de travail à travers un modèle et l’intégration des données « dynamiques » du contrat (drag & drop dans le modèle des composants « métier » partir d’une palette créée dynamiquement à partir du modèle métier)
  • Utilisation de Flex pour :
    • représenter en 3D un entrepôt, ses étagères, les cartons contenant les produits, ses postes de picking, etc.
    • implémenter les cartons dans les étagères par Drag & Drop sur plusieurs couches
    • etc.
  • Packaging d’un système de tests de non régression basé sur TELLURIUM (A ce jour dans le cadre d’un projet de gestion de magasin, plus de 100 tests de régression ont été créés permettant ainsi de raccourcir significativement la phase de recette lors de la mise en oeuvre d’une nouvelle version de l’application)
  • Décomposition en 4 composants d’une application « blanche » :
    • Présentation : Flex
    • Métier : Moteur de règle (DROOLS)
    • Dynamique applicative : Spring
    • Modèle : Hybernate
  • Collaboration avec l’INRIA pour l’intégration dans une application eCRM des algorithmes de scoring, de ranging des données clients issus de l’utilisation d’un moteur d’inférence (travaux de l’INRIA),
  • etc.

Alors n’hésitez pas à nous contacter pour avoir plus d’information.

 

Performances des applications web – partie 2

03 fév

Comme tout site Internet, les applications web JEE destinées au web (eCommerce, CMS, …) doivent tenir compte en priorité de l’expérience utilisateur. Dans cette optique, les temps de réponse des pages et le rendu côté client sont des critères essentiels de réussite.

Deuxième étape : l’optimisation du front-end

Tout d’abord, présentons quelques outils et sites qui permettent de visualiser le bénéfice apporté par des améliorations côté front-end :

  • Page Speed (Google) et YSlow (Yahoo) : extensions à Firebug, ils permettent de vérifier sur la page courante le respect d’une liste de best practice, et attribuent une note et des commentaires en fonction.
  • GTmetrix : site qui intègre Page Speed et Yslow mais sans installation de plugin, très simple et ergonomique. Son principal intérêt supplémentaire est qu’il permet de suivre l’évolution de la performance d’une page web jour après jour : temps de chargement, poids, nombre de requêtes, notes sur les indicateurs Page Speed / Yslow.
  • WebPageTest : Complémentaire du précédent, il permet de tester le temps de chargement d’une page web sur IE7/IE8 (les navigateurs les plus courants). Il donne des résultats très complets et offre des possibilités intéressantes : choix de l’emplacement géographique, type de connexion internet, avec et sans cache, …


Quelques techniques d’optimisation

Note : Il ne s’agit pas ici d’être exhaustif, ni de rentrer dans les détails techniques. Nous voulons simplement donner quelques axes prioritaires à travailler pour améliorer la performance web, où le rapport temps passé/gain est optimal.

Réduire le nombre de requêtes HTTP (fichiers JS et CSS)

La latence réseau causée par la multiplication des téléchargements peut être la principale cause de lenteur de chargement d’une page. Il est vital de réduire le nombre de requêtes. Pour cela, on pourra par exemple concaténer les différents fichiers CSS et JS en un seul par page. Le but est de conserver une cohérence dans le développement et un code lisible, tout en minimisant le nombre de requêtes HTTP. On agira donc sur le processus de déploiement pour effectuer cette tâche (un procédé parmi d’autres : la tâche concat de Ant)

Réduire le poids des fichiers JS et CSS

Il est possible de réduire de façon assez importante le poids de ces fichiers grâce aux procédés de minification et d’obfuscation. La minification permet de nettoyer le code des espaces, tabulations et retours chariot inutiles. L’obfuscation, procédé plus intrusif, modifie carrément le code : renommage des variables / méthodes, modification des algorithmes… Attention dans ce cas aux risques de régression. Divers outils existent, parmi eux nous citerons YUI Compressor. Encore une fois, on agira sur le processus de déploiement, cette optimisation reste transparente lors du développement.

Gestion des fichiers images

Sur beaucoup de sites les images sont la principale cause d’une page lourde. Il est nécessaire de s’assurer que les images utilisées ont un poids optimisé par rapport à leur taille et leur qualité (ceci n’étant pas forcément du ressort de l’équipe technique). Il va de soi que pour afficher une image de 120×120 dans une vignette 30×30, il est préférable de la redimensionner avec un logiciel adapté (GIMP) qu’effectuer la redimension avec les paramètres height et width.Utiliser le bon format est également important : PNG est généralement plus léger que GIF à qualité égale. GIF sera éventuellement plus efficace sur les images très petites (puces…). On pourra utiliser des logiciels de compression d’images, créés spécififquement pour le web : smush it, OptiPNG, pngcrush, … Enfin, il est important de toujours spécifier les paramètres « width » et « height » sur les images (de préférence via la CSS). Si ce n’est pas le cas, le navigateur ne connaissant pas la taille de l’image, attend de l’avoir téléchargée entièrement afin de lui réserver l’espace nécessaire.

Charger les JS en fin de page

Le Javascript bloque le téléchargement des autres ressources d’une page. Pendant qu’il est téléchargé, puis interprété, le navigateur ne fait rien d’autre. Insérer les appels aux scripts en base de page, juste avant la fermeture de la balise </body>, permet un affichage plus rapide de la page. Techniquement, ça ne change rien à la mesure de temps de chargement, cependant l’expérience utilisateur est améliorée par une mise à disposition plus rapide du contenu.

Bien utiliser le cache du navigateur

Le cache navigateur permet de réutiliser un maximum les composants déjà chargés dans une visite initiale, afin que la prochaine visite de l’utilisateur soit plus rapide. Mais, par défaut, le navigateur fait tout de même un aller-retour avec le serveur afin de savoir si le contenu stocké sur le poste client est à jour ou non. On subit donc la latence réseau sur chaque ressource de la page, même si le poids téléchargé est réduit. La norme HTTP contient une entête Expires qui permet de définir la date d’expiration d’une ressource : jusqu’à cette date, le navigateur utilisera le fichier caché, sans aucune requête vers le serveur :

Expires: Wed Feb 16 2011 03:12:53 GMT+0100 (CET)

On utilisera donc le serveur web pour préciser des dates d’expiration plus ou moins lointaines, selon les contenus. Ceci est gérable sur Apache avec le module mod_expires. Attention toutefois : pour utiliser un maximum cette fonctionnalité, il faut mettre une date d’expiration éloignée sur la plupart des contenus (1 an…) mais dans ce cas, il faut gérer la mise à jour du contenu lors de sa modification. Sur les fichiers modifiés régulièrement (principalement les JS et les CSS), on pourra par exemple intégrer le numéro de version dans le nom du fichier, ce qui forcera le téléchargement par le poste client à chaque nouvelle version du fichier.

Compresser les composants côté serveur

Les navigateurs actuels acceptent les contenus compressés. Ils envoient avec la requête HTTP une entête Accept-Encoding, par exemple :

Accept-Encoding: gzip,deflate

Le serveur reçoit alors l’information et, si lui-même gère la compression, il compresse les fichiers avant envoi. Enfin le navigateur décompresse le fichier lors de sa réception. Sur Apache on utilise pour cela le module mod_deflate. La méthode de compression la plus couramment utilisée est Gzip. On l’utilise sur les fichiers texte, ceci permet de gagner plus de 50% du poids à télécharger sur ces fichiers.

Pour aller plus loin

 

Performances des applications web – partie 1

03 fév

Comme tout site Internet, les applications web JEE destinées au web (eCommerce, CMS, …) doivent tenir compte en priorité de l’expérience utilisateur. Dans cette optique, les temps de réponse des pages et le rendu côté client sont des critères essentiels de réussite.

Première étape : le diagnostic

Un simple plugin pour Firefox, nommé Firebug, permettra de faire un diagnostic rapide de la cause d’un chargement trop long d’une page web. Il suffit, une fois le plugin installé, de charger la page désirée. Attention à bien prendre en compte dans un premier temps le cas où le cache navigateur est vide – afin de fidéliser le visiteur, il faut au préalable qu’il apprécie sa 1ère visite ! Aller ensuite sur l’onglet « Réseau » de Firebug. Voici le résultat pour la page www.salto-consulting.com :

firebug-network

Que voit-on ? Firebug indique plusieurs informations intéressantes :

  • listing des ressources téléchargées
  • pour chaque ressource, poids et temps de téléchargement par le navigateur
  • téléchargements effectués en parallèle ou non
  • statut des ressources : des images en 404 (non trouvées), par exemple, ralentiront le chargement de la page

Le premier indicateur à observer, pour savoir dans quelle direction doit s’orienter le travail, est le temps de réponse de la page HTML. Dans la plupart des cas, on constate que le HTML est téléchargé rapidement, et que le navigateur passe une grande partie du temps de chargement de la page à télécharger et interpréter l’ensemble des ressources nécessaires à son bon affichage. Si ce n’est pas le cas, vous pouvez arrêter là la lecture, et retrousser vos manches pour optimiser votre code côté serveur…

Pour chaque ressource, en passant le curseur sur les barres de couleur, on obtient précisément le temps passé pour chaque événement : recherche DNS, connexion, attente… Ces éléments permettent de cerner avec précision ce qui fait défaut.

firebug-network-detail

Alors qu’une optimisation de fond des temps de réponse du serveur est une tâche conséquente, avec des risques de régression induits, une simple optimisation du côté front peut améliorer significativement les temps de réponse d’une page web.

Nous verrons donc dans une prochaine partie comment optimiser le code web.

 

Atlassian recrute des évangélistes

08 déc

En tant que partenaire Atlassian, nous relayons le fait que cette société australienne se développe en Europe.

Dans ce cadre Atlassian recrute un ambassadeur en France pour promouvoir la société et ses produits.
L’Ambassadeur est le relai local d’Atlassian, avec pour objectif d’assister la communauté technique tout en étant capable de présenter avec passion les produits Jira, Confluence, Bamboo, …

Plus d’information disponible sur le site : http://www.atlassian.com/fr_FR/europe

 

Flex vs SilverLight

02 nov

SALTO-Consulting vient de réaliser une étude comparative entre Flex et SilverLight.

Cet article vous en présente les conclusions.

Contexte : Refonte d’une application pour laquelle les principaux besoins ergonomiques sont les suivants :

  • Onglets & Slider,
  • DataGrid,
  • Navigation 3D (avec ‘Point de vue’ et outil « Caméra’) dans un entrepôt
  • Bascule en 2D ‘Perspective’ sur une zone de l’entrepôt
  • Zoom In – Out par zone d’écran
  • Composant « Carton » (Face d’ouverture – Intégration d’image « symbole » – Dimension – etc.)
  • Composant « Alvéole » (Type de Zone – Dimension – etc.)
  • Alvéole de déplacement interdite en fonction de caractéristiques carton
  • Déplacement de cartons par Drag & Drop d’une zone à une autre, d’une allée à une autre à partir de la vue 2D
  • Information « Bulle » lors du survol d’alvéole pendant le Drag & Drop
  • Rotation de cartons dans une alvéole
  • Empilage de cartons par « Cliqué – Glissé »
  • Charts & Report
  • etc.

Contrainte Technique : S’intégrer avec un serveur J2EE – Volumétrie importante d’échange d’information entre le client et le serveur

1er constat : SilverLight s’intègre au serveur HTTP Apache. Un effort minimaliste de configuration est nécessaire pour la reconnaissance par Apache des types de fichier propre à SilverLight. Donc pour les réfractaires à IIS, pas de problème.

2ème constat : Même si SilverLight est « MicroSoftien », il existe des projets « Open Source » et « gratuit ». De ce point de vue, l’ouverture « Open Source » Flex, au moins dans le contexte, ne présente pas un réel avantage.

3ème constat : Les architectures logicielles des 2 solutions sont très proches (pour ne pas dire semblables).

4ème constat : Il est possible, grâce à l’intégration de composants ou bibliothèques « Open Source » et « Libre », de réaliser les besoins ergonomiques dans les mêmes charges de travail pour l’une ou l’autre des solutions

5ème constat : Même s’il existe une différences de prix entre FlashBuilder (outil de développement Flex) et VisualStudio (outil de développement SilverLight), celle-ci n’est pas significative pour discriminer l’outil MicroSoft.

Alors où se trouve la différence ? Dans la facilité d’intégration avec Java, tant d’un point de vue technique que d’un point de vue développement.

Point de vue développement : FlashBuilder se présente sous la forme d’un Plug-In intégrable dans tous les IDE de référence Java (Eclipse – NetBean – etc.). Par contre, VisualStudio est une application autonome avec laquelle il est possible bien sur de faire du Java, mais sur Windows (ou Mono !!!), ce qui nécessitera une conduite du changement pour les développements ou au mieux l’utilisation de 2 studios de développement (Attention au dimensionnement mémoire des postes de développement)

Point de vue technique : Théoriquement, les technologies d’échanges entre SilverLight (plus généralement MicroSoft) et Java sont XML ou les WS ce qui peut s’avérer vite pénalisant dans un contexte de volume d’échange de données, ce qui n’est pas le cas pour Flex qui propose le protocole « binaire » AMF. Cependant, il existe un FrameWork (« Open Source » et « Libre ») permettant de faire de l’AMF avec MicroSoft, mais dont l’intégration ne nous a pas semblé « aisée » (loin de là) et dont les références de réalisation ne sont pas évidentes à trouver (c’est un euphémisme).

Pour conclure, halte au débat Flex – SilverLight.

Si vous être .Net, SilverLight est votre solution. Sinon, Flex est le bon choix.

 

OFBIZ, c’est quoi ?

25 oct
logo OFBIZ

OFBIZ - ERP & eCommerce

SALTO-Consulting depuis sa création cherche des solutions Open Source pour les intégrer dans les systèmes d’information de ses clients.

C’est donc tout naturellement qu’elle s’est penché sur la solution ERP de la fondation Apache qui fait référence dans le domaine de l’Open Source (Serveur HTTP Apache – Serveur J2EE Tomcat – Moteur de recherche Lucene – Gestion de configuration Continuum – Gestion de version SubVersion – Gestion de Build applicatif Maven – FrameWork MVC Struts – et bien d’autres encore…).

Depuis  maintenant 2 ans, SALTO-Consulting a créé un centre de service spécialisé dans l’intégration de la solution OFBiz (voir l’offre IS4U ou l’article du Journal Du Net).

Pourquoi, SALTO-Consulting s’est-elle concentré sur OFBiz (Open For Business) ?

En voici 10 raisons :

  1. Aucun frais de licence: OFBiz est gratuit et open source.
  2. Crédibilité: les utilisateurs OFBiz peuvent compter sur la stabilité organisationnelle, juridique et financière d’un projet de haut niveau intégré à l’Apache Software Foundation (ASF).
  3. Collaboration: OFBiz est sous licence Apache 2.0, licence open source, qui est à la fois ouverte et favorable aux entreprises, en facilitant l’intégration des travaux menés par la communauté tout en permettant de construire des applications dérivées sans droit de propriété.
  4. Flexibilité: Parce que vous aurez un accès complet au code source, vous éliminerez les limitations d’un « système propriétaire » . L’ensemble de la communauté Open Source a pour but de faire de OFBiz une solution aussi claire, flexible et réutilisable que possible.
  5. Réduction des coûts: OFBiz peut vous aider à réaliser un système qui est aussi bon ou meilleur que ceux disponibles auprès de grands fournisseurs de systèmes ERP propriétaires pour un coût total du projet nettement plus bas. Avec OFBiz, vous consacrez votre budget à des fonctionnalités personnalisées et à valeur ajoutée plutôt que sur les droits de licence et de maintenance.
  6. Évolutivité: Basé sur la plate-forme Java, OFBiz a la capacité de s’adapter fonctionnellement (ajouts de fonctionnalités, de modules, etc.) et techniquement (montée en charge, intégration à l’existant) à vos besoins.
  7. « Third Party » : Profitez de plusieurs dizaines d’intégrateurs orientés Open Source offrant des services de qualité pour la mise en oeuvre d’OFBiz.
  8. Mises à jour fréquentes: Profitez de la contribution active et permanente de la communauté mondiale OFBiz.
  9. Riche en fonctionnalités: Issues des normes et des Best Practice, les composants OFBiz permettront de mettre en oeuvre vos besoins par ailleurs déjà intégré dans un cadre commun (FrameWork Fonctionnel).
  10. Intégrateur Fonctionnel – Expert Technologique – Spécialiste de la gestion de projet : Un partenariat efficace avec NEREIDE, contributeur français d’OFBiz, a permis à SALTO-Consulting de réunir au sein de son centre de service IS4U, à la fois :
  • les compétences fonctionnelles nécessaires à la bonne mise en oeuvre des fonctionnalités de OFBiz dans votre contexte métier,
  • l’expertise technique essentielle pour intégrer efficacement et solidement OFBiz au sein de votre système d’information,
  • l’expérience du management de projet « professionnel » pour garantir les coûts, qualité et délai de mise en oeuvre de OFBiz au sein de votre entreprise.

Mais OFBiz, c’est surtout un ERP couvrant l’essentiel des besoins d’une entreprise.

Voici la liste des modules (ou applications) intégrés à OFBiz et une brève description :

  • Accounting Manager : Plan comptable, Gestion des accords et contrat, Facturation, Factures, Paiements, etc.
  • Catalog Manager : Créer des catalogues et peupler les produits par catégories. Maintenir les caractéristiques des produits, règles de prix, promotions, abonnements, commentaires, et plus encore.
  • Content Manager : Une application de gestion de contenu personnalisable vous permet de gérer des sites web, blogs, sondages, et plus encore.
  • Facility Manager : Pick, Pack, et send tout en conservant les données d’inventaire.
  • Manufacturing Manager : MRP, job-shop, routage, acheminement, nomenclature.
  • Marketing Manager : Listes de diffusion, Gestion des campagnes marketing en ligne (par ailleurs pleinement intégrés au e-commerce).
  • Order Manager : Gérer les commandes et les ventes, créer des commandes, gérer les retours.
  • Party Manager : Créer des individus et des groupes, gérer les rôles.
  • Webtools Application : Suivre le trafic du site et les paramètres liés aux performances.
  • WorkEffort Manager : Agenda, calendrier, gestion de projet,

LE TOUT prêt à être personnalisé pour répondre à vos besoins spécifiques.

Enfin, et ce n’est pas la moindre des choses, OFBiz s’intégre avec des applications tierces notamment pour les paiements, les livraisons, les ventes multi-canales (eBay – Amazon – Google – etc.) .

Nous espérons que cet article vous a permis de mieux cerner ce qu’était OFBiz.

 

Salon VAD – eCommerce

18 oct
logo vad

Salon de la VAD et du eCommerce 2010

SALTO-Consulting sera indirectement présent au salon de la VAD et du eCommerce qui se tient à Lille au Grand Palais du 19 au 21 Octobre 2010.

En effet, son partenaire Addressing Business présente son offre TargetClient (solution BtoB d’aide à la conquête commerciale) sur le stand E441 .

Vous pourrez y voir des démonstrations du produit réalisé par SALTO-Consulting pour le compte de Addressing Business.

Une conférence « BtoB : comment capter les meilleurs prospects ? » aura lieu le Mercredi 20 Octobre de 17h30 à 18h15 en Salle 2.

 

Partenariat ACCOVIA

18 oct
logo ACCOVIA

Editeur de Solutions pour le Tourisme

SALTO-Consulting a passé depuis 3 ans des accords de partenariat avec ACCOVIA (Editeur Québécois de progiciel pour le tourisme) notamment pour :

  • Etudier et mettre en oeuvre les architectures logicielles permettant de refondre leur offre sur des technologies Up To Date, performantes et pérennes,
  • Réaliser des Proofs Of Concept permettant de montrer la pertinence de l’intégration d’un moteur de règle (ILOG) notamment pour les packaging d’Offre, la gestion des règles tarifaires, la gestion des contrats Entreprises (CE), Tour Operator, Chaînes hôtelières, Low Cost ou Autocaristes,
  • Intégrer le Front End de Réservation Call Center de Pierre & Vacances dans la nouvelle solution (phase de pilote depuis plus de 3 mois),

Le résultat de cette collaboration est la sortie par ACCOVIA d’une nouvelle gamme de produits que les liens suivants vous présentent :