SlideShare a Scribd company logo
XWiki
                              XWiki’s component architecture




                                                         Copyright (c) Vincent Massol - 2011
  September 2011


Wednesday, September 21, 11
Agenda

                   •     Needs

                   •     Discarded solutions

                   •     Chosen solution

                   •     Lessons learnt

                   •     Future



                                                    Copyright (c) Vincent Massol - 2011



Wednesday, September 21, 11
XWiki Platform




                 ... for developing (collaborative) web applications
                                                                       Copyright (c) Vincent Massol - 2011



Wednesday, September 21, 11
Needs (1/2)
                   • XWiki is a runtime development platform
                    • Need solution for code reuse
                    • Need solution to change behaviors
                   • Ability to install extensions transitively at
                          runtime
                   • As standard as possible
                                                       Copyright (c) Vincent Massol - 2011



Wednesday, September 21, 11
Needs (2/2)


                         • Ability to change implementation without
                              changing existing components




                                                         Copyright (c) Vincent Massol - 2011



Wednesday, September 21, 11
Discarded Solutions

                   • Warning: Choice done 2 years ago
                   • OSGi: too complex
                   • Resin Pomegranate: not standard enough
                   • Guice: static binding only
                   • CDI 1.0: static binding only
                                                  Copyright (c) Vincent Massol - 2011



Wednesday, September 21, 11
Chosen Solution (1/2)
                   • XWiki’s own interfaces
                   • Implemented using Plexus initially
                   • Custom implementation after Plexus was
                          EOLed
                         • Using JSR330’s annotations
                   • First focus: have components for everything
                                                        Copyright (c) Vincent Massol - 2011



Wednesday, September 21, 11
Chosen Solution (2/2)
                   @ComponentRole
                   public interface Macro
                   {
                       List<Block> execute();
                   }

                   @Component
                   @Named("message")
                   @Singleton
                   public class MessageMacro implements Macro
                   {
                        @Inject
                        private Execution execution;

                          @Inject
                          @Named("box")
                          private Macro boxMacro;

                          public List<Block> execute()
                          {
                             ...
                          }
                   }

                   META-INF/components.txt
                   org.xwiki.rendering.internal.macro.message.MessageMacro




                                                                             Copyright (c) Vincent Massol - 2011



Wednesday, September 21, 11
Lessons Learnt
                   • XWiki’s own interfaces have served us well
                    • Allowed us to switch from Plexus to our
                              own implementation
                         • But... ready to use a standard as soon as
                              one emerges!
                   • Would love to have CDI with OSGi
                          classloading separation ;)

                                                         Copyright (c) Vincent Massol - 2011



Wednesday, September 21, 11
Future
                   • Several possibilities
                    • Use CDI 1.1 when it’s out
                      • If it’s possible to perform dynamic bean
                              registration/unregistration
                         • Use JDK’s proposed solution (JavaSE 8?)
                          • We have time...
                                                            Copyright (c) Vincent Massol - 2011



Wednesday, September 21, 11

More Related Content

Viewers also liked

Viewers also liked (8)

ACE Branding / Comms intro
ACE Branding / Comms introACE Branding / Comms intro
ACE Branding / Comms intro
 
islamic
islamicislamic
islamic
 
Adobe Flex Framework
Adobe Flex FrameworkAdobe Flex Framework
Adobe Flex Framework
 
Folosirea instumentului Zemanta in recomandarea de continut
Folosirea instumentului Zemanta in recomandarea de continutFolosirea instumentului Zemanta in recomandarea de continut
Folosirea instumentului Zemanta in recomandarea de continut
 
Miscarea "NoSQL" in contextul Web-ului social/semantic
Miscarea "NoSQL" in contextul Web-ului social/semanticMiscarea "NoSQL" in contextul Web-ului social/semantic
Miscarea "NoSQL" in contextul Web-ului social/semantic
 
Recunoasterea organizatiilor in postarile pe Tweeter
Recunoasterea organizatiilor in postarile pe TweeterRecunoasterea organizatiilor in postarile pe Tweeter
Recunoasterea organizatiilor in postarile pe Tweeter
 
Semantic Tagging for the XWiki Platform with Zemanta and DBpedia
Semantic Tagging for the XWiki Platform with Zemanta and DBpediaSemantic Tagging for the XWiki Platform with Zemanta and DBpedia
Semantic Tagging for the XWiki Platform with Zemanta and DBpedia
 
XWiki Manuel Utilisateur
XWiki Manuel UtilisateurXWiki Manuel Utilisateur
XWiki Manuel Utilisateur
 

Similar to XWiki Components Design Choices

XWiki: A web development runtime platform
XWiki: A web development runtime platformXWiki: A web development runtime platform
XWiki: A web development runtime platform
XWiki
 
Bringing user-centered design to open source software development
Bringing user-centered design to open source software developmentBringing user-centered design to open source software development
Bringing user-centered design to open source software development
Müller-Birn Claudia
 
Accidental loading
Accidental loadingAccidental loading
Accidental loading
OFFSHORE VN
 

Similar to XWiki Components Design Choices (20)

XWiki: A web development runtime platform
XWiki: A web development runtime platformXWiki: A web development runtime platform
XWiki: A web development runtime platform
 
XWiki: Developing simple apps quickly
XWiki: Developing simple apps quicklyXWiki: Developing simple apps quickly
XWiki: Developing simple apps quickly
 
XWiki: Building a dynamic Conference web site
XWiki: Building a dynamic Conference web siteXWiki: Building a dynamic Conference web site
XWiki: Building a dynamic Conference web site
 
A web development runtime platform based on the wiki paradigm
A web development runtime platform based on the wiki paradigmA web development runtime platform based on the wiki paradigm
A web development runtime platform based on the wiki paradigm
 
XWiki: A web dev runtime for writing web apps @ FOSDEM 2014
XWiki: A web dev runtime for writing web apps @ FOSDEM 2014XWiki: A web dev runtime for writing web apps @ FOSDEM 2014
XWiki: A web dev runtime for writing web apps @ FOSDEM 2014
 
Reverse, Multi-Process and Non-Stop Debugging come to the CDT
Reverse, Multi-Process and Non-Stop Debugging come to the CDTReverse, Multi-Process and Non-Stop Debugging come to the CDT
Reverse, Multi-Process and Non-Stop Debugging come to the CDT
 
Staying ahead of the multi-core revolution with CDT debug
Staying ahead of the multi-core revolution with CDT debugStaying ahead of the multi-core revolution with CDT debug
Staying ahead of the multi-core revolution with CDT debug
 
2017 jan-19 meetup-unikernels
2017 jan-19 meetup-unikernels2017 jan-19 meetup-unikernels
2017 jan-19 meetup-unikernels
 
Microkernel Evolution
Microkernel EvolutionMicrokernel Evolution
Microkernel Evolution
 
Bringing user-centered design to open source software development
Bringing user-centered design to open source software developmentBringing user-centered design to open source software development
Bringing user-centered design to open source software development
 
LinuxKit & Moby - The next level of the container ecosystem
LinuxKit & Moby - The next level of the container ecosystemLinuxKit & Moby - The next level of the container ecosystem
LinuxKit & Moby - The next level of the container ecosystem
 
Survey of Container Build Tools
Survey of Container Build ToolsSurvey of Container Build Tools
Survey of Container Build Tools
 
Brown tony-final-mini-upa
Brown tony-final-mini-upaBrown tony-final-mini-upa
Brown tony-final-mini-upa
 
Video Wall User Experience Multi-Touch
Video Wall User Experience Multi-TouchVideo Wall User Experience Multi-Touch
Video Wall User Experience Multi-Touch
 
Accidental loading
Accidental loadingAccidental loading
Accidental loading
 
Innoslate the Gateway to SysML 2.0 and Beyond
Innoslate the Gateway to SysML 2.0 and BeyondInnoslate the Gateway to SysML 2.0 and Beyond
Innoslate the Gateway to SysML 2.0 and Beyond
 
Jenkins Enterprise by CloudBees Webinar
Jenkins Enterprise by CloudBees WebinarJenkins Enterprise by CloudBees Webinar
Jenkins Enterprise by CloudBees Webinar
 
Livestand : Learnings. YUI Conf 2011
Livestand : Learnings. YUI Conf 2011Livestand : Learnings. YUI Conf 2011
Livestand : Learnings. YUI Conf 2011
 
XPDDS18: Unleashing the Power of Unikernels with Unikraft - Florian Schmidt, ...
XPDDS18: Unleashing the Power of Unikernels with Unikraft - Florian Schmidt, ...XPDDS18: Unleashing the Power of Unikernels with Unikraft - Florian Schmidt, ...
XPDDS18: Unleashing the Power of Unikernels with Unikraft - Florian Schmidt, ...
 
Jenkins
JenkinsJenkins
Jenkins
 

More from Vincent Massol

XWiki: wiki collaboration as an alternative to Confluence and Sharepoint
XWiki: wiki collaboration as an alternative to Confluence and SharepointXWiki: wiki collaboration as an alternative to Confluence and Sharepoint
XWiki: wiki collaboration as an alternative to Confluence and Sharepoint
Vincent Massol
 

More from Vincent Massol (20)

XWiki Testing with TestContainers
XWiki Testing with TestContainersXWiki Testing with TestContainers
XWiki Testing with TestContainers
 
XWiki: The best wiki for developers
XWiki: The best wiki for developersXWiki: The best wiki for developers
XWiki: The best wiki for developers
 
Advanced Java Testing @ POSS 2019
Advanced Java Testing @ POSS 2019Advanced Java Testing @ POSS 2019
Advanced Java Testing @ POSS 2019
 
New types of tests for Java projects
New types of tests for Java projectsNew types of tests for Java projects
New types of tests for Java projects
 
Configuration Testing with Docker & TestContainers
Configuration Testing with Docker & TestContainersConfiguration Testing with Docker & TestContainers
Configuration Testing with Docker & TestContainers
 
Building XWiki
Building XWikiBuilding XWiki
Building XWiki
 
New types of tests for Java projects
New types of tests for Java projectsNew types of tests for Java projects
New types of tests for Java projects
 
What's new in XWiki 9.x and 10.x
What's new in XWiki 9.x and 10.xWhat's new in XWiki 9.x and 10.x
What's new in XWiki 9.x and 10.x
 
QDashboard 1.2
QDashboard 1.2QDashboard 1.2
QDashboard 1.2
 
Advanced Java Testing
Advanced Java TestingAdvanced Java Testing
Advanced Java Testing
 
Creating your own project's Quality Dashboard
Creating your own project's Quality DashboardCreating your own project's Quality Dashboard
Creating your own project's Quality Dashboard
 
XWiki: wiki collaboration as an alternative to Confluence and Sharepoint
XWiki: wiki collaboration as an alternative to Confluence and SharepointXWiki: wiki collaboration as an alternative to Confluence and Sharepoint
XWiki: wiki collaboration as an alternative to Confluence and Sharepoint
 
Creating your own project's Quality Dashboard
Creating your own project's Quality DashboardCreating your own project's Quality Dashboard
Creating your own project's Quality Dashboard
 
XWiki: The web's Swiss Army Knife
XWiki: The web's Swiss Army KnifeXWiki: The web's Swiss Army Knife
XWiki: The web's Swiss Army Knife
 
Leading a Community-Driven Open Source Project
Leading a Community-Driven Open Source ProjectLeading a Community-Driven Open Source Project
Leading a Community-Driven Open Source Project
 
Developing XWiki
Developing XWikiDeveloping XWiki
Developing XWiki
 
XWiki SAS development practices
XWiki SAS development practicesXWiki SAS development practices
XWiki SAS development practices
 
XWiki Rendering @ FOSDEM 2014
XWiki Rendering @ FOSDEM 2014XWiki Rendering @ FOSDEM 2014
XWiki Rendering @ FOSDEM 2014
 
Implementing Quality on a Java Project
Implementing Quality on a Java ProjectImplementing Quality on a Java Project
Implementing Quality on a Java Project
 
Implementing Quality on Java projects (Short version)
Implementing Quality on Java projects (Short version)Implementing Quality on Java projects (Short version)
Implementing Quality on Java projects (Short version)
 

Recently uploaded

Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo DiehlFuture Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Peter Udo Diehl
 

Recently uploaded (20)

IoT Analytics Company Presentation May 2024
IoT Analytics Company Presentation May 2024IoT Analytics Company Presentation May 2024
IoT Analytics Company Presentation May 2024
 
Enterprise Knowledge Graphs - Data Summit 2024
Enterprise Knowledge Graphs - Data Summit 2024Enterprise Knowledge Graphs - Data Summit 2024
Enterprise Knowledge Graphs - Data Summit 2024
 
UiPath Test Automation using UiPath Test Suite series, part 1
UiPath Test Automation using UiPath Test Suite series, part 1UiPath Test Automation using UiPath Test Suite series, part 1
UiPath Test Automation using UiPath Test Suite series, part 1
 
Choosing the Right FDO Deployment Model for Your Application _ Geoffrey at In...
Choosing the Right FDO Deployment Model for Your Application _ Geoffrey at In...Choosing the Right FDO Deployment Model for Your Application _ Geoffrey at In...
Choosing the Right FDO Deployment Model for Your Application _ Geoffrey at In...
 
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)
 
Salesforce Adoption – Metrics, Methods, and Motivation, Antone Kom
Salesforce Adoption – Metrics, Methods, and Motivation, Antone KomSalesforce Adoption – Metrics, Methods, and Motivation, Antone Kom
Salesforce Adoption – Metrics, Methods, and Motivation, Antone Kom
 
Optimizing NoSQL Performance Through Observability
Optimizing NoSQL Performance Through ObservabilityOptimizing NoSQL Performance Through Observability
Optimizing NoSQL Performance Through Observability
 
ECS 2024 Teams Premium - Pretty Secure
ECS 2024   Teams Premium - Pretty SecureECS 2024   Teams Premium - Pretty Secure
ECS 2024 Teams Premium - Pretty Secure
 
FDO for Camera, Sensor and Networking Device – Commercial Solutions from VinC...
FDO for Camera, Sensor and Networking Device – Commercial Solutions from VinC...FDO for Camera, Sensor and Networking Device – Commercial Solutions from VinC...
FDO for Camera, Sensor and Networking Device – Commercial Solutions from VinC...
 
Strategic AI Integration in Engineering Teams
Strategic AI Integration in Engineering TeamsStrategic AI Integration in Engineering Teams
Strategic AI Integration in Engineering Teams
 
Where to Learn More About FDO _ Richard at FIDO Alliance.pdf
Where to Learn More About FDO _ Richard at FIDO Alliance.pdfWhere to Learn More About FDO _ Richard at FIDO Alliance.pdf
Where to Learn More About FDO _ Richard at FIDO Alliance.pdf
 
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptxIOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
 
Secure Zero Touch enabled Edge compute with Dell NativeEdge via FDO _ Brad at...
Secure Zero Touch enabled Edge compute with Dell NativeEdge via FDO _ Brad at...Secure Zero Touch enabled Edge compute with Dell NativeEdge via FDO _ Brad at...
Secure Zero Touch enabled Edge compute with Dell NativeEdge via FDO _ Brad at...
 
Introduction to Open Source RAG and RAG Evaluation
Introduction to Open Source RAG and RAG EvaluationIntroduction to Open Source RAG and RAG Evaluation
Introduction to Open Source RAG and RAG Evaluation
 
Connecting the Dots in Product Design at KAYAK
Connecting the Dots in Product Design at KAYAKConnecting the Dots in Product Design at KAYAK
Connecting the Dots in Product Design at KAYAK
 
Unpacking Value Delivery - Agile Oxford Meetup - May 2024.pptx
Unpacking Value Delivery - Agile Oxford Meetup - May 2024.pptxUnpacking Value Delivery - Agile Oxford Meetup - May 2024.pptx
Unpacking Value Delivery - Agile Oxford Meetup - May 2024.pptx
 
Top 10 Symfony Development Companies 2024
Top 10 Symfony Development Companies 2024Top 10 Symfony Development Companies 2024
Top 10 Symfony Development Companies 2024
 
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo DiehlFuture Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
 
SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate...
SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate...SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate...
SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate...
 
Free and Effective: Making Flows Publicly Accessible, Yumi Ibrahimzade
Free and Effective: Making Flows Publicly Accessible, Yumi IbrahimzadeFree and Effective: Making Flows Publicly Accessible, Yumi Ibrahimzade
Free and Effective: Making Flows Publicly Accessible, Yumi Ibrahimzade
 

XWiki Components Design Choices

  • 1. XWiki XWiki’s component architecture Copyright (c) Vincent Massol - 2011 September 2011 Wednesday, September 21, 11
  • 2. Agenda • Needs • Discarded solutions • Chosen solution • Lessons learnt • Future Copyright (c) Vincent Massol - 2011 Wednesday, September 21, 11
  • 3. XWiki Platform ... for developing (collaborative) web applications Copyright (c) Vincent Massol - 2011 Wednesday, September 21, 11
  • 4. Needs (1/2) • XWiki is a runtime development platform • Need solution for code reuse • Need solution to change behaviors • Ability to install extensions transitively at runtime • As standard as possible Copyright (c) Vincent Massol - 2011 Wednesday, September 21, 11
  • 5. Needs (2/2) • Ability to change implementation without changing existing components Copyright (c) Vincent Massol - 2011 Wednesday, September 21, 11
  • 6. Discarded Solutions • Warning: Choice done 2 years ago • OSGi: too complex • Resin Pomegranate: not standard enough • Guice: static binding only • CDI 1.0: static binding only Copyright (c) Vincent Massol - 2011 Wednesday, September 21, 11
  • 7. Chosen Solution (1/2) • XWiki’s own interfaces • Implemented using Plexus initially • Custom implementation after Plexus was EOLed • Using JSR330’s annotations • First focus: have components for everything Copyright (c) Vincent Massol - 2011 Wednesday, September 21, 11
  • 8. Chosen Solution (2/2) @ComponentRole public interface Macro {     List<Block> execute(); } @Component @Named("message") @Singleton public class MessageMacro implements Macro {    @Inject    private Execution execution;    @Inject    @Named("box")    private Macro boxMacro;    public List<Block> execute()    {       ...    } } META-INF/components.txt org.xwiki.rendering.internal.macro.message.MessageMacro Copyright (c) Vincent Massol - 2011 Wednesday, September 21, 11
  • 9. Lessons Learnt • XWiki’s own interfaces have served us well • Allowed us to switch from Plexus to our own implementation • But... ready to use a standard as soon as one emerges! • Would love to have CDI with OSGi classloading separation ;) Copyright (c) Vincent Massol - 2011 Wednesday, September 21, 11
  • 10. Future • Several possibilities • Use CDI 1.1 when it’s out • If it’s possible to perform dynamic bean registration/unregistration • Use JDK’s proposed solution (JavaSE 8?) • We have time... Copyright (c) Vincent Massol - 2011 Wednesday, September 21, 11