SlideShare uma empresa Scribd logo
1 de 63
Baixar para ler offline
June 3-5, 2014 | Berlin, Germany
A P2 Plugin and a
SaaS Platform Walk
Into a Bar…
Jonathan Doklovic, Principal Developer, Atlassian
Stuff That Came out of Developing
Atlassian Connect That Can Help
Make Writing P2 Plugins and Even
Plain Old Java Projects Easier And
More Efficient
Jonathan Doklovic, Principal Developer, Atlassian
Nomenclature
P2
P2Connect
Addons
P2
P2
P2
Building Made Easy
Git Flow
Git Flow vs.
GIT Flow + Maven
K I S S YO U R S A N I T Y G O O D BY E
I want to
merge A LOT
without
conflicts!
Screw
conflicts, I
want to change
poms !
A LOT!
I want
SNAPSHOTS!
I 

want to add
files to your
working
folder
I want to assume
you only have one
master branch
and commit to
source control
myself!
Maven JGIT Flow Plugin
• No need to install git-flow!
• No maven-release-plugin!
• Smartly manages version changes between branches!
• Full GIT Flow lifecycle / merge strategy!
• Extra “goodies” for dealing with CI
K I S S T H E M AV E N R E L E A S E P L U G I N G O O D BY E
bitbucket.org/atlassian/jgit-flow
Transformers Are Evil
<atlassian-plugin key="${project.groupId}.${project.artifactId}" name="${project.name}" plugins-
version="2">
<plugin-info>
<description>${project.description}</description>
<version>${project.version}</version>
<vendor name="${project.organization.name}" url="${project.organization.url}" />
!
<bundle-instructions>
<Export-Package>
com.atlassian.upm.api.util*;version="${upm.version}"
</Export-Package>
</bundle-instructions>
</plugin-info>
!
<component-import key="applicationProperties" interface="com.atlassian.sal.api.ApplicationProperties"
/>
!
<component key="someComponent" class="com.atlassian.example.SomeComponentClass" />
!
</atlassian-plugin>
atlassian-plugin.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:component-scan base-package="org.example"/>
</beans>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:component-scan base-package="org.example"/>
</beans>
@Component @Autowired
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<atlassian-scanner:scan-indexes/>
</beans>
@Named
@Inject
@JiraComponent
@ConfluenceComponent
@ClasspathComponent
@ComponentImport
@ConfluenceImport
@JiraImport
@ExportAsService
@ExportAsDevService
Atlassian Spring Scanner
• No jar transforms!
• No runtime classpath scanning!
• Moves all component related things into java!
• Makes OSGi BND actually work!
• Compile time scanning == super fast plugin loads
K I S S T R A N S F O R M S A N D C L A S S PAT H S C A N N I N G G O O D BY E
bitbucket.org/atlassian/atlassian-spring-scanner
How Do You Install
Nothing?
P2 ==
Dynamic Plugin Modules
bitbucket.org/atlassian/atlassian-pocketknife
• Modules are registered as OSGi Services!
• Complete control over module lifecycle!
• Super fast startup!
• No longer confined to what’s in atlassian-plugin.xml!
M AG I C A L M O D U L E S A P P E A R A N D D I S A P P E A R
Live, Breathe and Eat Code;
Spit Out Docs
XSD
XSD
+
json-schema Generator
• Generate json-schema from JAVA POJOs!
• Easy to use annotations!
• Schema can be validated with ANY json-schema validator!
• Plain Ol’ JAVA library can be embedded in anything
json-schema + Maven
• Generate json-schema from JAVA POJOs!
• Easy to use annotations!
• Schema can be validated with ANY json-schema validator!
• Now embedded in a Maven plugin!
• Adds javadocs as schema descriptions!
• Compile time generation
json-schemagen
bitbucket.org/atlassian/json-schemagen
• json-schema from JAVA POJO’s!
• Runs as a Maven plugin!
• Javadocs included in schema!
• Easily generate example code!
• Keep you docs in your DVCS!
• Never let your docs get out of date!
W R I T E C O D E N O T D O C S
bitbucket.org/atlassian/jgit-flow
bitbucket.org/atlassian/atlassian-spring-scanner
bitbucket.org/atlassian/json-schemagen
bitbucket.org/atlassian/atlassian-pocketknife
Resources
Get In Touch
Here At AtlasCamp
doklovic@atlassian.com
@sysbliss

Mais conteúdo relacionado

Mais procurados

Mais procurados (20)

Testing API's: Tools & Tips & Tricks (Oh My!)
Testing API's: Tools & Tips & Tricks (Oh My!)Testing API's: Tools & Tips & Tricks (Oh My!)
Testing API's: Tools & Tips & Tricks (Oh My!)
 
Release the Monkeys ! Testing in the Wild at Netflix
Release the Monkeys !  Testing in the Wild at NetflixRelease the Monkeys !  Testing in the Wild at Netflix
Release the Monkeys ! Testing in the Wild at Netflix
 
Game of Codes: the Battle for CI
Game of Codes: the Battle for CIGame of Codes: the Battle for CI
Game of Codes: the Battle for CI
 
SaltConf14 - Craig Sebenik, LinkedIn - SaltStack at Web Scale
SaltConf14 - Craig Sebenik, LinkedIn - SaltStack at Web ScaleSaltConf14 - Craig Sebenik, LinkedIn - SaltStack at Web Scale
SaltConf14 - Craig Sebenik, LinkedIn - SaltStack at Web Scale
 
Avoiding integration hell
Avoiding integration hellAvoiding integration hell
Avoiding integration hell
 
Atlassian Roadshow 2016 - DevOps Session
Atlassian Roadshow 2016 - DevOps SessionAtlassian Roadshow 2016 - DevOps Session
Atlassian Roadshow 2016 - DevOps Session
 
#ITsubbotnik Spring 2017: Andriy Filatov "Ансамбль солёных поваров: сравнивае...
#ITsubbotnik Spring 2017: Andriy Filatov "Ансамбль солёных поваров: сравнивае...#ITsubbotnik Spring 2017: Andriy Filatov "Ансамбль солёных поваров: сравнивае...
#ITsubbotnik Spring 2017: Andriy Filatov "Ансамбль солёных поваров: сравнивае...
 
Microservices with Apache Camel
Microservices with Apache CamelMicroservices with Apache Camel
Microservices with Apache Camel
 
CloudSkew Architecture
CloudSkew ArchitectureCloudSkew Architecture
CloudSkew Architecture
 
SaltConf2015: SaltStack at Scale Automating Your Automation
SaltConf2015: SaltStack at Scale Automating Your AutomationSaltConf2015: SaltStack at Scale Automating Your Automation
SaltConf2015: SaltStack at Scale Automating Your Automation
 
Take your CFML Legacy Apps to Modernization
Take your CFML Legacy Apps to ModernizationTake your CFML Legacy Apps to Modernization
Take your CFML Legacy Apps to Modernization
 
Making the switch to DVCS
Making the switch to DVCSMaking the switch to DVCS
Making the switch to DVCS
 
JUC Europe 2015: Optimizing Your CI: Lessons Learned from a Successful Jenkin...
JUC Europe 2015: Optimizing Your CI: Lessons Learned from a Successful Jenkin...JUC Europe 2015: Optimizing Your CI: Lessons Learned from a Successful Jenkin...
JUC Europe 2015: Optimizing Your CI: Lessons Learned from a Successful Jenkin...
 
DevOpsDays Houston 2019 - Shaun Ladewig, Robert Stone - From OverTheWallOps t...
DevOpsDays Houston 2019 - Shaun Ladewig, Robert Stone - From OverTheWallOps t...DevOpsDays Houston 2019 - Shaun Ladewig, Robert Stone - From OverTheWallOps t...
DevOpsDays Houston 2019 - Shaun Ladewig, Robert Stone - From OverTheWallOps t...
 
Swagger code motion talk
Swagger code motion talkSwagger code motion talk
Swagger code motion talk
 
7 Apache Process Cloudstack Developer Day
7 Apache Process Cloudstack Developer Day7 Apache Process Cloudstack Developer Day
7 Apache Process Cloudstack Developer Day
 
Effective Testing with Ansible and InSpec
Effective Testing with Ansible and InSpecEffective Testing with Ansible and InSpec
Effective Testing with Ansible and InSpec
 
Dev112 let's calendar that
Dev112   let's calendar thatDev112   let's calendar that
Dev112 let's calendar that
 
Moscow DevOps Meetup P2P oct 2015
Moscow DevOps Meetup P2P oct 2015Moscow DevOps Meetup P2P oct 2015
Moscow DevOps Meetup P2P oct 2015
 
Monitoring Big Data Systems Done "The Simple Way" - Codemotion Milan 2017 - D...
Monitoring Big Data Systems Done "The Simple Way" - Codemotion Milan 2017 - D...Monitoring Big Data Systems Done "The Simple Way" - Codemotion Milan 2017 - D...
Monitoring Big Data Systems Done "The Simple Way" - Codemotion Milan 2017 - D...
 

Semelhante a AtlasCamp 2014: A P2 Plugin and a SaaS Platform Walk Into a Bar

Using the Atlassian Plugin Platform to Create Your Own SaaS Plugin Platform
Using the Atlassian Plugin Platform to Create Your Own SaaS Plugin PlatformUsing the Atlassian Plugin Platform to Create Your Own SaaS Plugin Platform
Using the Atlassian Plugin Platform to Create Your Own SaaS Plugin Platform
Atlassian
 
Introducing Deployit 3.9
Introducing Deployit 3.9Introducing Deployit 3.9
Introducing Deployit 3.9
XebiaLabs
 

Semelhante a AtlasCamp 2014: A P2 Plugin and a SaaS Platform Walk Into a Bar (20)

Intro to DefectDojo at OWASP Switzerland
Intro to DefectDojo at OWASP SwitzerlandIntro to DefectDojo at OWASP Switzerland
Intro to DefectDojo at OWASP Switzerland
 
Function as a Service
Function as a ServiceFunction as a Service
Function as a Service
 
Apache Maven - eXo VN office presentation
Apache Maven - eXo VN office presentationApache Maven - eXo VN office presentation
Apache Maven - eXo VN office presentation
 
Amis conference soa deployment. the dirty tricks using bamboo, nexus and xl ...
Amis conference soa deployment. the dirty tricks using  bamboo, nexus and xl ...Amis conference soa deployment. the dirty tricks using  bamboo, nexus and xl ...
Amis conference soa deployment. the dirty tricks using bamboo, nexus and xl ...
 
DevOps With Chef and Azure
DevOps With Chef and AzureDevOps With Chef and Azure
DevOps With Chef and Azure
 
Using the Atlassian Plugin Platform to Create Your Own SaaS Plugin Platform
Using the Atlassian Plugin Platform to Create Your Own SaaS Plugin PlatformUsing the Atlassian Plugin Platform to Create Your Own SaaS Plugin Platform
Using the Atlassian Plugin Platform to Create Your Own SaaS Plugin Platform
 
Simple SQL Change Management with Sqitch
Simple SQL Change Management with SqitchSimple SQL Change Management with Sqitch
Simple SQL Change Management with Sqitch
 
Spring Boot to Quarkus: A real app migration experience | DevNation Tech Talk
Spring Boot to Quarkus: A real app migration experience | DevNation Tech TalkSpring Boot to Quarkus: A real app migration experience | DevNation Tech Talk
Spring Boot to Quarkus: A real app migration experience | DevNation Tech Talk
 
How To Make A Framework Plugin That Does Not Suck
How To Make A Framework Plugin That Does Not SuckHow To Make A Framework Plugin That Does Not Suck
How To Make A Framework Plugin That Does Not Suck
 
VSTS Migration Briefing
VSTS Migration BriefingVSTS Migration Briefing
VSTS Migration Briefing
 
Introducing Deployit 3.9
Introducing Deployit 3.9Introducing Deployit 3.9
Introducing Deployit 3.9
 
Scaling Plugins in Critical Systems - Jon Mort
Scaling Plugins in Critical Systems - Jon MortScaling Plugins in Critical Systems - Jon Mort
Scaling Plugins in Critical Systems - Jon Mort
 
Into The Box 2018 CI Deep Dive
Into The Box 2018   CI Deep DiveInto The Box 2018   CI Deep Dive
Into The Box 2018 CI Deep Dive
 
Continuous Integration and Deployment Best Practices on AWS (ARC307) | AWS re...
Continuous Integration and Deployment Best Practices on AWS (ARC307) | AWS re...Continuous Integration and Deployment Best Practices on AWS (ARC307) | AWS re...
Continuous Integration and Deployment Best Practices on AWS (ARC307) | AWS re...
 
Continuous Deployment @ AWS Re:Invent
Continuous Deployment @ AWS Re:InventContinuous Deployment @ AWS Re:Invent
Continuous Deployment @ AWS Re:Invent
 
Intro to GitOps & Flux.pdf
Intro to GitOps & Flux.pdfIntro to GitOps & Flux.pdf
Intro to GitOps & Flux.pdf
 
Standardizing and Managing Your Infrastructure - MOSC 2011
Standardizing and Managing Your Infrastructure - MOSC 2011Standardizing and Managing Your Infrastructure - MOSC 2011
Standardizing and Managing Your Infrastructure - MOSC 2011
 
Developing for the Atlassian Ecosystem
Developing for the Atlassian EcosystemDeveloping for the Atlassian Ecosystem
Developing for the Atlassian Ecosystem
 
AtlasCamp 2014: Atlassian Connect State of the Union
AtlasCamp 2014: Atlassian Connect State of the UnionAtlasCamp 2014: Atlassian Connect State of the Union
AtlasCamp 2014: Atlassian Connect State of the Union
 
Integration Monday - Logic Apps: Development Experiences
Integration Monday - Logic Apps: Development ExperiencesIntegration Monday - Logic Apps: Development Experiences
Integration Monday - Logic Apps: Development Experiences
 

Mais de Atlassian

Design Your Next App with the Atlassian Vendor Sketch Plugin
Design Your Next App with the Atlassian Vendor Sketch PluginDesign Your Next App with the Atlassian Vendor Sketch Plugin
Design Your Next App with the Atlassian Vendor Sketch Plugin
Atlassian
 

Mais de Atlassian (20)

International Women's Day 2020
International Women's Day 2020International Women's Day 2020
International Women's Day 2020
 
10 emerging trends that will unbreak your workplace in 2020
10 emerging trends that will unbreak your workplace in 202010 emerging trends that will unbreak your workplace in 2020
10 emerging trends that will unbreak your workplace in 2020
 
Forge App Showcase
Forge App ShowcaseForge App Showcase
Forge App Showcase
 
Let's Build an Editor Macro with Forge UI
Let's Build an Editor Macro with Forge UILet's Build an Editor Macro with Forge UI
Let's Build an Editor Macro with Forge UI
 
Meet the Forge Runtime
Meet the Forge RuntimeMeet the Forge Runtime
Meet the Forge Runtime
 
Forge UI: A New Way to Customize the Atlassian User Experience
Forge UI: A New Way to Customize the Atlassian User ExperienceForge UI: A New Way to Customize the Atlassian User Experience
Forge UI: A New Way to Customize the Atlassian User Experience
 
Take Action with Forge Triggers
Take Action with Forge TriggersTake Action with Forge Triggers
Take Action with Forge Triggers
 
Observability and Troubleshooting in Forge
Observability and Troubleshooting in ForgeObservability and Troubleshooting in Forge
Observability and Troubleshooting in Forge
 
Trusted by Default: The Forge Security & Privacy Model
Trusted by Default: The Forge Security & Privacy ModelTrusted by Default: The Forge Security & Privacy Model
Trusted by Default: The Forge Security & Privacy Model
 
Designing Forge UI: A Story of Designing an App UI System
Designing Forge UI: A Story of Designing an App UI SystemDesigning Forge UI: A Story of Designing an App UI System
Designing Forge UI: A Story of Designing an App UI System
 
Forge: Under the Hood
Forge: Under the HoodForge: Under the Hood
Forge: Under the Hood
 
Access to User Activities - Activity Platform APIs
Access to User Activities - Activity Platform APIsAccess to User Activities - Activity Platform APIs
Access to User Activities - Activity Platform APIs
 
Design Your Next App with the Atlassian Vendor Sketch Plugin
Design Your Next App with the Atlassian Vendor Sketch PluginDesign Your Next App with the Atlassian Vendor Sketch Plugin
Design Your Next App with the Atlassian Vendor Sketch Plugin
 
Tear Up Your Roadmap and Get Out of the Building
Tear Up Your Roadmap and Get Out of the BuildingTear Up Your Roadmap and Get Out of the Building
Tear Up Your Roadmap and Get Out of the Building
 
Nailing Measurement: a Framework for Measuring Metrics that Matter
Nailing Measurement: a Framework for Measuring Metrics that MatterNailing Measurement: a Framework for Measuring Metrics that Matter
Nailing Measurement: a Framework for Measuring Metrics that Matter
 
Building Apps With Color Blind Users in Mind
Building Apps With Color Blind Users in MindBuilding Apps With Color Blind Users in Mind
Building Apps With Color Blind Users in Mind
 
Creating Inclusive Experiences: Balancing Personality and Accessibility in UX...
Creating Inclusive Experiences: Balancing Personality and Accessibility in UX...Creating Inclusive Experiences: Balancing Personality and Accessibility in UX...
Creating Inclusive Experiences: Balancing Personality and Accessibility in UX...
 
Beyond Diversity: A Guide to Building Balanced Teams
Beyond Diversity: A Guide to Building Balanced TeamsBeyond Diversity: A Guide to Building Balanced Teams
Beyond Diversity: A Guide to Building Balanced Teams
 
The Road(map) to Las Vegas - The Story of an Emerging Self-Managed Team
The Road(map) to Las Vegas - The Story of an Emerging Self-Managed TeamThe Road(map) to Las Vegas - The Story of an Emerging Self-Managed Team
The Road(map) to Las Vegas - The Story of an Emerging Self-Managed Team
 
Building Apps With Enterprise in Mind
Building Apps With Enterprise in MindBuilding Apps With Enterprise in Mind
Building Apps With Enterprise in Mind
 

Último

Structuring Teams and Portfolios for Success
Structuring Teams and Portfolios for SuccessStructuring Teams and Portfolios for Success
Structuring Teams and Portfolios for Success
UXDXConf
 

Último (20)

AI presentation and introduction - Retrieval Augmented Generation RAG 101
AI presentation and introduction - Retrieval Augmented Generation RAG 101AI presentation and introduction - Retrieval Augmented Generation RAG 101
AI presentation and introduction - Retrieval Augmented Generation RAG 101
 
Designing for Hardware Accessibility at Comcast
Designing for Hardware Accessibility at ComcastDesigning for Hardware Accessibility at Comcast
Designing for Hardware Accessibility at Comcast
 
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdf
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdfHow Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdf
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdf
 
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
 
Enterprise Knowledge Graphs - Data Summit 2024
Enterprise Knowledge Graphs - Data Summit 2024Enterprise Knowledge Graphs - Data Summit 2024
Enterprise Knowledge Graphs - Data Summit 2024
 
THE BEST IPTV in GERMANY for 2024: IPTVreel
THE BEST IPTV in  GERMANY for 2024: IPTVreelTHE BEST IPTV in  GERMANY for 2024: IPTVreel
THE BEST IPTV in GERMANY for 2024: IPTVreel
 
WSO2CONMay2024OpenSourceConferenceDebrief.pptx
WSO2CONMay2024OpenSourceConferenceDebrief.pptxWSO2CONMay2024OpenSourceConferenceDebrief.pptx
WSO2CONMay2024OpenSourceConferenceDebrief.pptx
 
Intro in Product Management - Коротко про професію продакт менеджера
Intro in Product Management - Коротко про професію продакт менеджераIntro in Product Management - Коротко про професію продакт менеджера
Intro in Product Management - Коротко про професію продакт менеджера
 
Speed Wins: From Kafka to APIs in Minutes
Speed Wins: From Kafka to APIs in MinutesSpeed Wins: From Kafka to APIs in Minutes
Speed Wins: From Kafka to APIs in Minutes
 
WebAssembly is Key to Better LLM Performance
WebAssembly is Key to Better LLM PerformanceWebAssembly is Key to Better LLM Performance
WebAssembly is Key to Better LLM Performance
 
Structuring Teams and Portfolios for Success
Structuring Teams and Portfolios for SuccessStructuring Teams and Portfolios for Success
Structuring Teams and Portfolios for Success
 
PLAI - Acceleration Program for Generative A.I. Startups
PLAI - Acceleration Program for Generative A.I. StartupsPLAI - Acceleration Program for Generative A.I. Startups
PLAI - Acceleration Program for Generative A.I. Startups
 
The Metaverse: Are We There Yet?
The  Metaverse:    Are   We  There  Yet?The  Metaverse:    Are   We  There  Yet?
The Metaverse: Are We There Yet?
 
AI revolution and Salesforce, Jiří Karpíšek
AI revolution and Salesforce, Jiří KarpíšekAI revolution and Salesforce, Jiří Karpíšek
AI revolution and Salesforce, Jiří Karpíšek
 
Integrating Telephony Systems with Salesforce: Insights and Considerations, B...
Integrating Telephony Systems with Salesforce: Insights and Considerations, B...Integrating Telephony Systems with Salesforce: Insights and Considerations, B...
Integrating Telephony Systems with Salesforce: Insights and Considerations, B...
 
Linux Foundation Edge _ Overview of FDO Software Components _ Randy at Intel.pdf
Linux Foundation Edge _ Overview of FDO Software Components _ Randy at Intel.pdfLinux Foundation Edge _ Overview of FDO Software Components _ Randy at Intel.pdf
Linux Foundation Edge _ Overview of FDO Software Components _ Randy at Intel.pdf
 
How we scaled to 80K users by doing nothing!.pdf
How we scaled to 80K users by doing nothing!.pdfHow we scaled to 80K users by doing nothing!.pdf
How we scaled to 80K users by doing nothing!.pdf
 
10 Differences between Sales Cloud and CPQ, Blanka Doktorová
10 Differences between Sales Cloud and CPQ, Blanka Doktorová10 Differences between Sales Cloud and CPQ, Blanka Doktorová
10 Differences between Sales Cloud and CPQ, Blanka Doktorová
 
ASRock Industrial FDO Solutions in Action for Industrial Edge AI _ Kenny at A...
ASRock Industrial FDO Solutions in Action for Industrial Edge AI _ Kenny at A...ASRock Industrial FDO Solutions in Action for Industrial Edge AI _ Kenny at A...
ASRock Industrial FDO Solutions in Action for Industrial Edge AI _ Kenny at A...
 
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)
 

AtlasCamp 2014: A P2 Plugin and a SaaS Platform Walk Into a Bar

  • 1. June 3-5, 2014 | Berlin, Germany
  • 2. A P2 Plugin and a SaaS Platform Walk Into a Bar… Jonathan Doklovic, Principal Developer, Atlassian
  • 3. Stuff That Came out of Developing Atlassian Connect That Can Help Make Writing P2 Plugins and Even Plain Old Java Projects Easier And More Efficient Jonathan Doklovic, Principal Developer, Atlassian
  • 5.
  • 6. P2
  • 8.
  • 9.
  • 10.
  • 11. P2
  • 12. P2
  • 13. P2
  • 17. GIT Flow + Maven K I S S YO U R S A N I T Y G O O D BY E I want to merge A LOT without conflicts! Screw conflicts, I want to change poms ! A LOT! I want SNAPSHOTS! I 
 want to add files to your working folder I want to assume you only have one master branch and commit to source control myself!
  • 18. Maven JGIT Flow Plugin • No need to install git-flow! • No maven-release-plugin! • Smartly manages version changes between branches! • Full GIT Flow lifecycle / merge strategy! • Extra “goodies” for dealing with CI K I S S T H E M AV E N R E L E A S E P L U G I N G O O D BY E bitbucket.org/atlassian/jgit-flow
  • 20. <atlassian-plugin key="${project.groupId}.${project.artifactId}" name="${project.name}" plugins- version="2"> <plugin-info> <description>${project.description}</description> <version>${project.version}</version> <vendor name="${project.organization.name}" url="${project.organization.url}" /> ! <bundle-instructions> <Export-Package> com.atlassian.upm.api.util*;version="${upm.version}" </Export-Package> </bundle-instructions> </plugin-info> ! <component-import key="applicationProperties" interface="com.atlassian.sal.api.ApplicationProperties" /> ! <component key="someComponent" class="com.atlassian.example.SomeComponentClass" /> ! </atlassian-plugin> atlassian-plugin.xml
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26. <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <context:component-scan base-package="org.example"/> </beans>
  • 27. <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <context:component-scan base-package="org.example"/> </beans> @Component @Autowired
  • 28. <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <atlassian-scanner:scan-indexes/> </beans>
  • 30. Atlassian Spring Scanner • No jar transforms! • No runtime classpath scanning! • Moves all component related things into java! • Makes OSGi BND actually work! • Compile time scanning == super fast plugin loads K I S S T R A N S F O R M S A N D C L A S S PAT H S C A N N I N G G O O D BY E bitbucket.org/atlassian/atlassian-spring-scanner
  • 31. How Do You Install Nothing?
  • 32. P2 ==
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44. Dynamic Plugin Modules bitbucket.org/atlassian/atlassian-pocketknife • Modules are registered as OSGi Services! • Complete control over module lifecycle! • Super fast startup! • No longer confined to what’s in atlassian-plugin.xml! M AG I C A L M O D U L E S A P P E A R A N D D I S A P P E A R
  • 45. Live, Breathe and Eat Code; Spit Out Docs
  • 46.
  • 47. XSD
  • 48. XSD
  • 49.
  • 50. +
  • 51.
  • 52. json-schema Generator • Generate json-schema from JAVA POJOs! • Easy to use annotations! • Schema can be validated with ANY json-schema validator! • Plain Ol’ JAVA library can be embedded in anything
  • 53.
  • 54. json-schema + Maven • Generate json-schema from JAVA POJOs! • Easy to use annotations! • Schema can be validated with ANY json-schema validator! • Now embedded in a Maven plugin! • Adds javadocs as schema descriptions! • Compile time generation
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61. json-schemagen bitbucket.org/atlassian/json-schemagen • json-schema from JAVA POJO’s! • Runs as a Maven plugin! • Javadocs included in schema! • Easily generate example code! • Keep you docs in your DVCS! • Never let your docs get out of date! W R I T E C O D E N O T D O C S
  • 63. Get In Touch Here At AtlasCamp doklovic@atlassian.com @sysbliss