Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Bring Spatial Love to your Java Application

Bring Spatial Love to your Java Application

How to build a location aware Job search application on OpenShift

Shekhar Gulati

October 21, 2012
Tweet

More Decks by Shekhar Gulati

Other Decks in Programming

Transcript

  1. 1 Bring Spatial Love to your Java Application Shekhar Gulati

    @shekhargulati OpenShift Evangelist, Red Hat
  2. 3 User Stories  As a User, I should be

    able to find all the jobs.  As a User, I should be able to find all the jobs near to my location.  As a User, I should be able to find all MongoDB (or any skill) jobs near to my location.  As a User, I should be able to find all the MongoDB (or any other skill) jobs near to my location with distance.
  3. 4  Want to prototype quickly  Need quick feedback

     Don't want to manage infrastructure  Don't want to spend much money on infrastructure. Or, even better, you want it to be free.  Use your existing knowledge  Should be able to use the best tool for the job Assumptions: as a developer ...
  4. 5 Technology Choices  MongoDB  OpenShift  Java 6

     Spring 3.1.2.RELEASE  Spring 1.1.0.M1  GIT  SSH
  5. 6 Why MongoDB ?  Easy to get running 

    Open Source  Active community  Rich documents  Geospatial indexing.  Writes are very fast. You can customize it using WriteConcern.
  6. 8 Geospatial Indexing Basics  What is it for? 

    Find all the MongoDB jobs near me  Find all the MongoDB jobs within Pune  Supports only two dimensional indexes.  You can only have one geospatial index per collection.  The spatial functionality MongoDB currently has is:  Near  Containment http://www.mongodb.org/display/DOCS/Geospatial+ Indexing
  7. 9 How to make it work 1) Put your coordinates

    into an array { loc : [ 50 , 30 ] } //SUGGESTED OPTION { loc : { x : 50 , y : 30 } } { loc : { foo : 50 , y : 30 } } { loc : { lon : 40.739037, lat: 73.992964 } } 1) Make a 2d index db.places.ensureIndex( { loc : "2d" } )
  8. 10 Why OpenShift ?  Supports MongoDB. Also supports MySQL

    and PostgreSQL.  Multi-language support. Supports Java, Node.js, Perl, Python, PHP and Ruby.  No need to learn anything new.  Scalable.  FREE!
  9. 11

  10. 12 What else do I get and what is the

    catch? • OpenShift is free-as-in-beer & free-as-in-freedom • You get three free gears, each with 512MB memory and 1GB of disk space. • Need more resources, just ask! • The catch is we are in developer preview right now
  11. 15 Installing Client Tools Install Ruby 1.8.7 or greater Install

    Git Install rhc OpenShift gem Refer to documentation
  12. 18 Adding MongoDB and RockMongo Cartridge rhc app cartridge add

    -a localjobs -c mongodb-2.0 rhc app cartridge add -a localjobs -c rockmongo-1.1
  13. 19 Play with MongoDB running in the Cloud ssh into

    instance Type mongo on the shell Create a sample db Insert some documents in the collection Run some queries
  14. 20 Let's take a look at GIT Distributed version control

    A local repository – on your laptop A remote repository – on some other machine, usually a server
  15. 21 You need to understand at least 3 commands in

    Git 1. Git add . (means add all news files as being tracked in the local repository) 2. Git commit –am “your message” (means commit all my changes to the local repository with this message) 3. Git push (means push from your local repository to the repository on your OpenShift gear)
  16. 22 Pulling the code from GitHub git rm -rf src

    pom.xml git commit -am “removed default files” git remote add localjobs -m master git://github.com/shekhargulati/localjobs.git git pull -s recursive -X theirs localjobs master
  17. 23 Importing Data into MongoDB rhc app show -a localjobs

    -l <openshift_login_email> scp -r jobs-data.json <instance_ssh_access>:localjobs/data ssh <instance_ssh_access> mongoimport -d localjobs -c jobs --file jobs-data.json -u $OPENSHIFT_NOSQL_DB_USERNAME -p $OPENSHIFT_NOSQL_DB_PASSWORD -h $OPENSHIFT_NOSQL_DB_HOST -port $OPENSHIFT_NOSQL_DB_PORT db.jobs.ensureIndex({"location":"2d"})
  18. 27 1. MongoDB makes it very easy to build location

    aware applications. 2. OpenShift is very easy to use and embraces rapid development. 3. Did I mention – Free? 4. What are you waiting for? Try it out. Conclusion