Wicket - JUG Lausanne
Upcoming SlideShare
Loading in...5
×
 

Wicket - JUG Lausanne

on

  • 4,430 views

Présentation de 2h sur Wicket donnée le 11/02/2010 au JUG Lausanne.

Présentation de 2h sur Wicket donnée le 11/02/2010 au JUG Lausanne.

A regarder avec les sources de la démo ici :
http://github.com/cblavier/twicker

Statistics

Views

Total Views
4,430
Views on SlideShare
3,992
Embed Views
438

Actions

Likes
2
Downloads
57
Comments
1

6 Embeds 438

http://blog.octo.com 414
http://blog.recette.octo.com 13
http://www.slideshare.net 5
http://static.slideshare.net 4
http://webcache.googleusercontent.com 1
http://www.google.it 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Wicket - JUG Lausanne Wicket - JUG Lausanne Presentation Transcript

  • Présentation Wicket
    JUG Lausanne – 11/02/2010
    Christian Blavier
    1
    © OCTO 2010
  • Je me présente
    Christian Blavier
    Architecte chez OCTO Technology
    Mes dadas :
    • Industrialisation des développements
    • Méthodologies agiles View slide
    • Ruby On Rails View slide
    • NoSQL
    2
    © OCTO 2010
  • Qu’est-ce que Wicket ?
    3
    © OCTO 2010
  • Ou bien ?
    4
    © OCTO 2010
  • Non, c’est plutôt
    5
    © OCTO 2010
  • Gènes de Wicket
    • Framework d’IHM WEB
    • Open-Source (Apache)
    • Java + HTML … (separation of concerns)
    • Maîtrise du HTML
    • Orienté composant
    6
    © OCTO 2010
  • Hello World !
    <h1 wicket:id=“msg”>[Textgoeshere]</h1>
    +
    add(new Label(“msg”, “Hello World !”));
    =
    <h1>Hello World !</h1>
    7
    © OCTO 2010
    2 fichiers : HelloWorld.java et HelloWorld.html
  • Projet Wicket minimal
    pom.xml
    src/main
    /webapp/WEB-INF/web.xml
    /java
    /com/octo/wicket/HelloWorld.java
    /com/octo/wicket/HelloWorld.html
    /com/octo/wicket/WicketApplication.java
    8
    © OCTO 2010
    • Maven en natif !
    • J’ai fait le choix de mettre les fichiers HTML dans « resources »
    • Attention Netbeans ne supporte pas le rechargement à chaud des fichiers HTML en dehors du répertoire webapp (configuration Maven possible)
  • Maintenant la démo
    • Tour de l’application
    • Twitter like
    • Spring / Hibernate
    • JUnit / Unitils
    • Maven / Jetty / HSQLDB / Jrebel
    9
    © OCTO 2010
    Part 0
    Hello World++
    Part 2
    Modèles avancés
    Part 4
    AJAX
    Part 1
    Liste de twitts
    Part 3
    Validation
    Part 5
    jQuery
  • Maintenant la démo
    10
    © OCTO 2010
    Twicker
    Application
    HomePage.java
    .html
    Instancie
    Message
    Message
    Poste des messages
    Récupère des messages
    Message
    TwickerService
    Message
    Persistance
    (Hibernate)
    Message
    Message
    HSQL
    DB
  • Pour jouer avec l’application
    Télécharger les sources
    git clone git://github.com/cblavier/twicker.git
    11
    © OCTO 2010
    Configurer jRebel(optionnel)
    export MAVEN_OPTS="-noverify –javaagent:$JREBEL_DIR/jrebel.jar
    -Drebel.wicket_plugin=true $MAVEN_OPTS"
    Lancer l’application
    mvnjetty:run
  • Part 0 / Hello world++
    • Prévisualisation HTML
    • Idéal pour collaborer avec des graphistes
    • S’il s’agit d’un enjeu important sur votre projet, il faudra faire des compromis
    • Pensez à wicket:remove !
    • Intégration des ressources graphiques
    • ResourceReference
    • wicket:link, référence automatiquement les ressources contenues dans le package courant
    • Tests unitaires
    • Utilisation de WicketTester
    • Puissant mais brouillon et mal documenté
    12
    © OCTO 2010
    removeLink.add(new Image("icon",
    new ResourceReference(DiscountsEditList.class, "remove_icon.gif")));
  • Part 1 / Première liste de twitts
    The component Triad !
    html markup / component / model
    13
    © OCTO 2010
  • Part 1 / Première liste de twitts
    14
    © OCTO 2010
    Wicket component = MVC controller + MVC view
    Wicket model = MVC model
  • Part 1 / Première liste de twitts
    Les modèles dynamiques rendent la gestion du binding transparente
    15
    © OCTO 2010
  • Part 1 / Première liste de twitts
    • Intégration Spring : http://cwiki.apache.org/WICKET/spring.html#Spring-Solutions
    • Application Object approach : à oublier
    • Proxy Approach : beaucoup trop verbeux
    • Annotation Approach : meilleure solution !
    • Notes :
    • On peut injecter des beans dans la WicketApplication, voir exemple
    • Petite gymnastique à effectuer pour les tests afin d’injecter des mocks
    16
    © OCTO 2010
    privateMock<TwickerService> twickerServiceMock;
    @Before
    public voidbefore() {
    tester = new WicketTester(new TwickerTestApplication());
    AnnotApplicationContextMockmockContext = (
    (TwickerTestApplication) tester.getApplication()).getMockContext();
    mockContext.putBean("defaultTwickerService", twickerServiceMock.getMock());
    }
  • Part 2 / Modèles avancés
    17
    © OCTO 2010
    Page
    Label
    Model
    Label
    ListView
    Model
    ListView
    PageStore
    render
    getObject
    Serialization
    render
    getObject
    Les données contenues dans la page sont sérialisées en session.
    Attention à l’empreinte mémoire !
  • Part 2 / Modèles avancés
    18
    © OCTO 2010
    Page
    Label
    Model
    Label
    ListView
    Model
    ListView
    PageStore
    render
    getObject
    Serialization
    getObject
    render
    detach
    detach
    detach
    detach
    • Il faut considérer le modèle Wicket comme un cache de niveau 1 (durée d’une requête HTTP)
    • Les modèles volumineux (par ex : données issues de la base) ne doivent pas être sérialisés en session mais être détachés
  • Part 2 / Modèles avancés
    19
    © OCTO 2010
    Equivalents !
    Imodel cheeseModel = new LoadableDetachableModel(){
    @Override
    public Object load() {
    return dao.getCheeses();
    }
    }
  • Part 2 / Modèles avancés
    • Quelques modèles existant :
    20
    © OCTO 2010
  • Part 2 / Modèles avancés
    Possibilité d’imbriquer les modèles
    21
    © OCTO 2010
    LoadableCheeseModelcheeseModel = new LoadableCheeseModel(cheeseId);
    PropertyModelnameModel = new PropertyModel(cheeseModel, “name”);
    String name = (String) nameModel.getObject();
    nameModel.detach();
  • Part 3 / Formulaires
    22
    © OCTO 2010
  • Part 3 / Validation
    23
    © OCTO 2010
    Validateur fourni
    Validateur custom
    form.add(new TextField("age")
    .setRequired(true)
    .setLabel(new Model("age"))
    .add(NumberValidator.minimum(18)));
    public class MyValidatorextendsAbstractValidator {
    ...
    }
    FeedbackPanel
    <!-- html -->
    <divwicket:id="feedback"></div>
    /* Java */
    add(new FeedbackPanel("feedback"));
    Messages
    # Index.propertiesRequired=Provide a ${label} or else...
    myform.name.Required=You have to provide a name.
    password.Required=You have to provide a password.
    phonenumber.Required=A telephonenumberisobligatory.
  • Part 4 et 5 / Ajax
    • Des composants Ajax disponibles
    • Des Behaviors Ajax
    • Ne pas oublier le outputMarkupId !
    • Utilisation de librairies de composants tierces
    24
    © OCTO 2010
  • Part 5 / Passage d’état
    25
    © OCTO 2010
    • HTTP est un framework sans état
    • Passer un état d’un écran à un autre se fait traditionnellement de 2 manières différentes
    • Passage de données dans l’URL
    • Passage de données par la session HTTP
    • Wicket utilise la deuxième solution, et s’en occupe pour nous
    • Rend l’approche POO beaucoup plus naturelle
    public class EditPersonLink extends Link {
    private final Person person;
    public EditPersonLink(String id, Person person) {
    super(id);
    this.person = person;
    }
    public void onClick() {
    setResponsePage(new EditPersonPage(person));
    }
    }
  • Autres fonctionnalités intéressantes
    • Gestion du layout
    • Attention à la prévisualisation
    • Création de composants
    • Extrêmement simple : un fichier Java et un extrait HTML associé
    • Maitrise des URLs
    • Permet de créer des URLS RESTFUL
    • Fonctionne sur GAE
    • Nécessite 2 ou 3 lignes de configuration pour désactiver la persistance fichier
    26
    © OCTO 2010
  • Avantages / inconvénients
    • Avantages
    • Framework simple, facile d’accès
    • Grande maîtrise du HTML produit
    • Collaboration développeurs / web designers inédite
    • POO aisée, création de composants intuitive
    • Bonne productivité
    • Communauté importante
    • Inconvénients
    • Documentation en ligne très perfectible
    • Toutes les situations ne sont pas testables facilement
    • Peu adapté pour des IHMs dynamiques (ex: interfaces à la GMail)
    • Un framework RIA de plus ?
    27
    © OCTO 2010
  • Et par rapport aux autres frameworks ?
    • Par rapport à JSF
    • Wicket est beaucoup plus simple dans l’ensemble (cycle de vie, ajax, création de composants …)
    • Mauvaise maitrise du HTML en JSF (exacerbée par l’utilisation de frameworks comme RichFaces)
    • Par rapport à Tapestry
    • Extrêmement similaires dans leur approche
    • Wicket repose plus sur le Java que tapestry et à l’avantage de mettre en œuvre du simple HTML
    • On peut considérer Wicket comme un successeur de Tapestry
    • Par rapport à GWT
    • Les deux prônent un retour au Java, à la POO et au Swing code-style
    • Wicket permet de maîtriser son HTML là où GWT nous dispense d’en écrire
    • GWT est probablement plus productif
    28
    © OCTO 2010
  • Pourquoi maîtriser le HTML ?
    29
    © OCTO 2010
    Design artistique
    Référencement
    Compatibilité avec les navigateurs
    Accessibilité
  • Maturité
    30
    © OCTO 2010
    Wicket
    Une version 1.5 arrive avec notamment une refonte du WicketTester
  • Ressources conseillées
    • http://wicketinaction.com/
    • http://martijndashorst.com/blog/
    • http://chillenious.wordpress.com/
    • http://yeswicket.com/
    31
    © OCTO 2010
    MUST READ !
    (merci pour les exemples !)
  • C’est fini ! Des questions ?
    32
    © OCTO 2010