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

What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...Technogeeks
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...stazi3110
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmSujith Sukumaran
 
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)jennyeacort
 
Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEEVICTOR MAESTRE RAMIREZ
 
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Matt Ray
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsAhmed Mohamed
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtimeandrehoraa
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)OPEN KNOWLEDGE GmbH
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureDinusha Kumarasiri
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaHanief Utama
 
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company OdishaBalasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odishasmiwainfosol
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackVICTOR MAESTRE RAMIREZ
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesPhilip Schwarz
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...soniya singh
 
Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Velvetech LLC
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideChristina Lin
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesŁukasz Chruściel
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityNeo4j
 

Recently uploaded (20)

What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalm
 
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
 
Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEE
 
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML Diagrams
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtime
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with Azure
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief Utama
 
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort ServiceHot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
 
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company OdishaBalasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStack
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a series
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
 
Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New Features
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered Sustainability
 

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