SlideShare una empresa de Scribd logo
1 de 20
Descargar para leer sin conexión
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

Más contenido relacionado

La actualidad más candente

An easy guide to Plugin Development
An easy guide to Plugin DevelopmentAn easy guide to Plugin Development
An easy guide to Plugin DevelopmentShinichi Nishikawa
 
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 EdelsonAEM HUB
 
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...Acquia
 
The Future Of WordPress Presentation
The Future Of WordPress PresentationThe Future Of WordPress Presentation
The Future Of WordPress PresentationDougal Campbell
 
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 arrivedGil Fink
 
Writing a Jenkins / Hudson plugin
Writing a Jenkins / Hudson pluginWriting a Jenkins / Hudson plugin
Writing a Jenkins / Hudson pluginAnthony Dahanne
 
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 GroovyDaniel Spilker
 
Writing your Third Plugin
Writing your Third PluginWriting your Third Plugin
Writing your Third PluginJustin Ryan
 
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 ManagerJustin Edelson
 
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 ICF CIRCUIT
 
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)ColdFusionConference
 
Migrating to Git: Rethinking the Commit
Migrating to Git:  Rethinking the CommitMigrating to Git:  Rethinking the Commit
Migrating to Git: Rethinking the CommitKim Moir
 
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 EclipseCarlos Sanchez
 
Building mobile applications with DrupalGap
Building mobile applications with DrupalGapBuilding mobile applications with DrupalGap
Building mobile applications with DrupalGapAlex S
 
Eclipse IAM, Maven Integration For Eclipse
Eclipse IAM, Maven Integration For EclipseEclipse IAM, Maven Integration For Eclipse
Eclipse IAM, Maven Integration For EclipseCarlos Sanchez
 
JPQL/ JPA Activity 1
JPQL/ JPA Activity 1JPQL/ JPA Activity 1
JPQL/ JPA Activity 1SFI
 
Maven, Eclipse And OSGi Working Together
Maven, Eclipse And OSGi Working TogetherMaven, Eclipse And OSGi Working Together
Maven, Eclipse And OSGi Working TogetherCarlos Sanchez
 
Thoughts on Component Resuse
Thoughts on Component ResuseThoughts on Component Resuse
Thoughts on Component ResuseJustin Edelson
 
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 ExperienceRicardo Wilkins
 

La actualidad más candente (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
 

Similar a A Simple Plugin Architecture for Wicket

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 KubernetesTed Won
 
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 StencilTechExeter
 
Wicket Portlet Primer
Wicket Portlet PrimerWicket Portlet Primer
Wicket Portlet Primerate.douma
 
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
 
MySQL creative programming
MySQL creative programmingMySQL creative programming
MySQL creative programmingGiuseppe Maxia
 
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 DockerDocker, Inc.
 
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 TechniquesZendCon
 
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 MaintenanceIgalia
 
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
 
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.comMathieu Buffenoir
 
Developing for Plone using ArchGenXML / ArgoUML
Developing for Plone using ArchGenXML / ArgoUMLDeveloping for Plone using ArchGenXML / ArgoUML
Developing for Plone using ArchGenXML / ArgoUMLJazkarta, Inc.
 
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 TricksChris Aniszczyk
 
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 JavaScriptIgalia
 
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 2008Baruch Sadogursky
 
Webpack presentation
Webpack presentationWebpack presentation
Webpack presentationRAHUL SHARMA
 
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 checkinColin 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.pptxOpenStack Foundation
 

Similar a 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
 

Último

Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
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 TerraformAndrey Devyatkin
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
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, Adobeapidays
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
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...apidays
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesBoston Institute of Analytics
 
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 DiscoveryTrustArc
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingEdi Saputra
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 
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, ...apidays
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 

Último (20)

Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
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
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
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
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
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...
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
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
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
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, ...
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 

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