Plugins 2.0: The Overview

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    1 Favorite

    Plugins 2.0: The Overview - Presentation Transcript

    1. Don Brown, Atlassian Plugins 2.0: The overview
    2. Confluence Team Hosted
    3. JIRA Studio
    4. Why do we need a new plugin framework?
    5. One feature * five products = Dashboard
    6. Multiple teams across the globe Gda ń sk, Poland San Francisco, USA Kuala Lumpur, Malaysia Sydney, Australia
    7. Plugin development slow
      • Write plugin code
      • Build plugin
      • Copy plugin to WEB-INF/lib
      • Start app
      • Discover bug
      • Wash, rinse, repeat
    8. Inconsistency between products . . . Constructor injection? Setter injection? Pico? Spring?
    9. Plugins break on product upgrade
      • Plugins have unrestricted access to application classes, objects, and configuration
      • Broken plugins after a product upgrade make us look bad
    10. Plugins 2 gives you. . .
      • Ability for plugins to depend on each other
      • Ability for plugins to define their own extension points
      • Consistent plugin development platform across products
      • Better insulation of plugins from product changes
    11. Backwards compatibility
      • Version 1 plugins - 100% compatible
        • WEB-INF/lib
        • Confluence’s dynamic plugins
      • Version 2 (OSGi-based) plugins
        • Compatibility varies by product
    12. Which products?
      • Crowd 1.5 
      • FishEye 1.5 
      • Crucible 1.5 
      • Confluence 2.10 
      • JIRA 4.0
      • Bamboo 2.3
    13. OSGi in one slide
      • Bundles contain code, configuration, manifest metadata
      • Runtime dependencies at Java package, service, and bundle levels
      • Supports multiple versions of code
      • Can share dynamic service objects
      • Lifecycle: install, resolve, active, uninstall
    14. Goal - Minimal OSGi required
      • Can we scale the learning curve to keep the easy plugins easy?
    15. Each team can “own” a bundle
      • Only JAX-RS exposed
      • Complete freedom to switch to another JAX-RS implementation
      • Can run multiple versions of the bundle side-by-side
    16. Features written once
      • Example: OpenSocial-based dashboard as an OSGi plugin
      • Written and owned by San Francisco team
      • Contains UI, Shindig, internal services, SPI, and API
    17. Dynamic deployment = faster dev cycle
      • Without OSGi
        • Code
        • Compile
        • Copy to WEB-INF/lib
        • Restart application
        • Test in browser
      • With OSGi
        • Code
        • Build and push to running web application
        • Test in browser
      . . . from code to browser in one or two seconds
    18. Standard plugin modules
      • Servlet
        • servlet
        • servlet-filter
        • servlet-listener
        • servlet-context-param
      • Component
        • component
        • component-import
      • Web Items
        • web-item
        • web-section
      • Misc
        • module-type
        • web-resource
    19. Sandboxed plugins
    20. DEMO: Using Atlassian Plugins
    21. Plugins architecture
    22. Plugin descriptor
      • atlassian-plugin.xml
      < atlassian-plugin key = &quot;com.xyz.example&quot; name = &quot;Example Plugin ” plugins-version = “2” > < plugin-info > < description > A sample plugin </ description > < version > 1.0 </ version > </ plugin-info > < servlet key = ”test &quot; name = ”Test Servlet &quot; class = &quot;com.xyz.TestServlet&quot; > < description > An example servlet </ description > </ servlet > </ atlassian-plugin >
    23. Plugin descriptor - Hidden OSGi
      • atlassian-plugin.xml
      <atlassian-plugin key= &quot;com.xyz.example&quot; name= &quot;Example Plugin” plugins-version= “2” > … < component key = ”myComponent &quot; class = &quot;com.xyz.MyComponent” public = “true” > < interface > com.xyz.Component </ interface > < / component > < component-import key = ”otherComponent &quot; interface = &quot;com.abc.OtherComponent” /> </atlassian-plugin>
    24. Plugin descriptor - Hidden OSGi
      • Generates atlassian-plugin-spring.xml
      < beans … > < bean id = “myComponent class = “com.xyz.MyComponent” /> < osgi:service id = “myComponent_service” ref = “myComponent” interface = “com.xyz.Component” /> < osgi:reference id = “otherComponent &quot; interface = &quot;com.abc.OtherComponent” /> </ beans >
    25. Plugin to bundle process
      • Goal: Allow simple plugins with no OSGi knowledge
      • Three types of plugins:
        • Simple - no OSGi
        • Moderate - OSGi via plugin descriptor
        • Complex - OSGi via Spring XML directly
    26. Plugins 2 showcase
    27. Atlassian Gadgets
    28. Shared Access Layer (SAL)
      • Plugin upgrade framework
      • Plugin settings
      • Job scheduling
      • i18n
      • Search
      • HTTP calls
      • . . . and much more
    29. Atlassian REST Module Type
      • Implemented as a dynamic module type
      • Uses JAX-RS
      • Can be extended by other plugins to add new data mappers
      • GET rest/name/1.0/bob
      • {
      • &quot;firstName&quot;:”Bob&quot;,
      • &quot;lastName&quot;:&quot;Smith&quot;
      • }
    30. Plugin Exchange Client
      • Uses REST plugin type for JSON, XML, and HTML
    31. Confluence Widget Connector
      • Widget types extendable via plugins
    32. And many more. . .
      • Applinks 2
      • Streams 2
      • Confluence Repository Client
      • Template renderer
      • Team Hosted plugins
      • Studio plugins
      • All Crucible and FishEye plugins
      • All OSGi bundles
    33. Join the fun!
    34. Questions
    SlideShare Zeitgeist 2009

    + mrdonmrdon Nominate

    custom

    553 views, 1 favs, 0 embeds more stats

    Talk given at Atlassian Summit 2009 discussing the more

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 553
      • 553 on SlideShare
      • 0 from embeds
    • Comments 0
    • Favorites 1
    • Downloads 8
    Most viewed embeds

    more

    All embeds

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories