1
1
Confluence as a Platform

Jonathan Gilbert

Senior Developer

Atlassian




                          2
                   ...
Agenda
• Why Build on Confluence?
• Confluence Advantages
• Example Application Architecture
• Application Audience
• The Ro...
Why build on Confluence?


                   ?



               ?




                           4
                     ...
When to build on Confluence?
• When to choose Confluence           • When to avoid Confluence
 • Content based               ...
Confluence Advantages
• Content Persistence
• Content Discovery
• Integration
• Easy Development




                      ...
Content Persistence


 Pages & Blogs   Attachments   Comments   Bandana




                                              ...
Content Persistence


 Pages & Blogs   Attachments     Comments        Bandana




 Versioning           Import & Export  ...
Content Discovery


          Labels




                    9
                        9
Content Discovery


              Labels                  Feeds




                       Notifications           Activity...
Integration


Microsoft Office Support   External Systems Integration    Users & Groups




   Integrated UI             Pa...
Easy Development
• Atlassian Plugin SDK
• Dependency Injection
• Hot Deploy




                         12
              ...
Easy Development
• UI
 • Reusable Components
 • Fully Customisable

• Internationalisation
• Shared Access Layer




     ...
Easy Development
• Confluence Source Provided
• Huge Development Community
 • Forums
 • Online Documentation
 • Public issu...
Architecture
• Example Application   Service     UI
                           s    jQuer
                                ...
Architecture - Core
• Confluence Managers   Service     UI
• Labels                  s    jQuer
                           ...
Architecture - Core
• Dependency Injection – Spring Framework   Service     UI
                                           ...
Architecture - Core
• Dependency Injection – Spring Framework                  Service     UI
public class ExampleProcesso...
Architecture - Core
• Shared Components - OSGi   Service     UI
                                s    jQuer
               ...
Architecture - Core
• Shared Components - OSGi                                         Service              UI
  • Export ...
Architecture - Core
• Shared Components - OSGi                                         Service              UI
  • Export ...
Architecture - Core
• New Features           Service     UI
 • Commentable objects      s    jQuer
 • Spaced UserStatus   ...
Architecture - Core
• New Features                                 Service     UI
 • Bandana 3.0                          ...
Architecture – Traditional UI
• XWork Actions                  Service     UI
• Velocity                          s    jQu...
Architecture – Traditional UI
<xwork name="Example Actions" key="exampleactions">
    <package name="example" extends="def...
Architecture – Traditional UI
<xwork name="Example Actions" key="exampleactions">
    <package name="example" extends="def...
Architecture – REST UI
• Client                       Service     UI
  • JQuery                        s    jQuer
  • Atla...
Architecture – REST UI
<rest name="Example Rest Service" key="rest-service-example" path="/exampleService" version="1.0“/>...
Architecture – REST UI
<rest name="Example Rest Service" key="rest-service-example" path="/exampleService" version="1.0“/>...
Architecture – REST UI
<rest name="Example Rest Service" key="rest-service-example" path="/exampleService" version="1.0"/>...
Architecture – REST UI
• <div id="exampleArea"/>
                            Service     UI
                              ...
Architecture – REST UI
• <div id="exampleArea"/>
                                                    Service     UI
•
•
  ...
Architecture – REST UI
• <div id="exampleArea"/>
• <script type="text/x-template" title="entity-template">   Service     U...
Architecture – REST UI
• <div id="exampleArea"/>
• <script type="text/x-template" title="entity-template">      Service   ...
Architecture – REST UI
• <div id="exampleArea"/>
• <script type="text/x-template" title="entity-template">          Servic...
Architecture - Federation
• REST                       Service     UI
 • XML                          s    jQuer
 • JSON  ...
Application Audience
• Organisation Specific
• Commercial & Open Source




                             37
               ...
Organisation Specific
• Confluence is already deployed
 • No Resource Requirements
 • Infrastructure Support
 • Political Su...
Commercial & Open Source

• Confluence has a huge customer base (22,000)
• Hosting on plugins.atlassian.com
 • Open or clos...
The Road Ahead
• Full REST APIs
• AppLinks
• Unified Plugin Manager
• Structured Data Storage




                         ...
Summary
 • Content based & Collaborative Applications will benefit
 • Confers number of benefits
 • Development is easy
 • R...
Where next?
• Sign up to the forums
 • http://forums.atlassian.com/

• Download the plugin SDK
• Check out the Atlassian D...
Upcoming SlideShare
Loading in …5
×

Confluence as a Platform - Atlassian Summit 2010

1,706 views
1,622 views

Published on

Confluence as a Platform

Jonathan Gilbert, Atlassian

Published in: Technology, Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,706
On SlideShare
0
From Embeds
0
Number of Embeds
223
Actions
Shares
0
Downloads
35
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Confluence as a Platform - Atlassian Summit 2010

  1. 1. 1 1
  2. 2. Confluence as a Platform Jonathan Gilbert Senior Developer Atlassian 2 2
  3. 3. Agenda • Why Build on Confluence? • Confluence Advantages • Example Application Architecture • Application Audience • The Road Ahead 3 3
  4. 4. Why build on Confluence? ? ? 4 4
  5. 5. When to build on Confluence? • When to choose Confluence • When to avoid Confluence • Content based • Structured data storage needs • Collaborative • Specific, unsupported technology • Confluence already being used by requirements target audience • Core product customisation is required 5 5
  6. 6. Confluence Advantages • Content Persistence • Content Discovery • Integration • Easy Development 6 6
  7. 7. Content Persistence Pages & Blogs Attachments Comments Bandana 7 7
  8. 8. Content Persistence Pages & Blogs Attachments Comments Bandana Versioning Import & Export Backup & Restore 8 8
  9. 9. Content Discovery Labels 9 9
  10. 10. Content Discovery Labels Feeds Notifications Activity Stream Search 10 10
  11. 11. Integration Microsoft Office Support External Systems Integration Users & Groups Integrated UI Page Gadget Authentication & Authorisation 11 11
  12. 12. Easy Development • Atlassian Plugin SDK • Dependency Injection • Hot Deploy 12 12
  13. 13. Easy Development • UI • Reusable Components • Fully Customisable • Internationalisation • Shared Access Layer 13 13
  14. 14. Easy Development • Confluence Source Provided • Huge Development Community • Forums • Online Documentation • Public issue tracking • Tons of examples • 400+ existing plugins 14 14
  15. 15. Architecture • Example Application Service UI s jQuer Vel REST API XW API Feeds Plugin Core Blogs Label Page Band Attac Com User Search & Persistence 15 15
  16. 16. Architecture - Core • Confluence Managers Service UI • Labels s jQuer Vel • Bandana REST API XW API Feeds Plugin Core Blogs Label Page Band Attac Com User Search & Persistence 16 16
  17. 17. Architecture - Core • Dependency Injection – Spring Framework Service UI s jQuer Vel REST API XW API Feeds Plugin Core Blogs Label Page Band Attac Com User Search & Persistence 17 17
  18. 18. Architecture - Core • Dependency Injection – Spring Framework Service UI public class ExampleProcessor { s jQuer • public ExampleProcessor(PageManager pageManager) { Vel • ... } REST API XW public void setSpaceManager(SpaceManager spaceManager){ API Feeds ... } Plugin Core } Blogs Label Page Band Attac Com User Search & Persistence 18 18
  19. 19. Architecture - Core • Shared Components - OSGi Service UI s jQuer Vel REST API XW API Feeds Plugin Core Blogs Label Page Band Attac Com User Search & Persistence 19
  20. 20. Architecture - Core • Shared Components - OSGi Service UI • Export s jQuer Vel <component key="exampleService" name="Example Service" class="com.atlassian.example.impl.DefaultAppService"> <interface>com.atlassian.example.AppService</interface> </component> REST API XW API Feeds Plugin Core Blogs Label Page Band Attac Com User Search & Persistence 20
  21. 21. Architecture - Core • Shared Components - OSGi Service UI • Export s jQuer Vel <component key="exampleService" name="Example Service" class="com.atlassian.example.impl.DefaultAppService"> <interface>com.atlassian.example.AppService</interface> </component> REST API XW • Import <component-import name="exampleService" key="exampleService"> API Feeds <interface>com.atlassian.example.AppService</interface> </component-import> Plugin Core Blogs Label Page Band Attac Com User Search & Persistence 21
  22. 22. Architecture - Core • New Features Service UI • Commentable objects s jQuer • Spaced UserStatus Vel • Custom Space Types REST API XW • Multi-label queries API Feeds Plugin Core Blogs Label Page Band Attac Com User Search & Persistence 22 22
  23. 23. Architecture - Core • New Features Service UI • Bandana 3.0 s jQuer • Custom storage contexts Vel • Enumeration of stored keys per context • Custom serialisers REST API XW API Feeds Plugin Core Blogs Label Page Band Attac Com User Search & Persistence 23 23
  24. 24. Architecture – Traditional UI • XWork Actions Service UI • Velocity s jQuer Vel • Web Resources REST API XW API Feeds Plugin Core Blogs Label Page Band Attac Com User Search & Persistence 24 24
  25. 25. Architecture – Traditional UI <xwork name="Example Actions" key="exampleactions"> <package name="example" extends="default" namespace="/example">Service UI <default-interceptor-ref name="defaultStack"/> <action name="doStuff" class="bean:stuffAction"> s jQuer Vel <result name="input" type="velocity">/example/templates/action/dostuff.vm</result> </action> </package> </xwork> REST API XW API Feeds Plugin Core Blogs Label Page Band Attac Com User Search & Persistence 25 25
  26. 26. Architecture – Traditional UI <xwork name="Example Actions" key="exampleactions"> <package name="example" extends="default" namespace="/example">Service UI <default-interceptor-ref name="defaultStack"/> <action name="doStuff" class="bean:stuffAction"> s jQuer Vel <result name="input" type="velocity">/example/templates/action/dostuff.vm</result> </action> </package> </xwork> REST API XW API Feeds <web-resource key=“exampleResource"> <transformation extension="txt"> <transformer key=“example" /> Plugin Core </transformation> Blogs Label Page Band Attac Com User <resource type="download" name="testTemplate.txt" /> </web-resource> <web-resource-transformer key="example" class="bean:exampleTransformer" /> Search & Persistence 26 26
  27. 27. Architecture – REST UI • Client Service UI • JQuery s jQuer • Atlassian User Interface Vel • Server REST API XW • Macros API Feeds • REST Framework 2.0 • Jersey Plugin Core • Interceptors Blogs Label Page Band Attac Com User Search & Persistence 27 27
  28. 28. Architecture – REST UI <rest name="Example Rest Service" key="rest-service-example" path="/exampleService" version="1.0“/> Service UI s jQuer Vel REST API XW API Feeds Plugin Core Blogs Label Page Band Attac Com User Search & Persistence 28 28
  29. 29. Architecture – REST UI <rest name="Example Rest Service" key="rest-service-example" path="/exampleService" version="1.0“/> Service UI @XmlRootElement(name = “example") public class ExampleEntity { { s jQuer • @XmlElement public String name; name: name, id: id Vel • @XmlAttribute public long id; } } REST API XW API Feeds Plugin Core Blogs Label Page Band Attac Com User Search & Persistence 29 29
  30. 30. Architecture – REST UI <rest name="Example Rest Service" key="rest-service-example" path="/exampleService" version="1.0"/> Service UI @XmlRootElement(name = “example") public class ExampleEntity { { s jQuer • @XmlElement public String name; name: name, id: id Vel • @XmlAttribute public long id; } } REST API XW @Path("/example") API Feeds public class ExampleResource { @GET • public Response get() { Plugin Core • ExampleEntity exampleEntity = … Blogs Label Page Band Attac Com User • return Response.ok(exampleEntity).build(); } } Search & Persistence 30 30
  31. 31. Architecture – REST UI • <div id="exampleArea"/> Service UI s jQuer Vel REST API XW API Feeds Plugin Core Blogs Label Page Band Attac Com User Search & Persistence 31 31
  32. 32. Architecture – REST UI • <div id="exampleArea"/> Service UI • • <div> <span>{id}</span><input value="{name}"/> s jQuer • </div> Vel REST API XW API Feeds Plugin Core Blogs Label Page Band Attac Com User Search & Persistence 32 32
  33. 33. Architecture – REST UI • <div id="exampleArea"/> • <script type="text/x-template" title="entity-template"> Service UI • • <div> <span>{id}</span><input value="{name}"/> s jQuer • </div> Vel • </script> REST API XW API Feeds Plugin Core Blogs Label Page Band Attac Com User Search & Persistence 33 33
  34. 34. Architecture – REST UI • <div id="exampleArea"/> • <script type="text/x-template" title="entity-template"> Service UI • • <div> <span>{id}</span><input value="{name}"/> s jQuer • </div> Vel • </script> • jQuery.ajax({ REST API XW • url: contextPath + '/rest/exampleService/1.0/example', API Feeds • type: 'GET', • dataType: 'json', • contentType: 'application/json; charset=utf-8', Plugin Core • success: function(entity) { Blogs Label Page Band Attac Com User • • } • }); Search & Persistence 34 34
  35. 35. Architecture – REST UI • <div id="exampleArea"/> • <script type="text/x-template" title="entity-template"> Service UI • • <div> <span>{id}</span><input value="{name}"/> s jQuer • </div> Vel • </script> • jQuery.ajax({ REST API XW • url: contextPath + '/rest/exampleService/1.0/example', API Feeds • type: 'GET', • dataType: 'json', • contentType: 'application/json; charset=utf-8', Plugin Core • success: function(entity) { Blogs Label Page Band Attac Com User • AJS.$('#exampleArea').append(AJS.template.load('entity-template').fill(entity).toString()); • } • }); Search & Persistence 35 35
  36. 36. Architecture - Federation • REST Service UI • XML s jQuer • JSON Vel • Feeds REST API XW • Gadgets API Feeds • Page Gadget Plugin Core Blogs Label Page Band Attac Com User Search & Persistence 36 36
  37. 37. Application Audience • Organisation Specific • Commercial & Open Source 37 37
  38. 38. Organisation Specific • Confluence is already deployed • No Resource Requirements • Infrastructure Support • Political Support 38 38
  39. 39. Commercial & Open Source • Confluence has a huge customer base (22,000) • Hosting on plugins.atlassian.com • Open or closed source • Free or commercial • Confluence Blog • Codegeist • AtlasCamp 39 39
  40. 40. The Road Ahead • Full REST APIs • AppLinks • Unified Plugin Manager • Structured Data Storage 40
  41. 41. Summary • Content based & Collaborative Applications will benefit • Confers number of benefits • Development is easy • REST Application Architecture • Audience • Confluence Rocks for Small, Content-Driven Applications! 41 41
  42. 42. Where next? • Sign up to the forums • http://forums.atlassian.com/ • Download the plugin SDK • Check out the Atlassian Developer Blog • http://blogs.atlassian.com/developer/ • Check out the Confluence docs • http://confluence.atlassian.com/ 42 42

×