Upload
samijaber
View
4.799
Download
2
Embed Size (px)
DESCRIPTION
Conférence sur un retour d'expérience de projet GWT en mode agile pour le compte de la société Arkadin (DNG Consulting & Palo IT)
Citation preview
1
GWT à l'épreuve du feuby Sami Jaber (DNG Consulting)
twitter @samijaberhttp://www.dng-consulting.com
2
Abstract
• Qu'est-ce que le projet Cobra ?
• Une démo, une démo, une démo !
• Les défis techniques d'un tel projet
3
Speaker• Consultant, formateur et fondateur de la société DNG
Consulting, spécialisée dans le développement d'applications JEE et .NET
• Auteur livre "Programmation GWT 2" paru chez Eyrolles
• http://www.dng-consulting.com : expertise technologies Google
• Blog : http://www.samijaber.com & Twitter : @samijaber
• Projet réalisé en commun avec Palo-IT (http://www.palo-it.com)
Arkadin & Cobra
Spécialiste des services de collaboration à distance (160M€ CA, 1000 Collaborateurs)
Présence Globale (29 Pays, 25K Clients) avec Forte Culture cliente locale (70% de nos ressources humaines, 15 langues)
11M Conférences, 40M de Participants, 2.5B de Minutes
Offrir le meilleur support possible à nos clients avec notamment, un temps d’attente ou de résolution de problème le plus court possible
Une application de gestion de conférences audio & web, utilisée par les opérateurs de notre Service Client répartis sur un plan mondial (US, UK, Asie, …)
4
Cobra en image
5
Support Level
Participants en conférence
Liste des participants
LA DEMO, LA DEMO !
6
L'architecture technique Cobra
7
Cobra Backend
Cobra Server UKC
OM
(C
om
ponent
Ob
ject
Model)
CO
M (
Com
ponent
Ob
ject
Model)
CO
M (
Com
ponent
Ob
ject
Model)
CO
M (
Com
ponent
Ob
ject
Model)
Inter-Cobra communicationREST + RestEasy
Inter-Cobra communicationREST + RestEasy
Ponts
Ponts
télé
phoniq
ues
télé
phoniq
ues
Pla
tefo
rme A
ud
ioPla
tefo
rme A
ud
io
Ponts
Ponts
télé
phoniq
ues
télé
phoniq
ues
Pla
tefo
rme A
ud
ioPla
tefo
rme A
ud
io
clients
Cobra Backend
Cobra Server US
Console GWT
Console GWT
Pourquoi le choix GWT• La culture et l'architecture en place dans la société aurait penché
pour un choix .NET en Silverlight ou Flash (des compétences que nous avons par ailleurs)
• … Mais les contraintes de délais, la nécessité de supporter du quasi temps réel et une ergonomie AJAX ont joué en faveur de GWT
• Aujourd'hui, après 2 ans de développement (équipe de 6 à 8 personnes), ce choix s'avère plus que jamais pertinent
• On estime à +100% la productivité générée par ce choix technique
• Dans l'équipe, aucun développeur n'est un gourou de JavaScript et ne souhaite le devenir, on aime Java !
8
Les défis techniques
• Un projet en mode agile
• Gestion du push sur HTTP (GWT EventService – Atmosphere)
• Ponts Java/COM, performances, fuites mémoire
• Code Splitting
• Tests fonctionnels avec Selenium
• Le monitoring (DevOps)
• Jboss 7.1, EJB 3/JPA 2
9
Gestion de projet en mode agile
• Des itérations relativement courtes de 3 semaines
• Un outillage SCRUM complet :
JIRA, FishEye, SVN
Jenkins (intégration continue)
Confluence & Google docs (documentation & tests)
QA Director (tests fonctionnels)
10
JIRA
FishEye
Transparence => Confiance
Défi technique principal : le push
• L'application nécessitait de pouvoir recevoir une centaine d'évènements par seconde
• Notre choix s'est porté sur GWT EventService, un framework OpenSource qui gère du short/long polling & streaming
• Nécessité de patcher pour gérer plus finement certaines déconnexions réseau intempestives (merci l'Open Source!)
• Nous avons également étudié le projet Atmosphere, un excellent produit même si peu mature au moment de notre évaluation
• Cobra sait gérer aujourd'hui 25 appels par seconde et des centaines d'évènements par seconde (possible de faire mieux!)
11
Communication avec .NET • Toute la plateforme destinée à gérer les conférences
téléphoniques est développée en .NET (par les équipes Arkadin)
• Il fallait un moyen performant en mode In-Process d'appeler des services .NET : nous avons opté pour COM (Component Object Model)
• L'outil Java/COM retenu initialement, Comfyj de Teamdev, s'est avéré buggué (fuites mémoires, problèmes de perfs, …)
• Nous avons dû le remplacer par un pont Open Source : Jacob, moins riche, moins documenté mais … OpenSource !
• Après quelques patchs et optimisations, Jacob a tenu la charge
12
Outils clés : DebugDiag, WinDebug, ProcExp
Fragmentation du code JS• L'application est très importante, plusieurs dizaines de milliers de
lignes de code
• GWT propose une fonctionnalité très puissante, celle de générer plusieurs fichiers JavaScript
des fragments de code chargés uniquement si l'utilisateur sollicite la fonctionnalité en question (à la manière d'un ClassLoader Java)
• Le FrontEnd et le BackEnd ont été "codesplittés", ce qui a réduit considérablement le temps de chargement de l'application
Un opérateur (non admin) ne charge ainsi à aucun moment le JavaScript de l'application de BackEnd
13
Plateforme JEE serveur
• Jboss 7.1 : compatible OSGI, empreinte mémoire réduite, support EJB 3.1 et JPA 2 (Java Persistence API 2)
• Stack Metro (implémentation JAX-WS) pour la communication avec les WebServices .NET (Basic Profile)
• Ehcache comme cache applicatif
• Utilisation de REST Easy pour la communication entre les différents serveurs Cobra (lorsqu'un groupe de support est fermé, il communique avec un autre groupe actif dans le monde pour prendre le relai)
• Grâce à ce mécanisme, un support 24/7 est possible !
14
Tests fonctionnels (1/2) • Comme le montre la démo, cette application est très riche et très
complexe
• Les tests unitaires ne suffisent pas à garantir la qualité dans ce type d'application où l'interaction avec l'utilisateur est primordiale
• Nous avons donc bâti un environnement de tests fonctionnels basé sur l'outil Selenium simulant des opérateurs de type "robots"
• Un robot "client" entre en conférence puis est intercepté par un robot "opérateur" qui l'assiste, un robot agit à une vitesse qu'aucun humain n'est capable d'assurer manuellement avec un navigateur
• Nous avons également utilisé ces robots pour nos benchs
• Un humain peut se tromper en testant, pas un robot
15
Tests fonctionnels (2/2) • Piloter une IHM Web avec un robot nécessite de générer des
identifiants de composants graphiques <div id="MoveToConf">…</div>
• Plutôt que de "polluer" l'application de production avec des attributs ID dans les pages HTML, nous avons utilisé une autre fonctionnalité clé de GWT : Le Defferred Binding
Permet de générer des fichiers JavaScript différents en fonction d'un paramètre personnalisé
Le testeur charge http://server/cobra.html?debug=true et la production http://server/cobra.html (on fait ainsi l'économie de balises inutiles en production)
16
Monitoring & DevOps• Assuré par l'outil OpenSource JavaMelody
(http://code.google.com/p/javamelody/)
• Simple et peu intrusif mais surtout gère des indicateurs GWT (temps d'appels des services RPC)
• Nous avons dû là encore le patcher pour le rendre compatible Jboss 7 (encore merci à l'Open Source!)
17
Et voilà, des questions ?
18