lundi 28 mai 2012

Retours sur le Liferay France Symposium 2012

Le Liferay France Symposium qui a eu lieu le 23 mai 2012 est la grande messe Liferay en France permettant notamment :
  • de présenter le Liferay Marketplace
  • de faire un point sur quelques fonctionnalités intéressantes de Liferay 6.1, 
  • de réaliser des échanges intéressants avec les clients, les partenaires et les "stars" de Liferay
  • et pour ma part de gagner au tirage au sort le livre Liferay In Action


Pour cette deuxième édition du Liferay France Symposium, la première présentation a été un discours de bienvenue de Bryan Cheung, le CEO (Chief Executive Officer ou Directeur général) de la société, qui a mis en avant l'intérêt du portail et de Liferay en particulier pour pouvoir accéder facilement aux informations pertinentes des S.I.

Il en a profité aussi pour présenter l'entreprise Liferay : fondée en 2004, elle est compte aujourd'hui plus de 300 employés répartis dans 11 pays, notamment avec une présence en Europe importante : UK, Allemagne, Espagne et les discussions non officielles avec les représentants Liferay montrent bien qu'une antenne en France devrai bientôt voir le jour.

Une autre présentation réalisée par Brian Kim le COO (Chief Operating Officer ou Directeur opérationnel) de Liferay a permis de présenter le Liferay Market Place qui permettra d'avoir un repository centralisé d'applications, ainsi que de constituer un canal de distribution d'applications pour les développeurs et donc finalement un moyen plus rapide pour les utilisateurs finaux d'avoir de nouvelles applications à disposition.

D'autres présentations techniques et de retour clients se sont succédé tout le long de cette journée :

  • une présentation sur quelques outils intéressants pour les utilisateurs finaux, 
  • un retour d'expérience par Pascal Begue d'Air France sur leur intranet. J'ai trouvé cette présentation particulièrement intéressante montrant bien les difficultés classiques rencontrées sur les portails d'infrastructure (que mes clients ont aussi rencontrées) et comment en migrant vers Liferay "le téléphone ne sonne plus". Ils ont donc particulièrement appréciés la solution ainsi que l'aide apportée par l'expertise de la société Beorn Technologies, 
  • une présentation sur les bonnes pratiques de développement et de méthodologie pour faciliter les migrations de version Liferay
  • une présentation sur la gestion avancée des contenus web et notamment la possibilité de créer des sites en grand nombre en utilisant les possibilités offertes par les templates de pages, les templates de sites ou encore les API.
  •  ... 


Joseph Shum de Liferay a expliqué le Business Model de Liferay, et notamment la raison de la création de la version Entreprise Edition de Liferay. En effet, avant la création de la version EE du produit, il fallait créer des Fix Patchs pour chaque client ayant acheté du support et gérer des versions différentes pour chaque client. La version Entreprise Edition de Liferay permet d'avoir une version commune résultante des corrections de la version C.E et donc beaucoup plus stable.

Pour conclure, Bryan Cheung a présenté le futur de Liferay. Si rien de révolutionnaire n'a été mentionné, la gestion dans le cloud et les problématiques de PaaS et SaaS sont au coeur des problématiques de R&D chez Liferay, wait and see ....

samedi 31 mars 2012

Masquer les erreurs de compilation du Hook (aussi valable pour les projets JEE)

L'intéret du Hook est d'ajouter des points d'extension de Liferay permettant ainsi de customiser Liferay sans toucher au code du portail.
C'est le mode privilégié pour les modifications du portail Liferay.

Il a néanmoins 2 problèmes :
- son périmètre qui est limité aux surcharges des JSP Liferay, à quelques propriétés de configuration ou de traduction, et à la gestion d'événnements Liferay ou du modèle fourni par le Service Builder.
- la compilation en erreur en développement, c'est de ce point que nous allons parler.

Si l'on veut customiser une page de Liferay, celle-ci a souvent besoin d'importer d'autres pages (exemple : /html/portal/init.jsp) ou des ressources déclarées dans le portail lui-même (themeDisplay, ...).

A part importer une grande partie du code dans notre projet de Hook, il va y avoir des erreurs de compilation qui ne seront pas génantes pour le déploiement mais polluent fortement l'environnement de développement.

Si on ne peut pas facilement éviter ces erreurs de compilation, on peut au moins les masquer à l'aide d'Eclipse.

Cliquer droit sur le projet de Hook > Properties > Validation
Sélectionner "Enable project specific settings"
Cliquer sur le bouton "..." de la ligne "JSP Syntax Validator"


Cliquer sur le bouton "Add exclude group" 


Selectionner "Exclude group" et cliquer le bouton "Add Rule...".
Selectionner "Folder or File name"


 Cliquer sur "Browse folder" et selectionner le répertoire contenant les jsps modifiés par le Hook


Valider et forcer la compilation.

Et voilà les erreurs de compilation n'apparaissent plus.

Une autre possiblité, c'est d'utiliser le plugin liferay pour Eclispe IDE 1.3+, une option du wizard pour le  Hook permet de désactiver la validation de la syntaxe des JSP.

jeudi 15 mars 2012

JUG Montpellier - Les portails & Liferay

Cette fois-ci, je m'y colle.

En effet, après avoir assisté aux présentations du JUG Montpellier sur Google application Engine ou Les interfaces web en 2011, je me suis mis du côté du speaker pour présenter les portails en général et Liferay en particulier.

Après avoir expliqué l'apparition du portail dans le paysage web, avoir défini et montrer le rôle des portails, j'ai réalisé un rapide tour sur l'offre du marché des portails java actuels (WebLogic Portal, l'offre conjointe GateIn par JBoss / eXoplatform, Websphere Portal, ...).

Pour poursuivre sur une explication un peu plus technique sur les portlets et leurs développements. Après une petite pause pour se remettre des PortletRequest et autres particularités liées aux normes java de portlets (JSR 168/286), il était temps d'aborder Liferay.

Après une présentation de Liferay abordant l'installation, les atouts de Liferay et un petit tour rapide sur le catalogue fournie de portlets, j'ai abordé le développement avec Liferay ( Plugin SDK, Service Builder, Liferay IDE, ...) et les problématiques d'organisation / d'habilitation des utilisateurs et des pages.

Et pour finir par une petite démonstration abordant ces problématiques ainsi que l'administration du portail.

Partager et communiquer sur des produits de portail est toujours intéressant mais constitue un vrai challenge que celui d'aborder en une soirée les principes que l'on détaille par exemple en formation en 3 jours.

mercredi 29 février 2012

Liferay 6.1 EE (Enterprise Edition)

La version 6.1 Entreprise de Liferay est sortie il y a une semaine alors que la version CE (Community Edition) est déjà sortie depuis quelques semaines déjà (fin 2011).

On peut citer quelques nouveautés intéressantes :

  • Les sites viennent remplacer l'ancienne notion de communauté pour apporter plus de souplesse dans l'organisation et pour répondre au réel besoin d'utilisation des anciennes communautés à savoir la création de sites web. Un site peut être créé à partir d'un modèle de site dont les modifications du modèle amène à la mise à jour des sites correspondants.
  • Il est possible de gérer aussi plusieurs versions d'un même site en prévision d'une publication ultérieure.
  • Une meilleure intégration avec les repositories tiers tel que Documentum et Sharepoint.
  • Une organisation des contenus plus facile à gérer avec des liens vers les autres contenus liés, les documents et les média.
  • Des workflows avancés peuvent être appliqués aux documents pour les processus d'édition et d'approbation.

Plus de détails sur le lien suivant : PRESS RELEASE: New Liferay Portal 6.1 EE Empowers Enterprise Business Users.


C'est aussi le moment idéal de faire un petit rappel sur la différence entre ces 2 éditions.

  • Liferay Portal Community Edition (CE) est la version open source  (respectant la  licence  LGPL depuis Liferay 6.x) soutenue par la communauté. 
Elle possède les dernières fonctionnalités avec une fréquence de sortie plus soutenue que la version entreprise mais avec une durée de vie du support plus court.

  • Liferay Enterprise Edition (EE) est une version stable de Liferay et payante.
Cette édition donne accès aux mises à jours, aux patchs, à la documentation et au support.
Plusieurs niveaux de contrats de supports sont disponibles.
Chaque version est supportée pour une durée de 4 ans.

Cette édition permet donc de fourir un support professionnel pour Liferay pour les clients grands comptes de Liferay.

lundi 12 décembre 2011

Interfaces web en 2011

Pour cette fois, le JUG Montpellier délaisse Java et tout ce qui tourne autour (Android, Spring, Liferay, SOA ou WebLogic par exemple) pour s'ouvrir à d'autres horizons : les interfaces web en 2011.

La soirée de la semaine dernière était décomposée en 2 parties.

Une première montrait les évolutions des interfaces utilisateurs, en faisant un rappel des grands principes d'ergonomie, de graphisme, ou d'expérience utilisateur.

J'ai bien apprécié l'évolution technologique du web
- dans les années 1990, on a fait du HTML + CSS + JAVASCRIPT et l'on appelait cela du DHTML,
- dans les années 2000, on a fait du HTML + CSS + JAVASCRIPT et l'on appelait cela de l'AJAX,
- dans les années 2010, on va faire du HTML + CSS + JAVASCRIPT et l'on va appeler cela de l'HTML 5.

C'est un peu carricatural et réducteur mais comme dirait l'autre "C'est pas faux".

Une autre évolution est aussi liée à la diversité des écrans, euh des plateformes : mobile, tablette, netbooks, ...


La deuxième partie était consacrée à l'accesibilité des interfaces web
La présentation a commencé par une démonstration qui nous montre sur des sites grands publics ce que "voit" un aveugle aidé par une assistance vocale et là c'est le drame ...
Des sites constitués en grande majorité d'images sans texte ou de liens associés, et l'on se retrouve tel une personne en fauteuil roulant dans les couloirs du métro : impossible d'aller bien loin.

Ceci à permis de nous sensibiliser et de démontrer l'intérêt de l'accessibilité pour toutes les personnes en situtation d'handicap.
Les avantages de rendre son site accessible sont multiples :
- un meilleur référencement par les moteurs de recherche,
- une meilleure ergonomie,
- et une conformité avec la loi sur l'handicap de 2005 qui "obligent" tous les sites web publics à être accessibles.

Mais accessible cela veut dire quoi concrètement ?

On peut déjà parler qu'il y a différents niveaux et atteindre le niveau bronze constitue déjà une gageure, surtout lorsque l'on décide de vouloir atteindre ce niveau après la réalisation du site. Eh oui, connaitre les règles du jeu après avoir jouer rend plus difficile la gagne.

On peut décomposer les règles à respecter en 13 thématiques :
- images
- frames
- couleurs (contraste, la couleur ne doit pas être le seul moyen de porter l'information, ...)
- multimédia (pouvoir contrôler une piste audio ou vidéo : pause, stop, ...)
- tableau
- liens (pas de lien vide, ...)
- scripts
- sémantique des balises
- balises titres
- css (pied, em, % sont les seules valables)
- form (bouton "ok" c'est beau mais cela manque d'informations)
- navigation
- le reste (clignotement autorisé si l'on peut l'éteindre)

Ces règles sont nombreuses (plus de 300) et à réaliser sur chaque page du site ...

Un logiciel libre Tanaguru (.com) peut nous aider sur certaines règles automatisables mais elles ne le sont pas toutes, loin de là.

Voilà un critère de plus à prendre en compte dans nos applications si "on" veut bien y mettre un minimum de budget.

vendredi 7 octobre 2011

JUG Montpellier : session sur Google Application Engine

Comme vous savez, Oxiane Méditerranée sponsorise le JUG Montpellier et donc il est intéressant pour moi de faire un retour sur la dernière session du JUG Montpellier sur Google Application Engine présentée la semaine dernière.

Cette session a été présentée par Martin Delemotte, co fondateur de Kazelys et créateur du site http://www.vadequa.com.
"Vadequa est un site de rencontre entre particuliers et entreprises."
C'est un site web du type Meetic Affinity entre particuliers et entreprises pour connaître le degré d’adéquation d’un candidat à une entreprise.

Le gros intérêt pour le sujet du jour est que ce site a été créé sur la plate-forme GAE avec plus d'un an de développement.


Ce que je retiens de cette soirée,
  • un certain nombre de bonnes pratiques sont à mettre en place s'il l'on ne veut pas se casser les dents,
  • une explication claire mais forcément rapide des grands composants de la plate-forme,
  • la phrase de Martin qui restera sûrement à la postérité "Chaque seconde, une machine meurt dans le Cloud", et nous allons voir que ce n'est pas sans incidents ...


Un petit rappel sur GAE :
Google Application Engine est une PAAS (Plate-forme As A Service) visant à être scalable
ou dit autrement un service d'hébergement d'applications web dans les nuages visant avant tout à répondre à de nombreux clients simultanés sans dégradation de performance

Cette plate-forme possède un certain nombre de contraintes notamment pour assurer cette scalabilité
  • sur les threads, les API Java, les accès file systèm et les accès réseau,
  • des requête de 30s maximum, avec 1 seule écriture par seconde et par entité est garantie (la réalité est plutôt de l'ordre de 10 écritures par seconde),
  • les caractéristiques des instances sont inconnues, mais c'est vrai ce n'est justement pas notre problème


Pour assurer la persistance de ses données, GAE s'appuie sur un datastore qui est implémentée par une BigTable Google, du pur NOSQL.
Une BigTable peut être vue comme une hashtable géante distribuée contenant des entités java.
Elle ne comporte pas de schéma.

Les données peuvent être répliquées sur plusieurs DataCenters.

Il y a 2 grands types de réplications :
  • Master slave Datastore
Le client communique uniquement avec l'instance Master sauf si celle-ci crash.
Dans ce cas, l'instance slave devient Master et une nouvelle instance slave est utilisée.
Ce mode de réplication devrait être abandonnée à terme par Google pour des problèmes sur la disponibilité et la latence des données.

  • High Replication Datastore
Le client écrit en synchrone sur 3 DataCenter simultanément.
Ce mode de replication permet d'avoir une haute disponibilité et fiabilité des données.
Mais il coûte plus cher que l'option maître / esclave.

Plus d'infos sur http://code.google.com/intl/fr/appengine/docs/python/datastore/hr.

En tout cas cette problématique de réplication me rappel très fortement les tests que j'ai effectué sur la haute disponibilité des données avec Oracle Database en mode Dataguard ou en mode RAC.


Pour accéder au datastore, il est possible d'utiliser JDO ou JPA possible mais avec quelques spécificités ...
et souhaitable d'utiliser par exemple Objectify, qui est un framework permettant de simplifier la persistance de données et leurs manipulations dans Google App Engine, il rajoute une couche d’abstraction facilitant énormément les différentes interactions (par rapport à l'API bas niveau  Google App Engine/J).

Il est possible de faire directement des requêtes GQL mais attention pas de join, de filtre, de like, ...

Pour les transactions, il n'est pas possible de faire des transactions entre entités sauf au sein d'un Entity Group.
Un Entity Group est une entité hiérarchisée localisées sur le même noeud d'un datastore (très important dans le cas du High Replication Datastore).
Ce qui amène ici à des points essentiels dans l'utilisation de Google App Engine, c'est qu'il faut penser à son modèle pour qu'il soit scalable dès la conception et notamment à ses notions d'Entity Group.

Un petit exercice donné par Martin : soit une entité Candidature, doit-elle être dans le même Entity Group que l'entité Candidat ou que l'entité Entreprise ou que l'entité racine ?
Quelques secondes de réflexion ...
La première réponse est la bonne, en effet le nombre de candidatures va être directement lié au nombre de candidats donc pour pouvoir assurer la montée en charge, il faut les regrouper dans un même Entity Group.


La scalabilité est le but à atteindre et ceci se fait au détriment de la performance, par exemple le datastore est lent (25-100ms) pour un get, (50-160) pour un put.

Alors comment réduire le temps de réponse ?
En utilisant par exemple Memcache qui est un cache distribué (une seule instance) mais attention les données y sont volatiles et peuvent y être enlevées n'importe quand. Le rechargement de ces données doit donc être prévue.
Ce cache n'est bien sur pas transactionnel (sauf putIfUntouched de manière atomique, je vous laisse encore une fois voir pour les détails) ou d'utiliser le "cache" JVM par des données static mais attention il est très volatile car le changement d'instance est fréquente. De toute façon je déconseille toujours de mettre des données en static non maîtrisées si l'on veut éviter les fuites mémoires (dans GAE cela sera a priori peu probable).

D'autres techniques sont possibles : grouper en parallèle les requêtes au datastore, gérer par des tâches de fond en asynchrones, ou encore dé-normaliser en créant des entités intermédiaires et les re-synchroniser par des taskqueue
Exemple : candidature liés à 3 entités candidat, dossier, ... et on ne va manipuler que ses entités intermédiaires.

Pour en revenir à la vraie vie, il faut savoir que le taux d'erreur quotidien est plus élevé que sur un serveur individuel, d'où la phrase "Chaque seconde, une machine meurt dans le Cloud" et son implication : le code doit prévoir les interruptions de services (taskqueue, memcache) ... et là je vous laisse imaginer au cas pas cas les solutions ...

Quelques mots sur le support et les prix :
Le support est réalisé par les équipes SRE (Site Reliability Enginneer) mais il faut compter 500$/mois pour un compte premium.
La version gratuite qui a fait débat il y a quelque temps lié au resserrement important sur les quotas. En effet avant, une application avec un trafic de 5 millions de pages pouvait être gratuite maintenant les quotas en gratuit suffisent juste pour une application avec un faible traffic.
Et donc on arrive à la formule payant à partir de 9$/mois min et plus en fonction des quotas. Pour tout savoir : http://www.google.com/enterprise/appengine/appengine_pricing.html 

La Roadmap pour ce qui est du plus important : le SSL et le Like dans les requêtes (ouf).

Pour conclure, c'est une plate-forme scalable mais dès la conception / développement il faut avoir en tête les différentes contraintes.
Et à la question, malgré les difficultés rencontrées, est-ce que ta prochaine application sera réalisée avec GAE, Martin a répondu oui, d'autant qu'il sait maintenant comment éviter les quelques pièges de la plate-forme. Comme quoi l'expertise à un coût !!!

dimanche 17 juillet 2011

Liferay Marketplace

Le but de cet App store est de proposer une plateforme permettant de publier, partager, et de monétiser des solutions construites sur la plateforme Liferay.
Une App est une application distribuable tel qu'une portlet, un hook, un theme, ...
Ce Marketplace est prévu pour la fin 2011.



Plusieurs types de participations sont prévues :
  • Basic participation : gratuit
    Un profile pour publier des applications gratuites
    Un guide développeur
  • Developer Program : $99 par an
    Un profile pour publier des applications payantes certifiés EE (commision de 20% pour Liferay)
    Une licence d'un an pour développer pour Liferay Portal EE
    Une licence pour Liferay Developper Studio
    Un guide développeur
    Les équipes de Liferay vérifie alors la compatibilité des applications avec la version EE de Liferay.


Liferay a déjà prévu différents modes de facturation : selon le nombre d'utilisateurs, selon le nombre de sessions utilisateurs, selon le nombre de serveurs, ou encore selon le nombre de CPU.                              


Quelques liens complémentaires :
- Vidéo de présentation

- PDF de présentation