Wicket - JUG Lausanne

  • 3,312 views
Uploaded on

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

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
No Downloads

Views

Total Views
3,312
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
57
Comments
1
Likes
2

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Présentation Wicket
    JUG Lausanne – 11/02/2010
    Christian Blavier
    1
    © OCTO 2010
  • 2. Je me présente
    Christian Blavier
    Architecte chez OCTO Technology
    Mes dadas :
    • Industrialisation des développements
    • 3. Méthodologies agiles
    • 4. Ruby On Rails
    • 5. NoSQL
    2
    © OCTO 2010
  • 6. Qu’est-ce que Wicket ?
    3
    © OCTO 2010
  • 7. Ou bien ?
    4
    © OCTO 2010
  • 8. Non, c’est plutôt
    5
    © OCTO 2010
  • 9. Gènes de Wicket
    • Framework d’IHM WEB
    • 10. Open-Source (Apache)
    • 11. Java + HTML … (separation of concerns)
    • 12. Maîtrise du HTML
    • 13. Orienté composant
    6
    © OCTO 2010
  • 14. 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
  • 15. 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 !
    • 16. J’ai fait le choix de mettre les fichiers HTML dans « resources »
    • 17. 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
    • 18. Twitter like
    • 19. Spring / Hibernate
    • 20. JUnit / Unitils
    • 21. 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
  • 22. 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
  • 23. 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
  • 24. Part 0 / Hello world++
    • Prévisualisation HTML
    • 25. Idéal pour collaborer avec des graphistes
    • 26. S’il s’agit d’un enjeu important sur votre projet, il faudra faire des compromis
    • 27. Pensez à wicket:remove !
    • 28. Intégration des ressources graphiques
    • 29. ResourceReference
    • 30. wicket:link, référence automatiquement les ressources contenues dans le package courant
    • 31. Tests unitaires
    • 32. Utilisation de WicketTester
    • 33. Puissant mais brouillon et mal documenté
    12
    © OCTO 2010
    removeLink.add(new Image("icon",
    new ResourceReference(DiscountsEditList.class, "remove_icon.gif")));
  • 34. Part 1 / Première liste de twitts
    The component Triad !
    html markup / component / model
    13
    © OCTO 2010
  • 35. Part 1 / Première liste de twitts
    14
    © OCTO 2010
    Wicket component = MVC controller + MVC view
    Wicket model = MVC model
  • 36. Part 1 / Première liste de twitts
    Les modèles dynamiques rendent la gestion du binding transparente
    15
    © OCTO 2010
  • 37. Part 1 / Première liste de twitts
    • Intégration Spring : http://cwiki.apache.org/WICKET/spring.html#Spring-Solutions
    • 38. Application Object approach : à oublier
    • 39. Proxy Approach : beaucoup trop verbeux
    • 40. Annotation Approach : meilleure solution !
    • 41. Notes :
    • 42. On peut injecter des beans dans la WicketApplication, voir exemple
    • 43. 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());
    }
  • 44. 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 !
  • 45. 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)
    • 46. 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();
    }
    }
  • 47. Part 2 / Modèles avancés
    • Quelques modèles existant :
    20
    © OCTO 2010
  • 48. 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();
  • 49. Part 3 / Formulaires
    22
    © OCTO 2010
  • 50. 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.
  • 51. Part 4 et 5 / Ajax
    • Des composants Ajax disponibles
    • 52. Des Behaviors Ajax
    • 53. Ne pas oublier le outputMarkupId !
    • 54. Utilisation de librairies de composants tierces
    24
    © OCTO 2010
  • 55. Part 5 / Passage d’état
    25
    © OCTO 2010
    • HTTP est un framework sans état
    • 56. Passer un état d’un écran à un autre se fait traditionnellement de 2 manières différentes
    • 57. Passage de données dans l’URL
    • 58. Passage de données par la session HTTP
    • 59. Wicket utilise la deuxième solution, et s’en occupe pour nous
    • 60. 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));
    }
    }
  • 61. Autres fonctionnalités intéressantes
    • Gestion du layout
    • 62. Attention à la prévisualisation
    • 63. Création de composants
    • 64. Extrêmement simple : un fichier Java et un extrait HTML associé
    • 65. Maitrise des URLs
    • 66. Permet de créer des URLS RESTFUL
    • 67. Fonctionne sur GAE
    • 68. Nécessite 2 ou 3 lignes de configuration pour désactiver la persistance fichier
    26
    © OCTO 2010
  • 69. Avantages / inconvénients
    • Avantages
    • 70. Framework simple, facile d’accès
    • 71. Grande maîtrise du HTML produit
    • 72. Collaboration développeurs / web designers inédite
    • 73. POO aisée, création de composants intuitive
    • 74. Bonne productivité
    • 75. Communauté importante
    • 76. Inconvénients
    • 77. Documentation en ligne très perfectible
    • 78. Toutes les situations ne sont pas testables facilement
    • 79. Peu adapté pour des IHMs dynamiques (ex: interfaces à la GMail)
    • 80. Un framework RIA de plus ?
    27
    © OCTO 2010
  • 81. Et par rapport aux autres frameworks ?
    • Par rapport à JSF
    • 82. Wicket est beaucoup plus simple dans l’ensemble (cycle de vie, ajax, création de composants …)
    • 83. Mauvaise maitrise du HTML en JSF (exacerbée par l’utilisation de frameworks comme RichFaces)
    • 84. Par rapport à Tapestry
    • 85. Extrêmement similaires dans leur approche
    • 86. Wicket repose plus sur le Java que tapestry et à l’avantage de mettre en œuvre du simple HTML
    • 87. On peut considérer Wicket comme un successeur de Tapestry
    • 88. Par rapport à GWT
    • 89. Les deux prônent un retour au Java, à la POO et au Swing code-style
    • 90. Wicket permet de maîtriser son HTML là où GWT nous dispense d’en écrire
    • 91. GWT est probablement plus productif
    28
    © OCTO 2010
  • 92. Pourquoi maîtriser le HTML ?
    29
    © OCTO 2010
    Design artistique
    Référencement
    Compatibilité avec les navigateurs
    Accessibilité
  • 93. Maturité
    30
    © OCTO 2010
    Wicket
    Une version 1.5 arrive avec notamment une refonte du WicketTester
  • 94. Ressources conseillées
    • http://wicketinaction.com/
    • 95. http://martijndashorst.com/blog/
    • 96. http://chillenious.wordpress.com/
    • 97. http://yeswicket.com/
    31
    © OCTO 2010
    MUST READ !
    (merci pour les exemples !)
  • 98. C’est fini ! Des questions ?
    32
    © OCTO 2010