SlideShare a Scribd company logo
1 of 48
Download to read offline
How to Contribute to
Apache Usergrid
Dave Johnson
Contributor
Who Cares?
• Who cares how to contribute to Usergrid?
• At least three possibilities:
• Those who run Usergrid in production
• Those who want to get involved in open source
• ASF officers and directors
Topics
• Getting, building and running the Usergrid code
• Usergrid Internals
• Usergrid Contributor workflow
• Usergrid Roadmap
• Database and more, wrapped by a REST API
• Store and query JSON Entities & Files
• Authentication: Users, Roles & Permissions
• Comprehensive Admin Portal
• SDKs for JavaScript, iOS, Android, Java, Ruby…
First step
Get signed up…
Emailocracy
• Seems old-fashioned but…
• Everything happens on the mailing lists
• dev@usergrid.incubator.org
• user@usergrid.incubator.org
• commits@usergrid.incubator.org
• If it did not happen on a list, then it did not happen
https://issues.apache.org/jira/browse/USERGRID/
https://github.com/
https://www.apache.org/licenses/icla.txt
Get the code!
$	
  git	
  clone	
  https://github.com/usergrid/usergrid.git	
  
Cloning	
  into	
  'usergrid'...	
  
remote:	
  Reusing	
  existing	
  pack:	
  77027,	
  done.	
  
remote:	
  Counting	
  objects:	
  43,	
  done.	
  
remote:	
  Compressing	
  objects:	
  100%	
  (42/42),	
  done.	
  
remote:	
  Total	
  77070	
  (delta	
  20),	
  reused	
  0	
  (delta	
  0)	
  
Receiving	
  objects:	
  100%	
  (77070/77070),	
  215.67	
  MiB	
  |	
  
259.00	
  KiB/s,	
  done.	
  
Resolving	
  deltas:	
  100%	
  (31782/31782),	
  done.	
  
Checking	
  connectivity...	
  done	
  
$	
  ls	
  usergrid	
  
LICENSE	
  	
   NOTICE	
   	
   README.md	
  	
  	
   portal/	
  	
   sdks/	
  	
  
stack/	
   	
   ugc/
The lay of the land
• The Stack
• The Portal
• The SDKs
• Documentation & Web site
Deployment Architecture
Cassandra
Cassandra
Cassandra
Stack
Tomcat
Stack
Tomcat
Load
Balancer
Android SDK
iOS SDK
Portal
JS SDK
UGC
Ruby SDK
PHP SDK
The Usergrid Stack
Stack
Tomcat
Stack Overview
• Java web application
• Jersey (JAX-RS) for REST, Jackson for JSON
• Spring for Dependency Injection
• Hector for Cassandra client access
• Composed of Maven modules
Building the Stack
• Install Java 7 and Maven 3.0.5
• cd stack
• mvn clean install
• Or for a quicker build:
• mvn -DskipTests=true clean install
• Results are in:
• rest/target/ROOT.war
• launcher/target/usergrid-launcher-0.0.29-SNAPSHOT.jar
Running the Stack
• cd stack/launcher
• java -jar target/usergrid-launcher-0.0.29-SNAPSHOT.jar
Stack Internals
• Key Maven modules:
• Config
• Core
• Services
• REST
Stack Config Module
Stack Core Module
Entity
DynamicEntity
ActivityEvent Asset
TypedEntity
DeviceUser Role
UUID
Type
Properties
Results EntityManager
QueueManager
Query
LockManager
SchedulerService
CounterStore
RelationManager
Hector SpringJacksonCommons Cassandra ANTLRConfig
Stack Services Module
AssetsService
GroupsService
AbstractPathBasedCollectionService
AbstractService
FollowingService
GenericConnectionService
AbstractConnectionService
UsersService
DevicesService
Service
RootCollectionService
RolesService
ActivitiesService
AbstractCollectionService
Service
getServiceType()
getEntityType()
isRootService()
invoke( action, request, results, payload )
getEntity( request, UUID uuid )
getEntity( request, String name )
importEntity(request, entity )
writeEntity( request, entity )
updateEntity( request, ref, payload )
ServiceManager
ServiceRequest
ServiceResult
ServiceContext
ServiceAction
( POST, GET, PUT,
DELETE, HEAD,
OPTIONS )
ManagementService
SignInAsProvider TokenService
EncryptionService
RealmExportService
ShiroSpringConfig Core JClouds Amber
Stack REST Module
ManagementResource
EventsResource
AssetsResource
UsersResource
AuthResource
QueueResource
UserResource
ApplicationResource
OrganizationResource
RootResource
ServiceResources
JAX-RS Resources
ShiroSpringConfig Core JerseyServices Jackson
Testing the stack
• cd stack; mvn test
• Each module has tests, implemented via JUnit
• Unit tests *Test and Integration tests are *IT
• Core and Services tests start and stop Cassandra.
• See also: CassandraResource.java
• REST tests start Cassandra and Jetty (via Maven-Jetty plugin)
Other starting points
• Install on Tomcat and Cassandra locally
• https://usergrid.incubator.apache.org/docs/deploy-local/!
• Launch N-node cluster via AWS Cloud Formation
• https://github.com/usergrid/usergrid/tree/two-dot-o/stack/awscluster !
• 1-node cluster via Vagrant and Chef
• https://github.com/r3b/usergrid-vagrant !
• 3-node cluster via Vagrant, bash and Groovy
• https://github.com/usergrid/usergrid/tree/vagrant-launcher/stack/launcher-vagrant
Experim
ental
Portal
JavaScript SDK
The Usergrid Portal
Portal Architecture
• Portal is an Angular.js application
• Access to Usergrid via Usergrid
JavaScript SDK
• Grunt used as build system
• Can be deployed to any web
server (e.g. Apache HTTPD)
• Can be run locally Grunt and
Node.js
Building the Portal
• Install node.js from http://nodejs.org/download
• sudo npm install grunt-cli -g
• cd portal; ./build.sh
• Build is in dist/appsvc-ui.2.0.0.zip
• Ready for deployment to HTTPD, Tomcat, etc.
https://github.com/usergrid/usergrid/blob/master/portal/README.md
Running the Portal
• Sign up for an Apigee App Services account:
• https://accounts.apigee.com/accounts/sign_in!
• Run the Portal via grunt and node.js:
• cd portal; grunt dev
• Navigate to http://localhost:3000
• Login with Apigee App Services credentials
Running against your own stack
• Build and deploy stack (via Launcher or local
Tomcat and Cassandra)
• Run the Portal via grunt and node.js:
• cd portal; grunt dev
• Navigate to the Portal, login as superuser/superuser
• http://localhost:3000?api_url=http://localhost:8080
The SDKs
• JavaScript / HTML5
• iOS
• Android
• Java
• Ruby
• Ruby On Rails
• PHP
Contributor Workflow
• Discuss!
• Discuss your changes on the dev mailing list
• Create a JIRA issue for your changes
• Do the work!
• Fork the Github usergrid/usergrid repo
• Make your changes and add tests
• Push your changes!
• Submit a clean PR against the appropriate branch of usergrid/usergrid
• Update JIRA issue, announce PR on dev mailing list
https://github.com/usergrid/usergrid
Git repos workflow
usergrid / usergrid
!
apache / incubator-usergrid
Apache Git
You work in !
your fork
Official Release!
on Apache Mirrors
1
2
3
4
5
6
You fork
the repo
You submit
Pull Request
Auto-merge
to official repo
Auto-merge to
read-only mirror
All that for a tiny change?
• Can’t be bothered?
• You have two options for small changes:
1. Submit Patch via JIRA
• (agreeing to license your change under ASL)
2. Submit Pull Request via GitHub
• (agreeing to license your change under ASL)
Contributing Docs
• Web site and documentation in SVN:
http://svn.apache.org/viewvc/incubator/usergrid/site/!!
• Content authored in Markdown
• Build process requires Pandoc, Python & Ruby
• Contributors must submit patches via JIRA
• We need to fix this
http://svn.apache.org/viewvc/incubator/usergrid/site/README.md?view=markup
Roadmap
• Get a first Apache release out
• Graduate!
• Usergrid “2.0” with new Persistence Engine
• Other ideas…
• https://issues.apache.org/jira/browse/USERGRID-8
First release
• Team working slowly towards first release
• What’s needed?
• License headers everywhere
• Decide on release packaging
• Installation & getting started documentation
• A successful release vote
WIP: two-dot-o branch
• New Core Persistence Library
• New guts for the EntityManager
• Multi-Version Concurrency Control (MVCC)
• Astyanix, RxJava, Hystrix and Guice
• ElasticSearch Index & Query implementation
Questions?

More Related Content

What's hot

Building a Mobile Data Platform with Cassandra - Apigee Under the Hood (Webcast)
Building a Mobile Data Platform with Cassandra - Apigee Under the Hood (Webcast)Building a Mobile Data Platform with Cassandra - Apigee Under the Hood (Webcast)
Building a Mobile Data Platform with Cassandra - Apigee Under the Hood (Webcast)Apigee | Google Cloud
 
Building Beautiful REST APIs with ASP.NET Core
Building Beautiful REST APIs with ASP.NET CoreBuilding Beautiful REST APIs with ASP.NET Core
Building Beautiful REST APIs with ASP.NET CoreStormpath
 
Simple REST-APIs with Dropwizard and Swagger
Simple REST-APIs with Dropwizard and SwaggerSimple REST-APIs with Dropwizard and Swagger
Simple REST-APIs with Dropwizard and SwaggerLeanIX GmbH
 
Reactive Java Microservices with Spring Boot and JHipster - Denver JUG 2021
Reactive Java Microservices with Spring Boot and JHipster - Denver JUG 2021Reactive Java Microservices with Spring Boot and JHipster - Denver JUG 2021
Reactive Java Microservices with Spring Boot and JHipster - Denver JUG 2021Matt Raible
 
Getting Started With Angular
Getting Started With AngularGetting Started With Angular
Getting Started With AngularStormpath
 
Prototyping applications with heroku and elasticsearch
 Prototyping applications with heroku and elasticsearch Prototyping applications with heroku and elasticsearch
Prototyping applications with heroku and elasticsearchprotofy
 
Rapid API Development with LoopBack/StrongLoop
Rapid API Development with LoopBack/StrongLoopRapid API Development with LoopBack/StrongLoop
Rapid API Development with LoopBack/StrongLoopRaymond Camden
 
Creating Modular Test-Driven SPAs with Spring and AngularJS
Creating Modular Test-Driven SPAs with Spring and AngularJSCreating Modular Test-Driven SPAs with Spring and AngularJS
Creating Modular Test-Driven SPAs with Spring and AngularJSGunnar Hillert
 
Working with LoopBack Models
Working with LoopBack ModelsWorking with LoopBack Models
Working with LoopBack ModelsRaymond Feng
 
Android Intermediatte IAK full
Android Intermediatte IAK fullAndroid Intermediatte IAK full
Android Intermediatte IAK fullAhmad Arif Faizin
 
Learn Developing REST API in Node.js using LoopBack Framework
Learn Developing REST API  in Node.js using LoopBack FrameworkLearn Developing REST API  in Node.js using LoopBack Framework
Learn Developing REST API in Node.js using LoopBack FrameworkMarudi Subakti
 
Making connected apps with BaaS (Droidcon Bangalore 2014)
Making connected apps with BaaS (Droidcon Bangalore 2014)Making connected apps with BaaS (Droidcon Bangalore 2014)
Making connected apps with BaaS (Droidcon Bangalore 2014)Varun Torka
 
Building a Node.js API backend with LoopBack in 5 Minutes
Building a Node.js API backend with LoopBack in 5 MinutesBuilding a Node.js API backend with LoopBack in 5 Minutes
Building a Node.js API backend with LoopBack in 5 MinutesRaymond Feng
 
Discover the Possibilities of the Jira Cloud Asset API
Discover the Possibilities of the Jira Cloud Asset APIDiscover the Possibilities of the Jira Cloud Asset API
Discover the Possibilities of the Jira Cloud Asset APIAtlassian
 
The Best Way to Become an Android Developer Expert with Android Jetpack
The Best Way to Become an Android Developer Expert  with Android JetpackThe Best Way to Become an Android Developer Expert  with Android Jetpack
The Best Way to Become an Android Developer Expert with Android JetpackAhmad Arif Faizin
 
Full Stack Developer
Full Stack DeveloperFull Stack Developer
Full Stack DeveloperAkbar Uddin
 
Building Mobile Apps With Ionic & Loopback
Building Mobile Apps With Ionic & LoopbackBuilding Mobile Apps With Ionic & Loopback
Building Mobile Apps With Ionic & LoopbackChibuzor Obiora
 
Supercharge Your Pages - New Ways to Extend the Confluence Editor
Supercharge Your Pages - New Ways to Extend the Confluence EditorSupercharge Your Pages - New Ways to Extend the Confluence Editor
Supercharge Your Pages - New Ways to Extend the Confluence EditorAtlassian
 
Building Beautiful REST APIs in ASP.NET Core
Building Beautiful REST APIs in ASP.NET CoreBuilding Beautiful REST APIs in ASP.NET Core
Building Beautiful REST APIs in ASP.NET CoreNate Barbettini
 

What's hot (20)

Building a Mobile Data Platform with Cassandra - Apigee Under the Hood (Webcast)
Building a Mobile Data Platform with Cassandra - Apigee Under the Hood (Webcast)Building a Mobile Data Platform with Cassandra - Apigee Under the Hood (Webcast)
Building a Mobile Data Platform with Cassandra - Apigee Under the Hood (Webcast)
 
Building Beautiful REST APIs with ASP.NET Core
Building Beautiful REST APIs with ASP.NET CoreBuilding Beautiful REST APIs with ASP.NET Core
Building Beautiful REST APIs with ASP.NET Core
 
Simple REST-APIs with Dropwizard and Swagger
Simple REST-APIs with Dropwizard and SwaggerSimple REST-APIs with Dropwizard and Swagger
Simple REST-APIs with Dropwizard and Swagger
 
Reactive Java Microservices with Spring Boot and JHipster - Denver JUG 2021
Reactive Java Microservices with Spring Boot and JHipster - Denver JUG 2021Reactive Java Microservices with Spring Boot and JHipster - Denver JUG 2021
Reactive Java Microservices with Spring Boot and JHipster - Denver JUG 2021
 
Getting Started With Angular
Getting Started With AngularGetting Started With Angular
Getting Started With Angular
 
Prototyping applications with heroku and elasticsearch
 Prototyping applications with heroku and elasticsearch Prototyping applications with heroku and elasticsearch
Prototyping applications with heroku and elasticsearch
 
Rapid API Development with LoopBack/StrongLoop
Rapid API Development with LoopBack/StrongLoopRapid API Development with LoopBack/StrongLoop
Rapid API Development with LoopBack/StrongLoop
 
Creating Modular Test-Driven SPAs with Spring and AngularJS
Creating Modular Test-Driven SPAs with Spring and AngularJSCreating Modular Test-Driven SPAs with Spring and AngularJS
Creating Modular Test-Driven SPAs with Spring and AngularJS
 
Working with LoopBack Models
Working with LoopBack ModelsWorking with LoopBack Models
Working with LoopBack Models
 
Full Stack Scala
Full Stack ScalaFull Stack Scala
Full Stack Scala
 
Android Intermediatte IAK full
Android Intermediatte IAK fullAndroid Intermediatte IAK full
Android Intermediatte IAK full
 
Learn Developing REST API in Node.js using LoopBack Framework
Learn Developing REST API  in Node.js using LoopBack FrameworkLearn Developing REST API  in Node.js using LoopBack Framework
Learn Developing REST API in Node.js using LoopBack Framework
 
Making connected apps with BaaS (Droidcon Bangalore 2014)
Making connected apps with BaaS (Droidcon Bangalore 2014)Making connected apps with BaaS (Droidcon Bangalore 2014)
Making connected apps with BaaS (Droidcon Bangalore 2014)
 
Building a Node.js API backend with LoopBack in 5 Minutes
Building a Node.js API backend with LoopBack in 5 MinutesBuilding a Node.js API backend with LoopBack in 5 Minutes
Building a Node.js API backend with LoopBack in 5 Minutes
 
Discover the Possibilities of the Jira Cloud Asset API
Discover the Possibilities of the Jira Cloud Asset APIDiscover the Possibilities of the Jira Cloud Asset API
Discover the Possibilities of the Jira Cloud Asset API
 
The Best Way to Become an Android Developer Expert with Android Jetpack
The Best Way to Become an Android Developer Expert  with Android JetpackThe Best Way to Become an Android Developer Expert  with Android Jetpack
The Best Way to Become an Android Developer Expert with Android Jetpack
 
Full Stack Developer
Full Stack DeveloperFull Stack Developer
Full Stack Developer
 
Building Mobile Apps With Ionic & Loopback
Building Mobile Apps With Ionic & LoopbackBuilding Mobile Apps With Ionic & Loopback
Building Mobile Apps With Ionic & Loopback
 
Supercharge Your Pages - New Ways to Extend the Confluence Editor
Supercharge Your Pages - New Ways to Extend the Confluence EditorSupercharge Your Pages - New Ways to Extend the Confluence Editor
Supercharge Your Pages - New Ways to Extend the Confluence Editor
 
Building Beautiful REST APIs in ASP.NET Core
Building Beautiful REST APIs in ASP.NET CoreBuilding Beautiful REST APIs in ASP.NET Core
Building Beautiful REST APIs in ASP.NET Core
 

Similar to How to Contribute to Apache Usergrid

Web Development using Ruby on Rails
Web Development using Ruby on RailsWeb Development using Ruby on Rails
Web Development using Ruby on RailsAvi Kedar
 
Play Framework and Activator
Play Framework and ActivatorPlay Framework and Activator
Play Framework and ActivatorKevin Webber
 
IVS CTO Night And Day 2018 Winter - [re:Cap] Serverless & Mobile
IVS CTO Night And Day 2018 Winter - [re:Cap] Serverless & MobileIVS CTO Night And Day 2018 Winter - [re:Cap] Serverless & Mobile
IVS CTO Night And Day 2018 Winter - [re:Cap] Serverless & MobileAmazon Web Services Japan
 
Google App Engine Java, Groovy and Gaelyk
Google App Engine Java, Groovy and GaelykGoogle App Engine Java, Groovy and Gaelyk
Google App Engine Java, Groovy and GaelykGuillaume Laforge
 
Benefits of an Open environment with Wakanda
Benefits of an Open environment with WakandaBenefits of an Open environment with Wakanda
Benefits of an Open environment with WakandaAlexandre Morgaut
 
How to JavaOne 2016 - Generate Customized Java 8 Code from Your Database [TUT...
How to JavaOne 2016 - Generate Customized Java 8 Code from Your Database [TUT...How to JavaOne 2016 - Generate Customized Java 8 Code from Your Database [TUT...
How to JavaOne 2016 - Generate Customized Java 8 Code from Your Database [TUT...Malin Weiss
 
JavaOne2016 - How to Generate Customized Java 8 Code from Your Database [TUT4...
JavaOne2016 - How to Generate Customized Java 8 Code from Your Database [TUT4...JavaOne2016 - How to Generate Customized Java 8 Code from Your Database [TUT4...
JavaOne2016 - How to Generate Customized Java 8 Code from Your Database [TUT4...Speedment, Inc.
 
Developing for the Atlassian Ecosystem
Developing for the Atlassian EcosystemDeveloping for the Atlassian Ecosystem
Developing for the Atlassian EcosystemAlex Henderson
 
Introduction to React native
Introduction to React nativeIntroduction to React native
Introduction to React nativeDhaval Barot
 
Untangling - fall2017 - week 9
Untangling - fall2017 - week 9Untangling - fall2017 - week 9
Untangling - fall2017 - week 9Derek Jacoby
 
Android lessons you won't learn in school
Android lessons you won't learn in schoolAndroid lessons you won't learn in school
Android lessons you won't learn in schoolMichael Galpin
 
Middleware in Golang: InVision's Rye
Middleware in Golang: InVision's RyeMiddleware in Golang: InVision's Rye
Middleware in Golang: InVision's RyeCale Hoopes
 
Groovy & Grails eXchange 2012 vert.x presentation
Groovy & Grails eXchange 2012 vert.x presentationGroovy & Grails eXchange 2012 vert.x presentation
Groovy & Grails eXchange 2012 vert.x presentationStuart (Pid) Williams
 
External JavaScript Widget Development Best Practices (updated) (v.1.1)
External JavaScript Widget Development Best Practices (updated) (v.1.1) External JavaScript Widget Development Best Practices (updated) (v.1.1)
External JavaScript Widget Development Best Practices (updated) (v.1.1) Volkan Özçelik
 
How to generate customized java 8 code from your database
How to generate customized java 8 code from your databaseHow to generate customized java 8 code from your database
How to generate customized java 8 code from your databaseSpeedment, Inc.
 
Silicon Valley JUG - How to generate customized java 8 code from your database
Silicon Valley JUG - How to generate customized java 8 code from your databaseSilicon Valley JUG - How to generate customized java 8 code from your database
Silicon Valley JUG - How to generate customized java 8 code from your databaseSpeedment, Inc.
 
External JavaScript Widget Development Best Practices
External JavaScript Widget Development Best PracticesExternal JavaScript Widget Development Best Practices
External JavaScript Widget Development Best PracticesVolkan Özçelik
 
Java scriptwidgetdevelopmentjstanbul2012
Java scriptwidgetdevelopmentjstanbul2012Java scriptwidgetdevelopmentjstanbul2012
Java scriptwidgetdevelopmentjstanbul2012Volkan Özçelik
 

Similar to How to Contribute to Apache Usergrid (20)

Web Development using Ruby on Rails
Web Development using Ruby on RailsWeb Development using Ruby on Rails
Web Development using Ruby on Rails
 
Play Framework and Activator
Play Framework and ActivatorPlay Framework and Activator
Play Framework and Activator
 
IVS CTO Night And Day 2018 Winter - [re:Cap] Serverless & Mobile
IVS CTO Night And Day 2018 Winter - [re:Cap] Serverless & MobileIVS CTO Night And Day 2018 Winter - [re:Cap] Serverless & Mobile
IVS CTO Night And Day 2018 Winter - [re:Cap] Serverless & Mobile
 
Google App Engine Java, Groovy and Gaelyk
Google App Engine Java, Groovy and GaelykGoogle App Engine Java, Groovy and Gaelyk
Google App Engine Java, Groovy and Gaelyk
 
Benefits of an Open environment with Wakanda
Benefits of an Open environment with WakandaBenefits of an Open environment with Wakanda
Benefits of an Open environment with Wakanda
 
How to JavaOne 2016 - Generate Customized Java 8 Code from Your Database [TUT...
How to JavaOne 2016 - Generate Customized Java 8 Code from Your Database [TUT...How to JavaOne 2016 - Generate Customized Java 8 Code from Your Database [TUT...
How to JavaOne 2016 - Generate Customized Java 8 Code from Your Database [TUT...
 
JavaOne2016 - How to Generate Customized Java 8 Code from Your Database [TUT4...
JavaOne2016 - How to Generate Customized Java 8 Code from Your Database [TUT4...JavaOne2016 - How to Generate Customized Java 8 Code from Your Database [TUT4...
JavaOne2016 - How to Generate Customized Java 8 Code from Your Database [TUT4...
 
Developing for the Atlassian Ecosystem
Developing for the Atlassian EcosystemDeveloping for the Atlassian Ecosystem
Developing for the Atlassian Ecosystem
 
Introduction to React native
Introduction to React nativeIntroduction to React native
Introduction to React native
 
Untangling - fall2017 - week 9
Untangling - fall2017 - week 9Untangling - fall2017 - week 9
Untangling - fall2017 - week 9
 
Android lessons you won't learn in school
Android lessons you won't learn in schoolAndroid lessons you won't learn in school
Android lessons you won't learn in school
 
Middleware in Golang: InVision's Rye
Middleware in Golang: InVision's RyeMiddleware in Golang: InVision's Rye
Middleware in Golang: InVision's Rye
 
Groovy & Grails eXchange 2012 vert.x presentation
Groovy & Grails eXchange 2012 vert.x presentationGroovy & Grails eXchange 2012 vert.x presentation
Groovy & Grails eXchange 2012 vert.x presentation
 
ITB2017 - Keynote
ITB2017 - KeynoteITB2017 - Keynote
ITB2017 - Keynote
 
External JavaScript Widget Development Best Practices (updated) (v.1.1)
External JavaScript Widget Development Best Practices (updated) (v.1.1) External JavaScript Widget Development Best Practices (updated) (v.1.1)
External JavaScript Widget Development Best Practices (updated) (v.1.1)
 
How to generate customized java 8 code from your database
How to generate customized java 8 code from your databaseHow to generate customized java 8 code from your database
How to generate customized java 8 code from your database
 
Silicon Valley JUG - How to generate customized java 8 code from your database
Silicon Valley JUG - How to generate customized java 8 code from your databaseSilicon Valley JUG - How to generate customized java 8 code from your database
Silicon Valley JUG - How to generate customized java 8 code from your database
 
External JavaScript Widget Development Best Practices
External JavaScript Widget Development Best PracticesExternal JavaScript Widget Development Best Practices
External JavaScript Widget Development Best Practices
 
Java scriptwidgetdevelopmentjstanbul2012
Java scriptwidgetdevelopmentjstanbul2012Java scriptwidgetdevelopmentjstanbul2012
Java scriptwidgetdevelopmentjstanbul2012
 
[Struyf] Automate Your Tasks With Azure Functions
[Struyf] Automate Your Tasks With Azure Functions[Struyf] Automate Your Tasks With Azure Functions
[Struyf] Automate Your Tasks With Azure Functions
 

More from David M. Johnson

More from David M. Johnson (6)

Innovate 2010-oslc-jazz
Innovate 2010-oslc-jazzInnovate 2010-oslc-jazz
Innovate 2010-oslc-jazz
 
Barcamprdu linkeddata
Barcamprdu linkeddataBarcamprdu linkeddata
Barcamprdu linkeddata
 
Whats New In Roller5
Whats New In Roller5Whats New In Roller5
Whats New In Roller5
 
Shindig for Blogs and Wikis
Shindig for Blogs and WikisShindig for Blogs and Wikis
Shindig for Blogs and Wikis
 
Social Software at work
Social Software at workSocial Software at work
Social Software at work
 
Beyond Blogging: Feeds in Action
Beyond Blogging: Feeds in ActionBeyond Blogging: Feeds in Action
Beyond Blogging: Feeds in Action
 

Recently uploaded

Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension AidPhilip Schwarz
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is insideshinachiaurasa2
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️Delhi Call girls
 
10 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 202410 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 2024Mind IT Systems
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfkalichargn70th171
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Modelsaagamshah0812
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...masabamasaba
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...Health
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisamasabamasaba
 
%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrandmasabamasaba
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...masabamasaba
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...panagenda
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrainmasabamasaba
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisamasabamasaba
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastPapp Krisztián
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionOnePlan Solutions
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...masabamasaba
 
%in Durban+277-882-255-28 abortion pills for sale in Durban
%in Durban+277-882-255-28 abortion pills for sale in Durban%in Durban+277-882-255-28 abortion pills for sale in Durban
%in Durban+277-882-255-28 abortion pills for sale in Durbanmasabamasaba
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Steffen Staab
 

Recently uploaded (20)

Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
10 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 202410 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 2024
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the past
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
 
%in Durban+277-882-255-28 abortion pills for sale in Durban
%in Durban+277-882-255-28 abortion pills for sale in Durban%in Durban+277-882-255-28 abortion pills for sale in Durban
%in Durban+277-882-255-28 abortion pills for sale in Durban
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 

How to Contribute to Apache Usergrid

  • 1. How to Contribute to Apache Usergrid Dave Johnson Contributor
  • 2. Who Cares? • Who cares how to contribute to Usergrid? • At least three possibilities: • Those who run Usergrid in production • Those who want to get involved in open source • ASF officers and directors
  • 3. Topics • Getting, building and running the Usergrid code • Usergrid Internals • Usergrid Contributor workflow • Usergrid Roadmap
  • 4. • Database and more, wrapped by a REST API • Store and query JSON Entities & Files • Authentication: Users, Roles & Permissions • Comprehensive Admin Portal • SDKs for JavaScript, iOS, Android, Java, Ruby…
  • 6.
  • 7. Emailocracy • Seems old-fashioned but… • Everything happens on the mailing lists • dev@usergrid.incubator.org • user@usergrid.incubator.org • commits@usergrid.incubator.org • If it did not happen on a list, then it did not happen
  • 11. Get the code! $  git  clone  https://github.com/usergrid/usergrid.git   Cloning  into  'usergrid'...   remote:  Reusing  existing  pack:  77027,  done.   remote:  Counting  objects:  43,  done.   remote:  Compressing  objects:  100%  (42/42),  done.   remote:  Total  77070  (delta  20),  reused  0  (delta  0)   Receiving  objects:  100%  (77070/77070),  215.67  MiB  |   259.00  KiB/s,  done.   Resolving  deltas:  100%  (31782/31782),  done.   Checking  connectivity...  done   $  ls  usergrid   LICENSE     NOTICE     README.md       portal/     sdks/     stack/     ugc/
  • 12. The lay of the land • The Stack • The Portal • The SDKs • Documentation & Web site
  • 15. Stack Overview • Java web application • Jersey (JAX-RS) for REST, Jackson for JSON • Spring for Dependency Injection • Hector for Cassandra client access • Composed of Maven modules
  • 16. Building the Stack • Install Java 7 and Maven 3.0.5 • cd stack • mvn clean install • Or for a quicker build: • mvn -DskipTests=true clean install • Results are in: • rest/target/ROOT.war • launcher/target/usergrid-launcher-0.0.29-SNAPSHOT.jar
  • 17. Running the Stack • cd stack/launcher • java -jar target/usergrid-launcher-0.0.29-SNAPSHOT.jar
  • 18.
  • 19. Stack Internals • Key Maven modules: • Config • Core • Services • REST
  • 21. Stack Core Module Entity DynamicEntity ActivityEvent Asset TypedEntity DeviceUser Role UUID Type Properties Results EntityManager QueueManager Query LockManager SchedulerService CounterStore RelationManager Hector SpringJacksonCommons Cassandra ANTLRConfig
  • 22. Stack Services Module AssetsService GroupsService AbstractPathBasedCollectionService AbstractService FollowingService GenericConnectionService AbstractConnectionService UsersService DevicesService Service RootCollectionService RolesService ActivitiesService AbstractCollectionService Service getServiceType() getEntityType() isRootService() invoke( action, request, results, payload ) getEntity( request, UUID uuid ) getEntity( request, String name ) importEntity(request, entity ) writeEntity( request, entity ) updateEntity( request, ref, payload ) ServiceManager ServiceRequest ServiceResult ServiceContext ServiceAction ( POST, GET, PUT, DELETE, HEAD, OPTIONS ) ManagementService SignInAsProvider TokenService EncryptionService RealmExportService ShiroSpringConfig Core JClouds Amber
  • 24. Testing the stack • cd stack; mvn test • Each module has tests, implemented via JUnit • Unit tests *Test and Integration tests are *IT • Core and Services tests start and stop Cassandra. • See also: CassandraResource.java • REST tests start Cassandra and Jetty (via Maven-Jetty plugin)
  • 25. Other starting points • Install on Tomcat and Cassandra locally • https://usergrid.incubator.apache.org/docs/deploy-local/! • Launch N-node cluster via AWS Cloud Formation • https://github.com/usergrid/usergrid/tree/two-dot-o/stack/awscluster ! • 1-node cluster via Vagrant and Chef • https://github.com/r3b/usergrid-vagrant ! • 3-node cluster via Vagrant, bash and Groovy • https://github.com/usergrid/usergrid/tree/vagrant-launcher/stack/launcher-vagrant Experim ental
  • 27. Portal Architecture • Portal is an Angular.js application • Access to Usergrid via Usergrid JavaScript SDK • Grunt used as build system • Can be deployed to any web server (e.g. Apache HTTPD) • Can be run locally Grunt and Node.js
  • 28. Building the Portal • Install node.js from http://nodejs.org/download • sudo npm install grunt-cli -g • cd portal; ./build.sh • Build is in dist/appsvc-ui.2.0.0.zip • Ready for deployment to HTTPD, Tomcat, etc. https://github.com/usergrid/usergrid/blob/master/portal/README.md
  • 29. Running the Portal • Sign up for an Apigee App Services account: • https://accounts.apigee.com/accounts/sign_in! • Run the Portal via grunt and node.js: • cd portal; grunt dev • Navigate to http://localhost:3000 • Login with Apigee App Services credentials
  • 30.
  • 31. Running against your own stack • Build and deploy stack (via Launcher or local Tomcat and Cassandra) • Run the Portal via grunt and node.js: • cd portal; grunt dev • Navigate to the Portal, login as superuser/superuser • http://localhost:3000?api_url=http://localhost:8080
  • 32.
  • 33. The SDKs • JavaScript / HTML5 • iOS • Android • Java • Ruby • Ruby On Rails • PHP
  • 34. Contributor Workflow • Discuss! • Discuss your changes on the dev mailing list • Create a JIRA issue for your changes • Do the work! • Fork the Github usergrid/usergrid repo • Make your changes and add tests • Push your changes! • Submit a clean PR against the appropriate branch of usergrid/usergrid • Update JIRA issue, announce PR on dev mailing list
  • 36.
  • 37.
  • 38.
  • 39.
  • 40. Git repos workflow usergrid / usergrid ! apache / incubator-usergrid Apache Git You work in ! your fork Official Release! on Apache Mirrors 1 2 3 4 5 6 You fork the repo You submit Pull Request Auto-merge to official repo Auto-merge to read-only mirror
  • 41. All that for a tiny change? • Can’t be bothered? • You have two options for small changes: 1. Submit Patch via JIRA • (agreeing to license your change under ASL) 2. Submit Pull Request via GitHub • (agreeing to license your change under ASL)
  • 42.
  • 43.
  • 44. Contributing Docs • Web site and documentation in SVN: http://svn.apache.org/viewvc/incubator/usergrid/site/!! • Content authored in Markdown • Build process requires Pandoc, Python & Ruby • Contributors must submit patches via JIRA • We need to fix this http://svn.apache.org/viewvc/incubator/usergrid/site/README.md?view=markup
  • 45. Roadmap • Get a first Apache release out • Graduate! • Usergrid “2.0” with new Persistence Engine • Other ideas… • https://issues.apache.org/jira/browse/USERGRID-8
  • 46. First release • Team working slowly towards first release • What’s needed? • License headers everywhere • Decide on release packaging • Installation & getting started documentation • A successful release vote
  • 47. WIP: two-dot-o branch • New Core Persistence Library • New guts for the EntityManager • Multi-Version Concurrency Control (MVCC) • Astyanix, RxJava, Hystrix and Guice • ElasticSearch Index & Query implementation