atlascamp 2015: plugins 2: all grown up

36
Plugins 2 : All Grown Up JAMES WINTERS PLATFORM LORD ATLASSIAN ALEX COURTIS YAK SHAVER ATLASSIAN

Upload: atlassian

Post on 14-Aug-2015

164 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: AtlasCamp 2015: Plugins 2: All grown up

Plugins 2 : All Grown Up

JAMES WINTERS • PLATFORM LORD • ATLASSIAN

ALEX COURTIS • YAK SHAVER • ATLASSIAN

Page 2: AtlasCamp 2015: Plugins 2: All grown up

N E W A N D C O O L

M AT U R E P 2

Mature P2

S D K / A M P S 6 . 0

S A L

C H E C K L I S T

F U T U R E P L U G I N S

Page 3: AtlasCamp 2015: Plugins 2: All grown up

atlassian-plugins-api

Page 4: AtlasCamp 2015: Plugins 2: All grown up

We Updated allthethings!

• Java 8 Language Support• Spring 2.5 -> 4.1• HttpClient 3.x -> 4.4• bndlib 1.43 -> 2.4

• Guava 11.0.2 -> 18.0• Spring DM 2.x -> Apache Gemini Blueprint 2.0• Velocity 1.5, 1.6 -> 1.6, 1.7• Closure Templates (aka Soy) 2011-12-22 -> 2014-04-22

Page 5: AtlasCamp 2015: Plugins 2: All grown up

Plugin Lifecycle That Works!

Page 6: AtlasCamp 2015: Plugins 2: All grown up

Better OSGi Resolution

Producer✕

Mandatory ↓Optional ↺Dynamic ↺

Page 7: AtlasCamp 2015: Plugins 2: All grown up

Better OSGi Resolution (alt)

Producer↓

Mandatory ↓Optional ↺Dynamic ¯\_(ツ)_/¯

Page 8: AtlasCamp 2015: Plugins 2: All grown up

atlassian-trusted-apps

Atlassian Connect

OAuth 2LO

@Deprecated

Page 9: AtlasCamp 2015: Plugins 2: All grown up

M AT U R E P 2

N E W A N D C O O L

New And Cool

S D K / A M P S 6 . 0

S A L

C H E C K L I S T

F U T U R E P L U G I N S

Page 10: AtlasCamp 2015: Plugins 2: All grown up

New Applications Only

JIRA 7.0 Confluence 5.9 Stash 4.0

Page 11: AtlasCamp 2015: Plugins 2: All grown up

Servlet 3.0 - Dynamic Servlet

servletContext.addServlet("my-path", myServletInstance);

servletContext.addServlet("my-path", MyServlet.class);

Page 12: AtlasCamp 2015: Plugins 2: All grown up

Dynamic Modules

final Element e = new DOMElement("servlet");e.addAttribute("key", "my-servlet");e.addAttribute("class", MyServlet.class.getName());final Element url = new DOMElement("url-pattern");url.setText("/my-path");e.add(url);pluginController.addDynamicModule(plugin, e);

Page 13: AtlasCamp 2015: Plugins 2: All grown up

atlassian-plugin.xml Fragments

<plugin> <groupId>com.atlassian.maven.plugins</groupId> <artifactId>maven-amps-plugin</artifactId> <configuration> ... <instructions> ... <Atlassian-Scan-Folders> META-INF/plugin-descriptor, META-INF/plugin-rest-modules, ... </Atlassian-Scan-Folders> </instructions> </configuration></plugin>

Page 14: AtlasCamp 2015: Plugins 2: All grown up

Plugin Transformation

https://bitbucket.org/atlassian/atlassian-spring-scanner

Page 15: AtlasCamp 2015: Plugins 2: All grown up

M AT U R E P 2

S D K / A M P S 6 . 0

SDK / AMPS 6.0

N E W A N D C O O L

S A L

C H E C K L I S T

F U T U R E P L U G I N S

Page 16: AtlasCamp 2015: Plugins 2: All grown up

3.2 / 3.3 Only

Page 17: AtlasCamp 2015: Plugins 2: All grown up

AMPS Supports Real Databases

<dataSource> <driver>org.postgresql.Driver</driver> <url>jdbc:postgresql://localhost:5432/confdb</url> <username>conf_user</username> <password>conf_pwd</password> <defaultDatabase>jdbc:postgresql://localhost:5432/postgres</defaultDatabase> <systemUsername>postgres</systemUsername> <systemPassword>supah_secret</systemPassword>

<dumpFilePath>${project.build.directory}/classes/pg_c59.sql</dumpFilePath> <importMethod>sql</importMethod>

Page 18: AtlasCamp 2015: Plugins 2: All grown up

bndlib 2.4 - java 8 bytecode

Page 19: AtlasCamp 2015: Plugins 2: All grown up

Keep Maven and OSGi Happy

http://semver.org/

MavenThis goes in your POM’s <version><MAJOR>.<MINOR>.<MICRO>-<QUALIFIER>

OSGibndlib translates it to this in your MF<MAJOR>.<MINOR>.<MICRO>.<QUALIFIER>

YES5.8.0

5.8.0-SNAPSHOT

5.8.0-m001

NO5.8

5.8-SNAPSHOT

5.8.SNAPSHOT

5.8.m1

5.8-m1

Page 20: AtlasCamp 2015: Plugins 2: All grown up

M AT U R E P 2

S A L

SAL

N E W A N D C O O L

S D K / A M P S 6 . 0

C H E C K L I S T

F U T U R E P L U G I N S

Page 21: AtlasCamp 2015: Plugins 2: All grown up

Better Security

Page 22: AtlasCamp 2015: Plugins 2: All grown up

Some Highlights

public class HttpClientRequest{ public HttpClientRequest addAuthentication public HttpClientRequest addBasicAuthentication public HttpClientRequest addSeraphAuthentication public HttpClientRequest addTrustedTokenAuthentication

@Deprecatedpublic interface CertificateFactory

Page 23: AtlasCamp 2015: Plugins 2: All grown up

New License API

Page 24: AtlasCamp 2015: Plugins 2: All grown up

Multi Product License Support

public interface LicenseHandler{ boolean hostAllowsMultipleLicenses(); boolean hostAllowsCustomProducts(); Set<String> getProductKeys(); void addProductLicense(String productKey, String license); String getServerId(); SortedSet<String> getAllSupportEntitlementNumbers(); . . .

Page 25: AtlasCamp 2015: Plugins 2: All grown up

Trusted App Changes

Page 26: AtlasCamp 2015: Plugins 2: All grown up

LifecycleAware

Page 27: AtlasCamp 2015: Plugins 2: All grown up

M AT U R E P 2

C H E C K L I S T

Checklist

N E W A N D C O O L

S D K / A M P S 6 . 0

S A L

F U T U R E P L U G I N S

Page 28: AtlasCamp 2015: Plugins 2: All grown up

Go Easy On*;resolution:=optional

Page 29: AtlasCamp 2015: Plugins 2: All grown up

Be Compatible -

Guava 11 and 18

Page 30: AtlasCamp 2015: Plugins 2: All grown up

Update Your Tooling

Page 31: AtlasCamp 2015: Plugins 2: All grown up

atlas-create-plugin

Page 32: AtlasCamp 2015: Plugins 2: All grown up

M AT U R E P 2

F U T U R E P L U G I N S

Future Plugins

N E W A N D C O O L

S D K / A M P S 6 . 0

S A L

C H E C K L I S T

Page 33: AtlasCamp 2015: Plugins 2: All grown up

Atlassian Connect

Page 34: AtlasCamp 2015: Plugins 2: All grown up

Bare Bones OSGi

Page 35: AtlasCamp 2015: Plugins 2: All grown up

Thank you!

JAMES WINTERSPLATFORM LORD

ATLASSIAN

ALEX COURTISYAK SHAVERATLASSIAN

MARCOS SCRIVENYAK SHAVERATLASSIAN

Page 36: AtlasCamp 2015: Plugins 2: All grown up

Plugins 2: All Grown Up

Submit your feedback: go.atlassian.com/acplugins2