SlideShare ist ein Scribd-Unternehmen logo
1 von 20
Downloaden Sie, um offline zu lesen
A Simple Plugin
        Architecture for
            Wicket
      Niels van Kampenhout   n.vankampenhout@hippo.nl
      Wander Grevink         w.grevink@hippo.nl




                                                        Wicket Meetup Amsterdam Nov 2007
A Simple Plugin Architecture for Wicket
The Intro

    • Wicket newbies
    • Easy to do cool things with Wicket
    • We like feedback!




                                          http://flickr.com/photos/openthreads/234957983/

A Simple Plugin Architecture for Wicket                Wicket Meetup Amsterdam Nov 2007
The Dream

    • A pluggable GUI




       http://flickr.com/photos/gilest/123760608/




A Simple Plugin Architecture for Wicket             Wicket Meetup Amsterdam Nov 2007
The Use Case

    • Hippo CMS




A Simple Plugin Architecture for Wicket   Wicket Meetup Amsterdam Nov 2007
The Use Case

    • Open architecture
    • Easily customizable, extendible
    • But people want more...!




A Simple Plugin Architecture for Wicket   Wicket Meetup Amsterdam Nov 2007
The Problem

    • Poor customizability on GUI level
    • Changing and recompiling core code necessary




       http://flickr.com/photos/antware/1749436733/



A Simple Plugin Architecture for Wicket               Wicket Meetup Amsterdam Nov 2007
The Problem

    • Many similar but slightly
      different applications
    • Copy paste
    • Forks




                                          http://flickr.com/photos/eqqman/454920412/


A Simple Plugin Architecture for Wicket   Wicket Meetup Amsterdam Nov 2007
The Problem

    • Maintenance hell
    • Support hell




                                          http://flickr.com/photos/eqqman/54508927/


A Simple Plugin Architecture for Wicket          Wicket Meetup Amsterdam Nov 2007
The Solution

    • Generic platform
    • Building blocks




       http://flickr.com/photos/chris-fritz/2011872018/




A Simple Plugin Architecture for Wicket                   Wicket Meetup Amsterdam Nov 2007
The Solution

    • Hippo CMS is just one possible configuration of plugins




       http://flickr.com/photos/17271969@N00/16402704/




A Simple Plugin Architecture for Wicket                  Wicket Meetup Amsterdam Nov 2007
The Solution

    • You can adapt the configuration to your needs




       http://flickr.com/photos/cryptic/294614661/




A Simple Plugin Architecture for Wicket              Wicket Meetup Amsterdam Nov 2007
The Solution

    • Any other configuration of plugins is also possible




       http://flickr.com/photos/liquidx/594302659/




A Simple Plugin Architecture for Wicket              Wicket Meetup Amsterdam Nov 2007
The Tool

    • Wicket




       http://flickr.com/photos/lifeasart/361147812/


A Simple Plugin Architecture for Wicket                Wicket Meetup Amsterdam Nov 2007
The Implementation

    • Prototype




       http://flickr.com/photos/bootload/439400044/




A Simple Plugin Architecture for Wicket               Wicket Meetup Amsterdam Nov 2007
A Wicket page




                                          public RootPanel() {
                                             add(“list”, new ListPanel());
                                             add(“tree”, new TreePanel());
                                             add(“custom”, new SimplePanel());
                                          }




A Simple Plugin Architecture for Wicket          Wicket Meetup Amsterdam Nov 2007
A Wicket page using plugins

                                          public RootPlugin() {
                                          }

                                          Configuration

                                          root:
                                            class = org.example.RootPlugin
                                            children = {list, tree, custom}
                                          list:
                                            class = org.example.listPlugin
                                            children = {}
                                          custom:
                                            class = org.example.simplePlugin
                                            children = {}
                                          tree:
                                            [...]




A Simple Plugin Architecture for Wicket     Wicket Meetup Amsterdam Nov 2007
Plugin configuration

     • Data driven
              Any data store, implement simple interface.
          •

              JCR repository (Jackrabbit)
          •
     • Static
              Initial page setup
          •

              An application is an assembly of plugins
          •
     • Dynamic
              Change plugin configuration at runtime
          •

              Can be triggered by any runtime condition
          •




A Simple Plugin Architecture for Wicket             Wicket Meetup Amsterdam Nov 2007
Global picture

    • A library of Plugins
             Plugins are specialized Panels
         •

             Plugins are packaged in separate jars
         •
    • Tiny core
             Reads plugin configuration
         •

             Loads and assembles plugins
         •

             Manages inter-plugin communication (event based)
         •

             Core model classes
         •

             Abstract base classes for common GUI elements
         •




A Simple Plugin Architecture for Wicket              Wicket Meetup Amsterdam Nov 2007
What's next




    • Load plugins from configuration data store
             Jackrabbit repository classloader
         •

             Wicket upload plugin plugin
         •

             Add or change plugins at runtime
         •




A Simple Plugin Architecture for Wicket          Wicket Meetup Amsterdam Nov 2007
Demo




    • Change plugin configuration at runtime
             Manually by filling in a form
         •

             Triggered by a runtime condition (user credentials)
         •




A Simple Plugin Architecture for Wicket             Wicket Meetup Amsterdam Nov 2007

Weitere ähnliche Inhalte

Was ist angesagt?

Extra aem development tools by Justin Edelson
Extra aem development tools by Justin EdelsonExtra aem development tools by Justin Edelson
Extra aem development tools by Justin Edelson
AEM HUB
 
JPQL/ JPA Activity 1
JPQL/ JPA Activity 1JPQL/ JPA Activity 1
JPQL/ JPA Activity 1
SFI
 

Was ist angesagt? (20)

An easy guide to Plugin Development
An easy guide to Plugin DevelopmentAn easy guide to Plugin Development
An easy guide to Plugin Development
 
Extra aem development tools by Justin Edelson
Extra aem development tools by Justin EdelsonExtra aem development tools by Justin Edelson
Extra aem development tools by Justin Edelson
 
Lightning Distribution for Drupal: Build Advanced Authoring Experiences in Dr...
Lightning Distribution for Drupal: Build Advanced Authoring Experiences in Dr...Lightning Distribution for Drupal: Build Advanced Authoring Experiences in Dr...
Lightning Distribution for Drupal: Build Advanced Authoring Experiences in Dr...
 
The Future Of WordPress Presentation
The Future Of WordPress PresentationThe Future Of WordPress Presentation
The Future Of WordPress Presentation
 
Stencil the time for vanilla web components has arrived
Stencil the time for vanilla web components has arrivedStencil the time for vanilla web components has arrived
Stencil the time for vanilla web components has arrived
 
Writing a Jenkins / Hudson plugin
Writing a Jenkins / Hudson pluginWriting a Jenkins / Hudson plugin
Writing a Jenkins / Hudson plugin
 
Jenkins Plugin Development With Gradle And Groovy
Jenkins Plugin Development With Gradle And GroovyJenkins Plugin Development With Gradle And Groovy
Jenkins Plugin Development With Gradle And Groovy
 
Writing your Third Plugin
Writing your Third PluginWriting your Third Plugin
Writing your Third Plugin
 
Building Creative Product Extensions with Experience Manager
Building Creative Product Extensions with Experience ManagerBuilding Creative Product Extensions with Experience Manager
Building Creative Product Extensions with Experience Manager
 
Maximize the power of OSGi in AEM
Maximize the power of OSGi in AEM Maximize the power of OSGi in AEM
Maximize the power of OSGi in AEM
 
Crash Course in AngularJS + Ionic (Deep dive)
Crash Course in AngularJS + Ionic (Deep dive)Crash Course in AngularJS + Ionic (Deep dive)
Crash Course in AngularJS + Ionic (Deep dive)
 
React Native
React NativeReact Native
React Native
 
Migrating to Git: Rethinking the Commit
Migrating to Git:  Rethinking the CommitMigrating to Git:  Rethinking the Commit
Migrating to Git: Rethinking the Commit
 
Q4E and Eclipse IAM, Maven integration for Eclipse
Q4E and Eclipse IAM, Maven integration for EclipseQ4E and Eclipse IAM, Maven integration for Eclipse
Q4E and Eclipse IAM, Maven integration for Eclipse
 
Building mobile applications with DrupalGap
Building mobile applications with DrupalGapBuilding mobile applications with DrupalGap
Building mobile applications with DrupalGap
 
Eclipse IAM, Maven Integration For Eclipse
Eclipse IAM, Maven Integration For EclipseEclipse IAM, Maven Integration For Eclipse
Eclipse IAM, Maven Integration For Eclipse
 
JPQL/ JPA Activity 1
JPQL/ JPA Activity 1JPQL/ JPA Activity 1
JPQL/ JPA Activity 1
 
Maven, Eclipse And OSGi Working Together
Maven, Eclipse And OSGi Working TogetherMaven, Eclipse And OSGi Working Together
Maven, Eclipse And OSGi Working Together
 
Thoughts on Component Resuse
Thoughts on Component ResuseThoughts on Component Resuse
Thoughts on Component Resuse
 
SharePoint PowerShell for the Admin and Developer - A Venn Diagram Experience
SharePoint PowerShell for the Admin and Developer - A Venn Diagram ExperienceSharePoint PowerShell for the Admin and Developer - A Venn Diagram Experience
SharePoint PowerShell for the Admin and Developer - A Venn Diagram Experience
 

Ähnlich wie A Simple Plugin Architecture for Wicket

Jenkins X Hands-on - automated CI/CD solution for cloud native applications o...
Jenkins X Hands-on - automated CI/CD solution for cloud native applications o...Jenkins X Hands-on - automated CI/CD solution for cloud native applications o...
Jenkins X Hands-on - automated CI/CD solution for cloud native applications o...
Ted Won
 
WebKit for Wayland (Web Engines Hackfest 2014)
WebKit for Wayland (Web Engines Hackfest 2014)WebKit for Wayland (Web Engines Hackfest 2014)
WebKit for Wayland (Web Engines Hackfest 2014)
Igalia
 
blueMarine Or Why You Should Really Ship Swing Applications
blueMarine  Or Why You Should Really Ship Swing  Applications blueMarine  Or Why You Should Really Ship Swing  Applications
blueMarine Or Why You Should Really Ship Swing Applications
Fabrizio Giudici
 
Open stack summit surviving your first checkin
Open stack summit surviving your first checkinOpen stack summit surviving your first checkin
Open stack summit surviving your first checkin
Colin McNamara
 
OpenStack-Summit-Surviving-Your-First-Checkin.pptx
OpenStack-Summit-Surviving-Your-First-Checkin.pptxOpenStack-Summit-Surviving-Your-First-Checkin.pptx
OpenStack-Summit-Surviving-Your-First-Checkin.pptx
OpenStack Foundation
 

Ähnlich wie A Simple Plugin Architecture for Wicket (20)

Jenkins X - automated CI/CD solution for cloud native applications on Kubernetes
Jenkins X - automated CI/CD solution for cloud native applications on KubernetesJenkins X - automated CI/CD solution for cloud native applications on Kubernetes
Jenkins X - automated CI/CD solution for cloud native applications on Kubernetes
 
Conf 2018 Track 2 - Custom Web Elements with Stencil
Conf 2018 Track 2 - Custom Web Elements with StencilConf 2018 Track 2 - Custom Web Elements with Stencil
Conf 2018 Track 2 - Custom Web Elements with Stencil
 
Wicket Portlet Primer
Wicket Portlet PrimerWicket Portlet Primer
Wicket Portlet Primer
 
Building Blueprint With Gwt
Building Blueprint With GwtBuilding Blueprint With Gwt
Building Blueprint With Gwt
 
Jenkins X Hands-on - automated CI/CD solution for cloud native applications o...
Jenkins X Hands-on - automated CI/CD solution for cloud native applications o...Jenkins X Hands-on - automated CI/CD solution for cloud native applications o...
Jenkins X Hands-on - automated CI/CD solution for cloud native applications o...
 
MySQL creative programming
MySQL creative programmingMySQL creative programming
MySQL creative programming
 
DockerCon EU 2015: Trading Bitcoin with Docker
DockerCon EU 2015: Trading Bitcoin with DockerDockerCon EU 2015: Trading Bitcoin with Docker
DockerCon EU 2015: Trading Bitcoin with Docker
 
High Performance Php My Sql Scaling Techniques
High Performance Php My Sql Scaling TechniquesHigh Performance Php My Sql Scaling Techniques
High Performance Php My Sql Scaling Techniques
 
Embedding WPE WebKit - from Bring-up to Maintenance
Embedding WPE WebKit - from Bring-up to MaintenanceEmbedding WPE WebKit - from Bring-up to Maintenance
Embedding WPE WebKit - from Bring-up to Maintenance
 
WebKit for Wayland (Web Engines Hackfest 2014)
WebKit for Wayland (Web Engines Hackfest 2014)WebKit for Wayland (Web Engines Hackfest 2014)
WebKit for Wayland (Web Engines Hackfest 2014)
 
blueMarine Or Why You Should Really Ship Swing Applications
blueMarine  Or Why You Should Really Ship Swing  Applications blueMarine  Or Why You Should Really Ship Swing  Applications
blueMarine Or Why You Should Really Ship Swing Applications
 
2015 DockerCon Using Docker in production at bity.com
2015 DockerCon Using Docker in production at bity.com2015 DockerCon Using Docker in production at bity.com
2015 DockerCon Using Docker in production at bity.com
 
Developing for Plone using ArchGenXML / ArgoUML
Developing for Plone using ArchGenXML / ArgoUMLDeveloping for Plone using ArchGenXML / ArgoUML
Developing for Plone using ArchGenXML / ArgoUML
 
Eclipse Plug-in Develompent Tips And Tricks
Eclipse Plug-in Develompent Tips And TricksEclipse Plug-in Develompent Tips And Tricks
Eclipse Plug-in Develompent Tips And Tricks
 
Writing native Linux desktop apps with JavaScript
Writing native Linux desktop apps with JavaScriptWriting native Linux desktop apps with JavaScript
Writing native Linux desktop apps with JavaScript
 
Wicket Presentation @ AlphaCSP Java Web Frameworks Playoff 2008
Wicket Presentation @ AlphaCSP Java Web Frameworks Playoff 2008Wicket Presentation @ AlphaCSP Java Web Frameworks Playoff 2008
Wicket Presentation @ AlphaCSP Java Web Frameworks Playoff 2008
 
Arquitecturas de microservicios - Medianet Software
Arquitecturas de microservicios   -  Medianet SoftwareArquitecturas de microservicios   -  Medianet Software
Arquitecturas de microservicios - Medianet Software
 
Webpack presentation
Webpack presentationWebpack presentation
Webpack presentation
 
Open stack summit surviving your first checkin
Open stack summit surviving your first checkinOpen stack summit surviving your first checkin
Open stack summit surviving your first checkin
 
OpenStack-Summit-Surviving-Your-First-Checkin.pptx
OpenStack-Summit-Surviving-Your-First-Checkin.pptxOpenStack-Summit-Surviving-Your-First-Checkin.pptx
OpenStack-Summit-Surviving-Your-First-Checkin.pptx
 

Kürzlich hochgeladen

Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 

Kürzlich hochgeladen (20)

Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontology
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 

A Simple Plugin Architecture for Wicket

  • 1. A Simple Plugin Architecture for Wicket Niels van Kampenhout n.vankampenhout@hippo.nl Wander Grevink w.grevink@hippo.nl Wicket Meetup Amsterdam Nov 2007 A Simple Plugin Architecture for Wicket
  • 2. The Intro • Wicket newbies • Easy to do cool things with Wicket • We like feedback! http://flickr.com/photos/openthreads/234957983/ A Simple Plugin Architecture for Wicket Wicket Meetup Amsterdam Nov 2007
  • 3. The Dream • A pluggable GUI http://flickr.com/photos/gilest/123760608/ A Simple Plugin Architecture for Wicket Wicket Meetup Amsterdam Nov 2007
  • 4. The Use Case • Hippo CMS A Simple Plugin Architecture for Wicket Wicket Meetup Amsterdam Nov 2007
  • 5. The Use Case • Open architecture • Easily customizable, extendible • But people want more...! A Simple Plugin Architecture for Wicket Wicket Meetup Amsterdam Nov 2007
  • 6. The Problem • Poor customizability on GUI level • Changing and recompiling core code necessary http://flickr.com/photos/antware/1749436733/ A Simple Plugin Architecture for Wicket Wicket Meetup Amsterdam Nov 2007
  • 7. The Problem • Many similar but slightly different applications • Copy paste • Forks http://flickr.com/photos/eqqman/454920412/ A Simple Plugin Architecture for Wicket Wicket Meetup Amsterdam Nov 2007
  • 8. The Problem • Maintenance hell • Support hell http://flickr.com/photos/eqqman/54508927/ A Simple Plugin Architecture for Wicket Wicket Meetup Amsterdam Nov 2007
  • 9. The Solution • Generic platform • Building blocks http://flickr.com/photos/chris-fritz/2011872018/ A Simple Plugin Architecture for Wicket Wicket Meetup Amsterdam Nov 2007
  • 10. The Solution • Hippo CMS is just one possible configuration of plugins http://flickr.com/photos/17271969@N00/16402704/ A Simple Plugin Architecture for Wicket Wicket Meetup Amsterdam Nov 2007
  • 11. The Solution • You can adapt the configuration to your needs http://flickr.com/photos/cryptic/294614661/ A Simple Plugin Architecture for Wicket Wicket Meetup Amsterdam Nov 2007
  • 12. The Solution • Any other configuration of plugins is also possible http://flickr.com/photos/liquidx/594302659/ A Simple Plugin Architecture for Wicket Wicket Meetup Amsterdam Nov 2007
  • 13. The Tool • Wicket http://flickr.com/photos/lifeasart/361147812/ A Simple Plugin Architecture for Wicket Wicket Meetup Amsterdam Nov 2007
  • 14. The Implementation • Prototype http://flickr.com/photos/bootload/439400044/ A Simple Plugin Architecture for Wicket Wicket Meetup Amsterdam Nov 2007
  • 15. A Wicket page public RootPanel() { add(“list”, new ListPanel()); add(“tree”, new TreePanel()); add(“custom”, new SimplePanel()); } A Simple Plugin Architecture for Wicket Wicket Meetup Amsterdam Nov 2007
  • 16. A Wicket page using plugins public RootPlugin() { } Configuration root: class = org.example.RootPlugin children = {list, tree, custom} list: class = org.example.listPlugin children = {} custom: class = org.example.simplePlugin children = {} tree: [...] A Simple Plugin Architecture for Wicket Wicket Meetup Amsterdam Nov 2007
  • 17. Plugin configuration • Data driven Any data store, implement simple interface. • JCR repository (Jackrabbit) • • Static Initial page setup • An application is an assembly of plugins • • Dynamic Change plugin configuration at runtime • Can be triggered by any runtime condition • A Simple Plugin Architecture for Wicket Wicket Meetup Amsterdam Nov 2007
  • 18. Global picture • A library of Plugins Plugins are specialized Panels • Plugins are packaged in separate jars • • Tiny core Reads plugin configuration • Loads and assembles plugins • Manages inter-plugin communication (event based) • Core model classes • Abstract base classes for common GUI elements • A Simple Plugin Architecture for Wicket Wicket Meetup Amsterdam Nov 2007
  • 19. What's next • Load plugins from configuration data store Jackrabbit repository classloader • Wicket upload plugin plugin • Add or change plugins at runtime • A Simple Plugin Architecture for Wicket Wicket Meetup Amsterdam Nov 2007
  • 20. Demo • Change plugin configuration at runtime Manually by filling in a form • Triggered by a runtime condition (user credentials) • A Simple Plugin Architecture for Wicket Wicket Meetup Amsterdam Nov 2007