Java(ee) mongo db applications in the cloud
-
Upload
shekhar-gulati -
Category
Technology
-
view
1.569 -
download
1
Transcript of Java(ee) mongo db applications in the cloud
OPENSHIFT Workshop
PRESENTED BY
Shekhar Gulati
Java(EE) MongoDB Applications in the Cloud
WHO AM I?
• Shekhar Gula+ -‐-‐ OpenShi1 Developer Evangelist • Java / JavaScript / Python / NoSQL / Cloud Guy • TwiEer Handle : shekhargula* • Github : h,ps://github.com/shekhargula*
• Author of 30 technologies in 30 days blog series h,ps://www.openshi9.com/blogs/learning-‐30-‐technologies-‐in-‐30-‐days-‐a-‐developer-‐challenge
l Get started with OpenShi1
l Develop a loca+on aware applica+on - Java EE 6 – Middleware
l JAX-‐RS 1.1 – Java API for REST WS
l CDI – Context and Dependency Injec+on
- Eclipse Kepler – IDE
- MongoDB – Database
- OpenShi1 – Deployment choice
AGENDA
http://sharemylocation-shekhargulati.rhcloud.com/
CODE DU JOUR
https://github.com/shekhargulati/sharemylocation-demo
OpenShift
OPENSHIFT OVERVIEW
OpenShift is
PaaS by Red Hat
Multi-language, Auto-Scaling, Self-service,
Elastic, Cloud Application Platform
l Supports MongoDB , PostgreSQL ,and MySQL
l Mul+-‐language support. Supports Java, Node.js, Perl, Python, PHP and Ruby
l Extensible via DIY and cartridges
l No need to learn anything new
l Open source – OpenShi1 Origin
l Scalable
l FREE!
l Produc+on Ready
WHY OPENSHIFT?
8
OUR STACK
origin
Public Cloud Service
On-premise or Private Cloud Software
Open Source Project
FLAVORS OF OPENSHIFT
10
OPENSHIFT – GETTING STARTED
Go to https://openshift.redhat.com/app/account/new
Promo code is JUDCON-IN14 Verify Email
11
1. Eclipse for Java EE (Kepler)
2. Git 3. Modern browser
TOOLS REQUIRED TOOLS REQUIRED
12
1. Install OpenShift Eclipse plugin 2. Create new application with JBoss EAP and MongoDB
cartridges. 1. Sign up for OpenShift(if not already) 2. Create domain name or namespace 3. Upload SSH keys to OpenShift 4. Fill application creation wizard 5. Finish
3. Show OpenShift Explorer View and Server’s View 4. Make a change in index.html
1. Commit the change using Git Staging view 2. Publish the change
LAB 1 : HELLO OPENSHIFT
13
1. Right click on your project and then go to OpenShift > Configure Markers
2. Choose Hot Deploy marker 3. Commit to git repository 4. Go to servers view and publish your changes.
LAB 2 : HOT DEPLOYMENT
14
LAB 3 : SET UP JAX RS
15
1. HTTP used right 2. Defines set of RESTful constraints
1. Everything is a resource 1. Eg. Post , Tweet , User , etc.
2. Every resource has an identifier 1. Eg. http://api/twitter.com/tweets/1000011111
3. Resource can have multiple representations 1. JSON , XML , YAML , etc.
4. All resources expose a uniform interface 1. GET , POST , PUT , DELETE
LAB 3 : REST INTRODUCTION
16
1. Java API for REST Services 2. POJO based 3. Annotation heavy 4. HTTP Centric 5. Format independent 6. Container independent 7. Included with Java EE 6
LAB 3 JAX-RS INTRODUCTION
In this workshop we will be talking about JAX-RS 1.1
17
1. Update to Java 7 2. Delete web.xml 3. Update Maven war plugin to 2.3 4. Create JAX-RS configuration class. 5. Write PingResource
LAB 3 : SET UP JAX RS
18
git remote add upstream -m master https://github.com/
shekhargulati/sharemylocation-demo.git git fetch –all git reset --hard upstream/lab3
LAB 3 : ADDING GIT REMOTE
19
LAB 4 : CONFIGURE CDI AND MONGODB
20
1. CDI stands for Context and Dependency Injection 2. CDI simplifies and sanitizes the API for DI and AOP
like JPA did for ORM -- CDI Tutorial by Rick Hightower 3. Type safe approach to Dependency Injection 4. Strong typing and loose coupling 5. To configure CDI add beans.xml to
1. WEB-INF of WAR 2. META-INF of JAR
6. Beans can be injected at method , field , or constructor.
CDI
21
CDI EXAMPLE
MONGODB
23
l Open Source NoSQL document datastore – JSON style documents
l Schema-less – Each document is heterogeneous, and may have completely
unique structure compared to other documents
l Fast and horizontally scalable l Rich query language l Rich documents l Easy to get running l Geospatial indexing
WHAT IS MONGODB
Database → Database
Table → Collec+on
Row → Document
Index → Index
MONGODB TERMINOLOGY MONGODB TERMINOLOGY
25
// Find all the jobs with skill as mongodb
db.jobs.find({"skills":"mongodb"}) // Find all the jobs with python as skill and
near to given location
db.jobs.find({"lngLat":{$near : [139.69 , 35.68]}, "skills":"python"})
// Find all the python or mongodb jobs near to given location
db.jobs.find({"lngLat":{$near : [139.69 , 35.68]}, "skills":{$in : ["mongodb","python"]}})
SOME QUERIES
26
1. Create beans.xml in src/main/WEB-INF folder 2. Create ApplicationScoped bean for configuring
MongoDB 3. PingResource writes a document to dummy collection 4. Open Eclipse Remote System Explorer perspective
and connect to gear. Right click on project
1. Team > Reset > Remote Tracking > upstream/lab4
LAB 4 : ENABLE CDI AND MONGODB CONFIGURATION
27
1. Create Status domain class 2. Create converter for Status to DBObject and vice versa 3. Create StatusResource with create and find all
endpoints. 4. Create ApplicationDao with create and findAll methods. 5. Create Twitter Bootstrap and Backbonejs front end for
create and find all functionalities. Right click on project
- Team > Reset > Remote Tracking > upstream/lab5
LAB 5 : IMPLEMENT CREATE AND FIND ALL STATUS
28
1. Create findNear and findGeoNear methods in ApplicationDao
2. Create near and geonear search REST endpoints in StatusResource
3. Implement backbone views for search endpoints 4. Create Index
1. db.statuses.ensureIndex({“location”:”2dsphere”})
Right click on project
- Team > Reset > Remote Tracking > upstream/lab6
LAB 6 : IMPLEMENT NEAR AND GEONEAR FEATURES
QUESTIONS?
DONE!
31
STEP 1 : CHOOSE OPENSHIFT TOOLS
32
STEP 1 : SEARCH JBOSS TOOLS
33
l What is it for? l Find all the MongoDB jobs near me – Proximity Queries l Find all the MongoDB jobs within Bangalore – Bounded
Queries l Find all the MongoDB job at this location – Exact Queries
l Supports only two dimensional indexes. l You can only have one geospatial index per collection. l By default, 2d geospatial indexes assume longitude
and latitude have boundaries of -180 inclusive and 180 non-inclusive (i.e. [-180, 180))
GEOSPATIAL INDEXING BASICS
34
1) Put your coordinates into an array
{ loc : [ 50 , 30 ] } //SUGGESTED OPTION
{ loc : { x : 50 , y : 30 } }
{ loc : { foo : 50 , y : 30 } }
1) { loc : { lon : 40.739037, lat: 73.992964 } }
2) Make a 2d index
db.places.ensureIndex( { loc : "2d" } )
3) If you use latitude and longitude as your coordinate system, always store longitude first. MongoDB’s 2d spherical index operators only recognize [ longitude, latitude] ordering.
HOW TO MAKE IT WORK