plugins 2.0: the overview

33
Don Brown, Atlassian Plugins 2.0: The overview

Post on 22-Oct-2014

2.784 views

Category:

Technology


0 download

DESCRIPTION

Talk given at Atlassian Summit 2009 discussing the Atlassian Plugins 2 framework and how to build plugins using it.

TRANSCRIPT

Page 1: Plugins 2.0: The Overview

Don Brown, Atlassian

Plugins 2.0: The overview

Page 2: Plugins 2.0: The Overview

Confluence Team Hosted

QuickTime™ and a decompressor

are needed to see this picture.

Page 3: Plugins 2.0: The Overview

JIRA Studio

QuickTime™ and a decompressor

are needed to see this picture.

Page 4: Plugins 2.0: The Overview

Why do we need a new plugin framework?

Page 5: Plugins 2.0: The Overview

One feature * five products =

Dashboard

Page 6: Plugins 2.0: The Overview

Multiple teams across the globe

Gdańsk, PolandSan Francisco, USA

Kuala Lumpur, MalaysiaSydney, Australia

Page 7: Plugins 2.0: The Overview

Plugin development slow

Write plugin codeBuild pluginCopy plugin to WEB-INF/libStart appDiscover bugWash, rinse, repeat

Page 8: Plugins 2.0: The Overview

Inconsistency between products

QuickTime™ and a decompressor

are needed to see this picture.

QuickTime™ and a decompressor

are needed to see this picture.

QuickTime™ and a decompressor

are needed to see this picture.

QuickTime™ and a decompressor

are needed to see this picture.

. . . Constructor injection? Setter injection? Pico? Spring?

Page 9: Plugins 2.0: The Overview

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

Page 10: Plugins 2.0: The Overview

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

Page 11: Plugins 2.0: The Overview

Backwards compatibility

Version 1 plugins - 100% compatibleo WEB-INF/libo Confluence’s dynamic plugins

Version 2 (OSGi-based) pluginso Compatibility varies by product

Page 12: Plugins 2.0: The Overview

Which products?

Crowd 1.5 FishEye 1.5 Crucible 1.5 Confluence 2.10 JIRA 4.0Bamboo 2.3

Page 13: Plugins 2.0: The Overview

OSGi in one slide

Bundles contain code, configuration, manifest metadataRuntime dependencies at Java package, service, and bundle levelsSupports multiple versions of codeCan share dynamic service objectsLifecycle: install, resolve, active, uninstall

Page 14: Plugins 2.0: The Overview

Goal - Minimal OSGi required

Can we scale the learning curve to keep the easy plugins easy?

Page 15: Plugins 2.0: The Overview

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

Page 16: Plugins 2.0: The Overview

Dynamic deployment = faster dev cycle

Without OSGi1.Code2.Compile3.Copy to WEB-INF/lib4.Restart application5.Test in browser

With OSGi1.Code2.Build and push to

running web application

3.Test in browser

. . . from code to browser in one or two seconds

Page 17: Plugins 2.0: The Overview

Standard plugin modules

Servleto servleto servlet-filtero servlet-listener

o servlet-context-param

Componento componento component-import

Web Itemso web-itemo web-section

Misco module-typeo web-resource

Page 18: Plugins 2.0: The Overview

Sandboxed plugins

Page 19: Plugins 2.0: The Overview

DEMO: Using Atlassian Plugins

Page 20: Plugins 2.0: The Overview

Plugins architecture

Page 21: Plugins 2.0: The Overview

Plugin descriptor

atlassian-plugin.xml

<atlassian-plugin key="com.xyz.example" name="Example Plugin” plugins-version=“2”> <plugin-info> <description>A sample plugin</description> <version>1.0</version> </plugin-info> <servlet key=”test" name=”Test Servlet" class="com.xyz.TestServlet"> <description>An example servlet</description> </servlet></atlassian-plugin>

Page 22: Plugins 2.0: The Overview

Plugin descriptor - Hidden OSGiatlassian-plugin.xml

<atlassian-plugin key="com.xyz.example" name="Example Plugin” plugins-version=“2”> … <component key=”myComponent" class="com.xyz.MyComponent” public=“true”> <interface>com.xyz.Component</interface> </component>

<component-import key=”otherComponent" interface="com.abc.OtherComponent” />

</atlassian-plugin>

Page 23: Plugins 2.0: The Overview

Plugin descriptor - Hidden OSGiGenerates 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" interface="com.abc.OtherComponent” /></beans>

Page 24: Plugins 2.0: The Overview

Plugin to bundle process

Goal: Allow simple plugins with no OSGi knowledge

Three types of plugins:o Simple - no OSGio Moderate - OSGi via plugin descriptor

o Complex - OSGi via Spring XML directly

Page 25: Plugins 2.0: The Overview

Plugins 2 showcase

Page 26: Plugins 2.0: The Overview

Atlassian Gadgets

Page 27: Plugins 2.0: The Overview

Shared Access Layer (SAL)

Plugin upgrade frameworkPlugin settingsJob schedulingi18n SearchHTTP calls

. . . and much more

Page 28: Plugins 2.0: The Overview

Atlassian REST Module Type

Implemented as a dynamic module typeUses JAX-RSCan be extended by other plugins to add new data mappers

GET rest/name/1.0/bob

{ "firstName":”Bob", "lastName":"Smith"}

GET rest/name/1.0/bob

{ "firstName":”Bob", "lastName":"Smith"}

Page 29: Plugins 2.0: The Overview

Plugin Exchange Client

Uses REST plugin type for JSON, XML, and HTML

Page 30: Plugins 2.0: The Overview

Confluence Widget Connector

Widget types extendable via plugins

Page 31: Plugins 2.0: The Overview

And many more. . .

Applinks 2Streams 2Confluence Repository ClientTemplate rendererTeam Hosted pluginsStudio pluginsAll Crucible and FishEye pluginsAll OSGi bundles

Page 32: Plugins 2.0: The Overview

Join the fun!

Page 33: Plugins 2.0: The Overview

Questions