You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: _posts/2011-12-14-xwiki-au-banc-de-test.markdown
+44-30Lines changed: 44 additions & 30 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -41,17 +41,16 @@ Alors si j'ai bien tout compris (à vous de vérifier donc :)), le Wiki de 2ème
41
41
XWiki (en version 3.2) propose effet tout ce qui caractérise un CMS :
42
42
43
43
* un portail Web qui présente du contenu éditorial, produit par plusieurs utilisateurs
44
-
* une séparation entre les données (contenues dans Classes et de Objets) et leur présentation (utilisation de Velocity comme moteur de templating, et de CSS)
45
-
* une structuration du contenu : hiérarchisation, organisation en espaces plus ou moins spécialisé (espace forum, espace blog...)
46
-
* une véritable gestion des comptes utilisateur et de leurs permissions sur l'ensemble des objets
44
+
* une séparation entre les données (contenues dans les Classes et les Objets) et leur présentation (utilisation de Velocity comme moteur de templating, et de CSS)
45
+
* une structuration du contenu : hiérarchisation, organisation en espaces plus ou moins spécialisés (espace forum, espace blog...)
46
+
* une véritable gestion des comptes utilisateurs et de leurs permissions sur l'ensemble des objets
47
47
* un versionning du contenu
48
48
49
49
En revanche, pas de workflow de publication, bien qu'il soit tout a fait possible d'en créer un.
50
50
51
51
Car ce qui différentie XWiki des autres produits de Wiki et CMS, c'est son extrème flexibilité.
52
-
Il est important de distinguer plusieurs rôles dans la population des utilisateur : l'utilisateur final (l'internaute), l'utilisateur privilégié (le webmaster), le développeur (qui cré des composants/plugins).
53
-
Du point de vue des utilisateurs privilégiés, XWiki n'est pas particulièrement facile à prendre en main. Il est en revanche [très bien documenté](http://enterprise.xwiki.org/xwiki/bin/view/UserGuide/WebHome)
54
-
Pour les développeurs c'est l'inverse : très mal documenté, et extèmement puissant.
52
+
Du point de vue des utilisateurs privilégiés (le webmaster), XWiki n'est pas particulièrement facile à prendre en main. Il est en revanche [très bien documenté](http://enterprise.xwiki.org/xwiki/bin/view/UserGuide/WebHome)
53
+
Pour les développeurs (créateur de plugins et composants) c'est l'inverse : mal documenté, et extèmement puissant.
55
54
56
55
57
56
## Le modèle de donnée XWiki
@@ -72,46 +71,51 @@ Au niveau rendu, il est possible d'attacher à la classe un "Class Template" : c
72
71
On peux aussi attacher une "Class Sheet" : template Velocity pour le rendu (action `view`) des `Objets`.
73
72
74
73
75
-
## Premier pas en temps que développeur.
74
+
## Premier pas en temps que développeur
76
75
77
-
Très facile à installer (un war à déposer dans un conteneur Servlet), XWiki propose ensuite des fonctionnalités d'import/export, et de personnalisation en ligne.
76
+
Très facile à installer (un war à déposer dans un conteneur Servlet), XWiki propose au développeur des fonctionnalités d'import/export, et de personnalisation en ligne.
78
77
79
-
Ainsi, avec le compte administrateur, et directement dans l'application, on crée et modifie `Classes` et `Objets`.
80
-
Le moteur de template [Velocity](http://velocity.apache.org/) est très facile à prendre en main, et j'ai choisis Groovy pour la "logique applicative" à l'intérieur des pages. [Groovy](http://groovy.codehaus.org/) apporte toute la puissance d'un language dynamique à la plateforme Java, tirant partie des librairies existantes,
78
+
Ainsi, avec les droits suffisants, et directement dans l'application, on crée et modifie `Classes` et `Objets`.
79
+
Le moteur de template [Velocity](http://velocity.apache.org/) est très facile à prendre en main, et j'ai choisis Groovy pour la "logique applicative" à l'intérieur des pages.
80
+
[Groovy](http://groovy.codehaus.org/) apporte toute la puissance d'un language dynamique à la plateforme Java, tirant partie des librairies existantes,
81
81
82
82
Tout ce passe donc à chaud, sans redémarrage.
83
83
Très pratique. Par contre, on édite du code dans un textarea : aucune fonctionnalité d'IDE.
84
84
Il existe cependant un plugin Eclipse pour combler ce manque.
85
85
86
-
Coté versionning, chaque sauvegarde provoque une nouvelle version de l'`Object`, la `Classe`, le `Class Template` ou la `Class Sheet`. Donc possible de revenir en arrière lorsqu'on à cassé quelque chose.
86
+
Coté versionning, chaque sauvegarde provoque une nouvelle version de l'`Object`, la `Classe`, le `Class Template` ou la `Class Sheet`.
87
+
Donc il est possible de revenir en arrière lorsqu'on a cassé quelque chose.
87
88
88
-
La fonction d'export permet de faire un zip avec les modifications et configuration qu'on a apporté à son instance. Et naturellement, la fonction d'import permet de "déployer" son zip sur une autre instance.
89
+
La fonction d'export permet de faire un zip avec les modifications et configurations qu'on a apporté à son instance.
90
+
Et naturellement, la fonction d'import permet de "déployer" son zip sur une autre instance.
89
91
90
92
91
93
## Le développement spécifique
92
94
93
-
XWiki promet une grande facilité d'extension, permettant au développeur d'enrichir les fonctionnalités de base pour "spécialiser" le produit pour un besoin fonctionnel donné.
95
+
XWiki promet une grande facilité d'extension, permettant au développeur d'enrichir les fonctionnalités de base pour ajouter un fonctionnel spécifique.
94
96
95
-
Dans mon cas, je devais proposer à l'intérieur du portail les fonctionnalités de collecte et partage de données publiques. Le service sous-jacent est Smart Data, accessible via une API Http.
97
+
Dans mon cas, je devais proposer à l'intérieur du portail les fonctionnalités de collecte et partage de données publiques.
98
+
Le service sous-jacent est Smart Data, accessible via une API Http.
96
99
Pour résumer :
97
-
* Une page pour uploader un fichier de données, et donner nom/description de la source de données
98
-
* Une page pour afficher et réaliser une recherche sur les sources de données existantes.
99
-
* Une page pour visualiser le contenu d'une source de données (et télécharger le fichier original)
100
-
* Une page pour supprimer les sources de données.
101
100
102
-
A chaque fonctionnalité correspond une API du service Web de Smart Data.
101
+
* Une page pour uploader un fichier de données, et donner le nom et la description de la source de données
102
+
* Une page pour afficher et réaliser une recherche sur les sources de données existantes
103
+
* Une page pour visualiser le contenu d'une source de données (et télécharger le fichier original)
104
+
* Une page pour supprimer les sources de données
103
105
104
-
Première solution : créer une Classe "DataSource", et avoir un Objet "DataSource" pour chaque source de données. Toute la logique de médiation est embarquée dans les page.
106
+
Tout cela est réalisé en invoquant l'API Http du service Web de Smart Data, qui répond en Json.
105
107
106
-
Deuxième solution : créer un "composant" XWiki : des classes Java pour enrichir le fonctionnel XWiki, et encapsuler la logique de médiation un peu mieux que dans les pages. Les fonctionnalités sont ensuite accessible dans les pages sous forme de "macro".
108
+
Il était possible de calquer le cycle de vie d'une DataSource sur une `Classe` XWiki, et de personnaliser les actions `edit``view` et `delete`.
109
+
Toute la logique de médiation aurait été embarquée dans les pages.
107
110
108
-
J'ai pris la seconde solution, car elle me semblait plus "propre": meilleur découpage/découplage de ma logique propre à Smart Data, meilleur testabilité.
111
+
J'ai préféré développer un "plugin" XWiki : un jar pour enrichir le fonctionnel, et encapsuler la logique de médiation. Les pages peuvent invoquer ensuite ces fonctionnalités sous la forme de "macro".
112
+
On obtient un meilleur découpage/découplage de la logique propre à Smart Data, et une meilleur testabilité (jar = projet maven = tests automatisés).
@@ -175,21 +179,31 @@ class DistantDataSourceService implements DataSourceService, ScriptService {
175
179
}
176
180
{% endhighlight %}
177
181
178
-
Le système est assez simple : le composant déclare un certain nombre de services (avec les annotations de la JSR-330), ainsi que les implémentations correspondantes. Ces service sont utilisable directement depuis les Object XWiki (injection de dépendance Spring).
182
+
Le système est assez simple : le composant déclare un certain nombre de services (avec les annotations de la JSR-330), ainsi que les implémentations correspondantes.
183
+
Ces services sont utilisables directement depuis les Object XWiki (injection de dépendances Spring).
179
184
180
185
181
186
## Conclusion : bien ou quoi ?
182
187
183
-
XWiki se veux comme un outil très flexible et très puissant, une plateforme pouvant supporter le développement de n'importe quel portail Web, quelque soit ses fonctionnalités. C'est pour le moins ambitieux.
188
+
XWiki se veux comme un outil très flexible et très puissant, une plateforme pouvant supporter le développement de n'importe quel portail Web, quelque soit ses fonctionnalités.
189
+
C'est pour le moins ambitieux.
184
190
185
191
Après avoir travaillé deux semaines avec, je suis assez tenté de dire que le pari est réussi.
186
192
187
-
Pour un développeur, la courbe d'apprentissage est minimale lorsqu'on connait Spring/Hibernate. Le modèle de donnée est simple à prendre en main. Velocity et Groovy également. Pour moi, l'aggrégation de ces technologies est naturelle et à propos.
193
+
Pour un développeur, la courbe d'apprentissage est minimale lorsqu'on connait Spring/Hibernate.
194
+
Le modèle de donnée est simple.
195
+
Velocity et Groovy sont des outils puissant et faciles à prendre en main.
196
+
Pour moi, l'aggrégation de ces technologies est naturelle et à propos.
188
197
189
-
Maintenant, si j'ai pu atteindre mon objectif, ce ne fut pas sans grincements de dents. Et c'est principalement dû à la flexibilité de l'outil : il y a toujours 2 ou 3 manières de réaliser la même fonctionnalité, et parfois, on s'y perd un peu.
198
+
Maintenant, si j'ai pu atteindre mon objectif, ce ne fut pas sans grincements de dents.
199
+
Et c'est principalement dû à la flexibilité de l'outil : il y a toujours 2 ou 3 manières de réaliser la même fonctionnalité.
200
+
Parfois, on s'y perd un peu.
190
201
191
202
La documentation développeur est un gros point faible à mon sens.
192
-
Enfin, les performances ne sont vraiment pas au niveau. Le temps de chargement d'une page est rédhibitoire pour un site à très fort traffic.
203
+
Enfin, les performances ne sont vraiment pas au niveau.
204
+
Le temps de chargement d'une page est rédhibitoire pour un site à très fort traffic.
205
+
206
+
En conclusion, je suis assez conquis par XWiki, mais pas dans une optique "grosse production de gros site à gros traffic".
207
+
Etre productif en solo est facile, mais je ne suis pas aussi confiant dans le cadre d'une équipe d'une dizaine de personnes.
193
208
194
-
En conclusion, je suis assez conquis par XWiki, mais pas dans une optique "grosse production de gros site à gros traffic". Etre productif en solo est facile, mais je ne suis pas aussi confiant dans le cadre d'une équipe d'une dizaine de personnes.
195
-
Si je peux donc emettre un conseil : essayez le !
209
+
Si je peux donc emettre un conseil : essayez le, et n'hésitez pas à commenter pour donner votre avis !
0 commit comments