java(ee) mongo db applications in the cloud

34
OPENSHIFT Workshop PRESENTED BY Shekhar Gulati Java(EE) MongoDB Applications in the Cloud

Upload: shekhar-gulati

Post on 12-May-2015

1.577 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Java(ee) mongo db applications in the cloud

OPENSHIFT Workshop

PRESENTED BY

Shekhar Gulati

Java(EE) MongoDB Applications in the Cloud

Page 2: Java(ee) mongo db 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  

Page 3: Java(ee) mongo db applications in the cloud

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/

Page 4: Java(ee) mongo db applications in the cloud

CODE DU JOUR

https://github.com/shekhargulati/sharemylocation-demo

Page 5: Java(ee) mongo db applications in the cloud

OpenShift

OPENSHIFT  OVERVIEW  

Page 6: Java(ee) mongo db applications in the cloud

OpenShift is

PaaS by Red Hat

Multi-language, Auto-Scaling, Self-service,

Elastic, Cloud Application Platform

Page 7: Java(ee) mongo db applications in the cloud

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?

Page 8: Java(ee) mongo db applications in the cloud

8

OUR STACK

Page 9: Java(ee) mongo db applications in the cloud

origin

Public Cloud Service

On-premise or Private Cloud Software

Open Source Project

FLAVORS OF OPENSHIFT

Page 10: Java(ee) mongo db applications in the cloud

10

OPENSHIFT – GETTING STARTED

Go to https://openshift.redhat.com/app/account/new

Promo code is JUDCON-IN14 Verify Email

Page 11: Java(ee) mongo db applications in the cloud

11

1.  Eclipse for Java EE (Kepler)

2.  Git 3.  Modern browser

TOOLS REQUIRED TOOLS REQUIRED

Page 12: Java(ee) mongo db applications in the cloud

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

Page 13: Java(ee) mongo db applications in the cloud

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

Page 14: Java(ee) mongo db applications in the cloud

14

LAB 3 : SET UP JAX RS

Page 15: Java(ee) mongo db applications in the cloud

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

Page 16: Java(ee) mongo db applications in the cloud

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

Page 17: Java(ee) mongo db applications in the cloud

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

Page 18: Java(ee) mongo db applications in the cloud

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

Page 19: Java(ee) mongo db applications in the cloud

19

LAB 4 : CONFIGURE CDI AND MONGODB

Page 20: Java(ee) mongo db applications in the cloud

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

Page 21: Java(ee) mongo db applications in the cloud

21

CDI EXAMPLE

Page 22: Java(ee) mongo db applications in the cloud

MONGODB

Page 23: Java(ee) mongo db applications in the cloud

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

Page 24: Java(ee) mongo db applications in the cloud

 

Database      →    Database  

Table                    →          Collec+on  

Row                        →    Document  

Index                    →            Index  

MONGODB TERMINOLOGY MONGODB TERMINOLOGY

Page 25: Java(ee) mongo db applications in the cloud

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

Page 26: Java(ee) mongo db applications in the cloud

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

Page 27: Java(ee) mongo db applications in the cloud

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

Page 28: Java(ee) mongo db applications in the cloud

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

Page 29: Java(ee) mongo db applications in the cloud

QUESTIONS?

Page 30: Java(ee) mongo db applications in the cloud

DONE!

Page 31: Java(ee) mongo db applications in the cloud

31

STEP 1 : CHOOSE OPENSHIFT TOOLS

Page 32: Java(ee) mongo db applications in the cloud

32

STEP 1 : SEARCH JBOSS TOOLS

Page 33: Java(ee) mongo db applications in the cloud

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

Page 34: Java(ee) mongo db applications in the cloud

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