Play Framework vs Grails Smackdown - JavaOne 2013

Matt Raible
Matt RaibleWeb Developer, Java Champion, and Developer Advocate at Okta
Play vs. Grails
Smackdown
James Ward and Matt Raible
and
Changelog
September 24, 2013: Updated for .
March 24, 2013: Updated and for .
June 24, 2012: .
June 19, 2012: Published for .
@_JamesWard @mraible
statistics JavaOne
statistics load tests Devoxx France
Play Performance Fix
ÜberConf
Why a Smackdown?
Play 2 and Grails 2 are often hyped as the most productive JVM
Web Frameworks.
* We wanted to know how they enhanced the Developer Experience (DX).
Happy Trails Requirements
Server-side Templates
Play 2 with Java
Form Validation
Data Pagination
Authentication
Scheduled Jobs
Atom / RSS
Email Notifications
Unit / Integration Tests
Load Tests
Performance Tests
Stretch Goals: Search, Photo Upload to S3
Our Schedule
Week 1 - Data Model Definition
Week 2 - Data Layer & URL Design
Week 3 - Controllers & Auth
Week 4 - Views
Week 5 - Misc Polish
Intro to Play 2
“Play Framework is based on a lightweight,
stateless, web-friendly architecture. Built on Akka,
Play provides predictable and minimal resource
consumption (CPU, memory, threads) for highly-
scalable applications.”
My Top 10 Favorite Features
1. Just hit refresh workflow
2. Type safety
3. RESTful
4. Stateless
5. Reactive
6. Asset Compiler
7. First-class JSON
8. Java & Scala
9. Templates in Activator
10. LinkedIn, Gawker, etc
Intro to Grails 2
“ Powered by Spring, Grails outperforms the
competition. Dynamic, agile web development
without compromises. ”
My Top 10 Favorite Features
1. Documentation
2. Clean URLs
3. GORM
4. IntelliJ IDEA Support
5. Zero Turnaround
6. Excellent Testing Support
7. Groovy
8. GSPs
9. Resource Optimizer
10. Instant Deployment on Heroku
Our Setup
IntelliJ IDEA for Development
GitHub for Source Control
CloudBees for Continuous Integration
Heroku for Production
Later added: QA Person and BrowserMob
Code Walk Through
We developed the same app, in similar ways, so let's look at the
different layers.
↓
Database
URL Mapping
Models
Controllers
Views
Validation
IDE Support
Job
Feed
Email
Photo Upload
Testing
Demo Data
Configuration
Authentication
Database - Grails
Hibernate is the default persistence provider
Create models, Hibernate creates the schema for you
grails-app/conf/DataSource.groovy
environments{
development{
dataSource{
dbCreate="create-drop"//oneof'create','create-drop','update','val
idate',''
url="jdbc:postgresql://localhost:5432/happytrails"
}
}
Database - Play
EBean is the default persistence provider in Java projects
Evolutions can be auto-applied
Initial evolution sql is auto-created
Subsequent changes must be versioned
Auto-created schema file is database dependent
Play 2 supports multiple datasources (Play 1 does not)
conf/evolutions/default/2.sql
#---!Ups
ALTERTABLEaccountADDis_adminboolean;
UPDATEaccountSETis_admin=FALSE;
#---!Downs
ALTERTABLEaccountDROPis_admin;
Database - Play
Using Heroku Postgres in production rocks!
Postgres 9.1
Dataclips
Fork & Follow
Multi-Ingres
URL Mapping - Grails
grails-app/conf/UrlMappings.groovy
classUrlMappings{
staticmappings={
"/$controller/$action?/$id?"{
constraints{
//applyconstraintshere
}
}
"/"(controller:"home",action:"index")
"/login"(controller:"login",action:"auth")
"/login/authfail"(controller:"login",action:"authfail")
"/login/denied"(controller:"login",action:"denied")
"/logout"(controller:"logout")
"/signup"(controller:"register")
"/feed/$region"(controller:"region",action:"feed")
"/register/register"(controller:"register",action:"register")
"/register/resetPassword"(controller:"register",action:"resetPassword")
"/register/verifyRegistration"(controller:"register",action:"verifyRegistra
tion")
"/forgotPassword"(controller:"register",action:"forgotPassword")
"/region/create"(controller:"region",action:"create")
"/regions"(controller:"region",action:"list")
"/region/save"(controller:"region",action:"save")
"/region/subscribe"(controller:"region",action:"subscribe")
URL Mapping - Play
conf/routes
GET / controllers.ApplicationController.index()
GET /signup controllers.ApplicationController.signupForm()
POST /signup controllers.ApplicationController.signup()
GET /login controllers.ApplicationController.loginForm()
POST /login controllers.ApplicationController.login()
GET /logout controllers.ApplicationController.logout()
GET /addregion controllers.RegionController.addRegion()
POST /addregion controllers.RegionController.saveRegion()
GET /:region/feed controllers.RegionController.getRegionFeed(region)
GET /:region/subscribe controllers.RegionController.subscribe(region)
GET /:region/unsubscribe controllers.RegionController.unsubscribe(region)
GET /:region/addroute controllers.RegionController.addRoute(region)
POST /:region/addroute controllers.RegionController.saveRoute(region)
GET /:region/delete controllers.RegionController.deleteRegion(region)
GET /:region/:route/rate controllers.RouteController.saveRating(region, route, rating: java.lang.Integer)
POST /:region/:route/comment controllers.RouteController.saveComment(region, route)
GET /:region/:route/delete controllers.RouteController.deleteRoute(region, route)
GET /:region/:route controllers.RouteController.getRouteHtml(region, route)
GET /:region controllers.RegionController.getRegionHtml(region, sort ?= "name")
Models - Grails
All properties are persisted by default
Constraints
Mappings with hasMany and belongsTo
Override methods for lifecycle events
grails-app/domain/happytrails/Region.groovy
packagehappytrails
classRegion{
staticcharactersNumbersAndSpaces=/[a-zA-Z0-9]+/
staticsearchable=true
staticconstraints={
nameblank:false,unique:true,matches:charactersNumbersAndSpaces
seoNamenullable:true
routescascade:"all-delete-orphan"
}
statichasMany=[routes:Route]
Stringname
StringseoName
defbeforeValidate(){
Models - Play
EBean + JPA Annotations
Declarative Validations (JSR 303)
Query DSL
Lazy Loading (except in Scala Templates)
app/models/Direction.java
@Entity
publicclassDirectionextendsModel{
@Id
publicLongid;
@Column(nullable=false)
@Constraints.Required
publicIntegerstepNumber;
@Column(length=1024,nullable=false)
@Constraints.MaxLength(1024)
@Constraints.Required
publicStringinstruction;
@ManyToOne
publicRouteroute;
Controllers - Grails
grails-app/controllers/happytrails/HomeController.groovy
packagehappytrails
importorg.grails.comments.Comment
classHomeController{
defindex(){
params.max=Math.min(params.max?params.int('max'):10,100)
[regions:Region.list(params),total:Region.count(),
comments:Comment.list(max:10,sort:'dateCreated',order:'desc')]
}
}
Controllers - Play
Stateless - Composable - Interceptable
Clean connection between URLs and response code
app/controllers/RouteController.java
@With(CurrentUser.class)
public class RouteController extends Controller {
@Security.Authenticated(Secured.class)
public static Result saveRating(String urlFriendlyRegionName, String urlFriendlyRouteName, Integer rating) {
User user = CurrentUser.get();
Route route = getRoute(urlFriendlyRegionName, urlFriendlyRouteName);
if ((route == null) || (user == null)) {
return badRequest("User or Route not found");
}
if (rating != null) {
Rating existingRating = Rating.findByUserAndRoute(user, route);
if (existingRating != null) {
existingRating.value = rating;
existingRating.save();
}
else {
Rating newRating = new Rating(user, route, rating);
newRating.save();
}
}
return redirect(routes.RouteController.getRouteHtml(urlFriendlyRegionName, urlFriendlyRouteName));
}
Views - Grails
Groovy Server Pages, like JSPs
GSP Tags
Layouts and Templates
Optimized Resources
grails-app/views/region/show.gsp
<%@pageimport="happytrails.Region"%>
<!doctypehtml>
<html>
<head>
<metaname="layout"content="main">
<g:setvar="entityName"value="${message(code:'region.label',default:'Region')}
"/>
<title><g:messagecode="default.show.label"args="[entityName]"/></title>
<linkrel="alternate"type="application/atom+xml"title="${regionInstance.name}Up
dates"
href="${createLink(controller:'region',action:'feed',params:[region:re
gionInstance.seoName])}"/>
</head>
<body>
<g:setvar="breadcrumb"scope="request">
<ulclass="breadcrumb">
<li><aclass="home"href="${createLink(uri:'/')}"><g:messagecode="default.ho
Views - Play
Scala Templates
Composable
Compiled
app/views/region.scala.html
@(region:Region,sort:String)
@headContent={
<linkrel="alternate"type="application/rss+xml"title="@region.getNameRSSFeed"
href="@routes.RegionController.getRegionFeed(region.getUrlFriendlyName)"/>
}
@breadcrumbs={
<divclass="nav-collapse">
<ulclass="nav">
<li><ahref="@routes.ApplicationController.index()">Hike</a></li>
<liclass="active"><ahref="@routes.RegionController.getRegionHtml(region.
getUrlFriendlyName)">@region.getName</a></li>
</ul>
</div>
}
@main("UberTracks-Hike-"+region.getName,headContent,breadcrumbs){
<divclass="btn-group">
Validation - Grails
grails-app/controllers/happytrails/RouteController.groovy
def save() {
def routeInstance = new Route(params)
if (!routeInstance.save(flush: true)) {
render(view: "create", model: [routeInstance: routeInstance])
return
}
flash.message = message(code: 'default.created.message', args: [message(code: '
route.label', default: 'Route'), routeInstance.name])
redirect(action: "show", id: routeInstance.id)
}
grails-app/views/route/create.gsp
<g:hasErrors bean="${routeInstance}">
<div class="alert alert-error" role="alert">
<g:eachError bean="${routeInstance}" var="error">
<div <g:if test="${error in org.springframework.validation.FieldError}"
>data-field-id="${error.field}"</g:if>><g:message error="${error}"/></div>
</g:eachError>
</div>
</g:hasErrors>
Validation - Play
app/controllers/RouteController.java
publicstaticResultsignup(){
Form<User>signupForm=form(User.class).bindFromRequest();
if(signupForm.hasErrors()){
returnbadRequest(views.html.signupForm.render(signupForm));
}
app/views/signupForm.scala.html
@if(signupForm.hasGlobalErrors){
<pclass="erroralertalert-error">@signupForm.globalError.message</p>
}
@helper.form(action=routes.ApplicationController.signup(),'class->"form-horizonta
l"){
@helper.inputText(signupForm("fullName"),'_label->"FullName")
@helper.inputText(signupForm("emailAddress"),'_label->"EmailAddress")
@helper.inputPassword(signupForm("password"),'_label->"Password")
<divclass="controls">
<inputtype="submit"class="btnbtn-primary"value="CreateAccount"/>
</div>
}
IDE Support - Grails
IntelliJ Rocks!
IDE Support - Play
$ play idea
$ play eclipsify
Java!!!
Debugging Support via Remote Debugger
Limited Testing within IDE
Job - Grails
grails-app/jobs/happytrails/DailyRegionDigestEmailJob.groovy
packagehappytrails
importorg.grails.comments.Comment
classDailyRegionDigestEmailJob{
defmailService
statictriggers={
//simplerepeatInterval:5000l//executejoboncein5seconds
cronname:'cronTrigger',startDelay:10000,cronExpression:'007?*MON-FRI'
//7AMMon-Fri
}
defexecute(){
List<RegionUserDigest>digests=getRegionUserDigests()
for(digestindigests){
Stringmessage=createMessage(digest)
println"Sendingdigestemailto"+digest.user.username
Job - Play
Plain old `static void main`
Independent of web app
app/jobs/DailyRegionDigestEmailJob.java
publicclassDailyRegionDigestEmailJob{
publicstaticvoidmain(String[]args){
Applicationapplication=newApplication(newFile(args[0]),DailyRegionDigest
EmailJob.class.getClassLoader(),null,Mode.Prod());
Play.start(application);
List<RegionUserDigest>regionUserDigests=getRegionUserDigests();
Feed - Grails
1. grails install-plugin feeds
2. Add feed() method to controller
grails-app/controllers/happytrails/RegionController.groovy
deffeed={
defregion=Region.findBySeoName(params.region)
if(!region){
response.status=404
return
}
render(feedType:"atom"){
title="HappyTrailsFeedfor"+region.name
link=createLink(absolute: true,controller:'region',action:'feed',p
arams:['region',region.seoName])
description="NewRoutesandReviewsfor"+region.name
region.routes.each(){route->
entry(route.name){
link=createLink(absolute:true,controller:'route',action:'sh
ow',id:route.id)
route.description
}
}
}
Feed - Play
No direct RSS/Atom support
Dependency: "rome" % "rome" % "1.0"
app/jobs/DailyRegionDigestEmailJob.java
Regionregion=Region.findByUrlFriendlyName(urlFriendlyRegionName);
SyndFeedfeed=newSyndFeedImpl();
feed.setFeedType("rss_2.0");
feed.setTitle("UberTracks-"+region.getName());
feed.setLink("http://hike.ubertracks.com");//todo:externalizeURL
feed.setDescription("UpdatesforHikeUberTracks-"+region.getName());
Listentries=newArrayList();
for(Routeroute:region.routes){
SyndEntryentry=newSyndEntryImpl();
entry.setTitle("Route-"+route.getName());
Email - Grails
* powered by the (built-in)
grails-app/jobs/happytrails/DailyRegionDigestEmailJob.groovy
println"Sendingdigestemailto"+digest.user.username
mailService.sendMail{
todigest.getUser().username
subject"UpdatesfromÃ​berTracks"+digest.regions
bodymessage
}
mail plugin
Email - Play
SendGrid Heroku Add-on
Dependency:
"com.typesafe" %% "play-plugins-mailer" % "2.0.2"
app/jobs/DailyRegionDigestEmailJob.java
MailerAPImail=play.Play.application().plugin(MailerPlugin.class).email();
mail.setSubject("UberTracksRegionUpdates");
mail.addRecipient(regionUserDigest.user.getEmailAddress());
mail.addFrom("noreply@ubertracks.com");
mail.send(emailContent);
conf/prod.conf
smtp.host=smtp.sendgrid.net
smtp.port=587
smtp.ssl=true
smtp.user=${SENDGRID_USERNAME}
smtp.password=${SENDGRID_PASSWORD}
Photo Upload - Grails
Photo Upload - Play
Amazon S3 for Persistent File Storage
app/models/S3Photo.java
PutObjectRequestputObjectRequest=newPutObjectRequest(bucket,key,inputStream,objectM
etadata);
putObjectRequest.withCannedAcl(CannedAccessControlList.PublicRead);
if(S3Blob.amazonS3==null){
Logger.error("CloudnotsavePhotobecauseamazonS3wasnull");
}
else{
S3Blob.amazonS3.putObject(putObjectRequest);
}
app/controllers/RegionController.java
Http.MultipartFormData.FilePartphotoFilePart=request().body()
.asMultipartFormData().getFile("photo");
Testing - Grails
Unit Tests with @TestFor and @Mock
Test URL Mappings with UrlMappingsUnitTestMixin
Integration Testing with GroovyTestCase
Functional Testing with Geb
* Grails plugins often aren't in test scope.
test/unit/happytrails/RouteTests.groovy
packagehappytrails
importgrails.test.mixin.*
@TestFor(Route)
classRouteTests{
voidtestConstraints(){
defregion=newRegion(name:"Colorado")
defwhiteRanch=newRoute(name:"WhiteRanch",distance:12.0,location:"Gol
den,CO",region:region)
mockForConstraintsTests(Route,[whiteRanch])
//validationshouldfailifrequiredpropertiesarenull
defroute=newRoute()
assert!route.validate()
assert"nullable"==route.errors["name"]
Testing - Play
Standard JUnit
Unit Tests & Functional Tests
FakeApplication, FakeRequest, inMemoryDatabase
Test: Controllers, Views, Routing, Real Server, Browser
test/ApplicationControllerTest.java
@Test
publicvoidindex(){
running(fakeApplication(inMemoryDatabase()),newRunnable(){
publicvoidrun(){
DemoData.loadDemoData();
Resultresult=callAction(routes.ref.ApplicationController.index());
assertThat(status(result)).isEqualTo(OK);
assertThat(contentAsString(result)).contains(DemoData.CRESTED_BUTTE_COLORADO_R
EGION);
assertThat(contentAsString(result)).contains("<li>");
}
});
}
Demo Data - Grails
grails-app/conf/BootStrap.groovy
import happytrails.User
import happytrails.Region
import happytrails.Route
import happytrails.RegionSubscription
class BootStrap {
def init = { servletContext ->
if (!User.count()) {
User user = new User(username: "mraible@gmail.com", password: "happyhour",
name: "Matt Raible", enabled: true).save(failOnError: true)
User commentor = new User(username: "mraible+comments@gmail.com", password: "happyhour",
name: "Fitz Raible", enabled: true).save(failOnError: true)
Region frontRange = new Region(name: "Colorado Front Range").save(failOnError: true)
// Add routes
def whiteRanch = new Route(name: "White Ranch", distance: 10, location: "Golden, CO",
description: "Long uphill climb", region: frontRange).save(failOnError: true)
// Add comments
whiteRanch.addComment(commentor, "Coming down is the best!")
// Add a few ratings
whiteRanch.rate(user, 3)
Demo Data - Play
app/Global.java
publicvoidonStart(Applicationapplication){
//Ebean.getServer(null).getAdminLogging().setDebugGeneratedSql(true);
S3Blob.initialize(application);
//loadthedemodataindevmodeifnootherdataexists
if(Play.isDev()&&(User.find.all().size()==0)){
DemoData.loadDemoData();
}
super.onStart(application);
}
Configuration - Grails
grails-app/conf/Config.groovy
grails.app.context="/"
grails.project.groupId=appName//changethistoalterthedefaultpackagenameand
Mavenpublishingdestination
grails.mime.file.extensions=true//enablestheparsingoffileextensionsfromURLs
intotherequestformat
grails.mime.use.accept.header=false
grails.mime.types=[html:['text/html','application/xhtml+xml'],
xml:['text/xml','application/xml'],
text:'text/plain',
js:'text/javascript',
rss:'application/rss+xml',
atom:'application/atom+xml',
css:'text/css',
csv:'text/csv',
all:'*/*',
json:['application/json','text/json'],
form:'application/x-www-form-urlencoded',
multipartForm:'multipart/form-data'
]
Configuration - Play
Based on the TypeSafe Config Library
Override config with Java Properties:
-Dfoo=bar
Environment Variable substitution
Run with different config files:
-Dconfig.file=conf/prod.conf
conf/prod.conf
include"application.conf"
application.secret=${APPLICATION_SECRET}
db.default.driver=org.postgresql.Driver
db.default.url=${DATABASE_URL}
applyEvolutions.default=true
Authentication - Grails
Spring Security UI Plugin, “I love you!”
grails-app/conf/Config.groovy
grails.mail.default.from="BikeÃ​berTracks<bike@ubertracks.com>"
grails.plugins.springsecurity.ui.register.emailFrom=grails.mail.default.from
grails.plugins.springsecurity.ui.register.emailSubject='WelcometoÃ​berTracks!'
grails.plugins.springsecurity.ui.forgotPassword.emailFrom=grails.mail.default.from
grails.plugins.springsecurity.ui.forgotPassword.emailSubject='PasswordReset'
grails.plugins.springsecurity.controllerAnnotations.staticRules=[
'/user/**':['ROLE_ADMIN'],
'/role/**':['ROLE_ADMIN'],
'/registrationCode/**':['ROLE_ADMIN'],
'/securityInfo/**':['ROLE_ADMIN']
]
//AddedbytheSpringSecurityCoreplugin:
grails.plugins.springsecurity.userLookup.userDomainClassName='happytrails.User'
grails.plugins.springsecurity.userLookup.authorityJoinClassName='happytrails.UserRol
e'
grails.plugins.springsecurity.authority.className='happytrails.Role'
Authentication - Play
Uses cookies to remain stateless
app/controllers/Secured.java
publicclassSecuredextendsSecurity.Authenticator{
@Override
publicStringgetUsername(Contextctx){
//todo:needtomakesuretheuserisvalid,notjustthetoken
returnctx.session().get("token");
}
app/controllers/RegionController.java
@Security.Authenticated(Secured.class)
publicstaticResultaddRegion(){
returnok(views.html.regionForm.render(form(Region.class)));
}
Application Comparison
YSlow
PageSpeed
Lines of Code
Load Testing
Which Loads Faster?
Security Testing
YSlow
Play Framework vs Grails Smackdown - JavaOne 2013
PageSpeed
Play Framework vs Grails Smackdown - JavaOne 2013
Lines of Code
Play Framework vs Grails Smackdown - JavaOne 2013
Load Testing with
BrowserMob
Bike (Grails) Hike (Play)
Load Testing - 1 Dyno
Load Testing - 1 Dyno
Play Framework vs Grails Smackdown - JavaOne 2013
Bike (Grails) Hike (Play)
Load Testing - 5 Dynos
Load Testing - 5 Dynos
Play Framework vs Grails Smackdown - JavaOne 2013
Load Testing - 2 Dynos (March
2013)
Grails
Play Framework
0 700 1,400 2,100 2,800
Requests / Second
Load Testing - 2 Dynos (Sept
2013)
Grails
Play Framework
0 70 140 210 280
Requests / Second
Load Testing - 5 Dynos + 100
users
Which Loads Faster?
Which Actually Loads Faster?
Pen Testing with OWASP ZAP
Play Framework vs Grails Smackdown - JavaOne 2013
Grails 2 vs. Play 2
Jobs
LinkedIn Skills
Google Trends
Indeed
Mailing List Traffic
Books on Amazon
2012 Releases
Stack Overflow
Hacker News
Jobs
September 22, 2013
Grails
Play Framework
Spring MVC
0 400 800 1,200 1,600
Dice
Monster
Indeed
LinkedIn Skills
September 22, 2013
# People
4,000 8,000 12,000 16,000 20,000
Grails
Play Framework
Spring MVC
Google Trends
Grails Play
Indeed Job Trends
User Mailing List Traffic
Grails
Play Framework
700 900 1,100 1,300 1,500
March
April
May
June
July
August
Books on Amazon
September 2013
Grails
Play Framework
3
11
2013 Releases
Grails
Play Framework
8
10
2012 Releases
Grails
Play Framework
6
9
StackOverflow Questions
grails
playframework
5149
12978
Hacker News
Grails 2.0 released
Play Framework 2.0 Final released
6
195
Conclusions: Code
From a code perspective, very similar frameworks.
Code authoring good in both.
Grails Plugin Ecosystem is excellent.
TDD-Style Development easy with both.
Type-safety in Play 2 was really useful, especially
routes and upgrades.
Conclusions: Statistical
Analysis
Grails has better support for FEO (YSlow, PageSpeed)
Grails has less LOC! (4 more files, but 20% less code)
Apache Bench with 10K requests (2 Dynos):
Requests per second: {Play: 242, Grails:
257}
Caching significantly helps!
Conclusions: Ecosystem
Analysis
"Play" is difficult to search for.
Grails is more mature.
Play has momentum issues.
LinkedIn: more people know Grails than Spring MVC.
Play had 3x user mailing list traffic, but gap is
narrowing.
We had similar experiences with documentation and
questions.
Outdated documentation is a problem for both.
Play has way more hype!
Questions?
Source:
Branches: grails2, play2_java
Presentation*: master/preso
Contact Us:
* Presentation created with , and .
http://ubertracks.com
https://github.com/jamesward/happytrails
jamesward.com
raibledesigns.com
Reveal.js Google Charts GitHub Files
Action!
Learn something new*!
* Or prove that we're wrong...
1 of 80

Recommended

Play vs Grails Smackdown - Devoxx France 2013 by
Play vs Grails Smackdown - Devoxx France 2013Play vs Grails Smackdown - Devoxx France 2013
Play vs Grails Smackdown - Devoxx France 2013Matt Raible
6.2K views80 slides
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Rich Web Experie... by
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Rich Web Experie...Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Rich Web Experie...
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Rich Web Experie...Matt Raible
3.4K views41 slides
Java Web Application Security with Java EE, Spring Security and Apache Shiro ... by
Java Web Application Security with Java EE, Spring Security and Apache Shiro ...Java Web Application Security with Java EE, Spring Security and Apache Shiro ...
Java Web Application Security with Java EE, Spring Security and Apache Shiro ...Matt Raible
3.1K views57 slides
Playframework + Twitter Bootstrap by
Playframework + Twitter BootstrapPlayframework + Twitter Bootstrap
Playframework + Twitter BootstrapKevingo Tsai
3.8K views48 slides
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Devoxx France 2016 by
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Devoxx France 2016Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Devoxx France 2016
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Devoxx France 2016Matt Raible
5.5K views39 slides
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Angular Summit 2015 by
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Angular Summit 2015Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Angular Summit 2015
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Angular Summit 2015Matt Raible
38.7K views40 slides

More Related Content

What's hot

Get Hip with JHipster - Colorado Springs OSS Meetup April 2016 by
Get Hip with JHipster - Colorado Springs OSS Meetup April 2016Get Hip with JHipster - Colorado Springs OSS Meetup April 2016
Get Hip with JHipster - Colorado Springs OSS Meetup April 2016Matt Raible
2K views51 slides
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Devoxx 2015 by
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Devoxx 2015Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Devoxx 2015
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Devoxx 2015Matt Raible
6.7K views39 slides
Getting Started with Angular - Stormpath Webinar, January 2017 by
Getting Started with Angular - Stormpath Webinar, January 2017Getting Started with Angular - Stormpath Webinar, January 2017
Getting Started with Angular - Stormpath Webinar, January 2017Matt Raible
718 views42 slides
The Modern Java Web Developer Bootcamp - Devoxx 2013 by
The Modern Java Web Developer Bootcamp - Devoxx 2013The Modern Java Web Developer Bootcamp - Devoxx 2013
The Modern Java Web Developer Bootcamp - Devoxx 2013Matt Raible
28.3K views127 slides
Comparing Hot JavaScript Frameworks: AngularJS, Ember.js and React.js - Sprin... by
Comparing Hot JavaScript Frameworks: AngularJS, Ember.js and React.js - Sprin...Comparing Hot JavaScript Frameworks: AngularJS, Ember.js and React.js - Sprin...
Comparing Hot JavaScript Frameworks: AngularJS, Ember.js and React.js - Sprin...Matt Raible
68.4K views170 slides
What's New in Spring 3.1 by
What's New in Spring 3.1What's New in Spring 3.1
What's New in Spring 3.1Matt Raible
7.4K views71 slides

What's hot(20)

Get Hip with JHipster - Colorado Springs OSS Meetup April 2016 by Matt Raible
Get Hip with JHipster - Colorado Springs OSS Meetup April 2016Get Hip with JHipster - Colorado Springs OSS Meetup April 2016
Get Hip with JHipster - Colorado Springs OSS Meetup April 2016
Matt Raible2K views
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Devoxx 2015 by Matt Raible
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Devoxx 2015Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Devoxx 2015
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Devoxx 2015
Matt Raible6.7K views
Getting Started with Angular - Stormpath Webinar, January 2017 by Matt Raible
Getting Started with Angular - Stormpath Webinar, January 2017Getting Started with Angular - Stormpath Webinar, January 2017
Getting Started with Angular - Stormpath Webinar, January 2017
Matt Raible718 views
The Modern Java Web Developer Bootcamp - Devoxx 2013 by Matt Raible
The Modern Java Web Developer Bootcamp - Devoxx 2013The Modern Java Web Developer Bootcamp - Devoxx 2013
The Modern Java Web Developer Bootcamp - Devoxx 2013
Matt Raible28.3K views
Comparing Hot JavaScript Frameworks: AngularJS, Ember.js and React.js - Sprin... by Matt Raible
Comparing Hot JavaScript Frameworks: AngularJS, Ember.js and React.js - Sprin...Comparing Hot JavaScript Frameworks: AngularJS, Ember.js and React.js - Sprin...
Comparing Hot JavaScript Frameworks: AngularJS, Ember.js and React.js - Sprin...
Matt Raible68.4K views
What's New in Spring 3.1 by Matt Raible
What's New in Spring 3.1What's New in Spring 3.1
What's New in Spring 3.1
Matt Raible7.4K views
Testing Angular 2 Applications - HTML5 Denver 2016 by Matt Raible
Testing Angular 2 Applications - HTML5 Denver 2016Testing Angular 2 Applications - HTML5 Denver 2016
Testing Angular 2 Applications - HTML5 Denver 2016
Matt Raible1.3K views
Java Web Application Security - Utah JUG 2011 by Matt Raible
Java Web Application Security - Utah JUG 2011Java Web Application Security - Utah JUG 2011
Java Web Application Security - Utah JUG 2011
Matt Raible79.5K views
The Art of Angular in 2016 - Devoxx France 2016 by Matt Raible
The Art of Angular in 2016 - Devoxx France 2016The Art of Angular in 2016 - Devoxx France 2016
The Art of Angular in 2016 - Devoxx France 2016
Matt Raible5.9K views
Clojure Web Development by Hong Jiang
Clojure Web DevelopmentClojure Web Development
Clojure Web Development
Hong Jiang1.3K views
The Art of Angular in 2016 - vJUG24 by Matt Raible
The Art of Angular in 2016 - vJUG24The Art of Angular in 2016 - vJUG24
The Art of Angular in 2016 - vJUG24
Matt Raible1.2K views
Choosing a Java Web Framework by Will Iverson
Choosing a Java Web FrameworkChoosing a Java Web Framework
Choosing a Java Web Framework
Will Iverson1.4K views
The Modern Java Web Developer - JavaOne 2013 by Matt Raible
The Modern Java Web Developer - JavaOne 2013The Modern Java Web Developer - JavaOne 2013
The Modern Java Web Developer - JavaOne 2013
Matt Raible39K views
A Gentle Introduction to Angular Schematics - Angular SF 2019 by Matt Raible
A Gentle Introduction to Angular Schematics - Angular SF 2019A Gentle Introduction to Angular Schematics - Angular SF 2019
A Gentle Introduction to Angular Schematics - Angular SF 2019
Matt Raible458 views
The Art of AngularJS in 2015 - Angular Summit 2015 by Matt Raible
The Art of AngularJS in 2015 - Angular Summit 2015The Art of AngularJS in 2015 - Angular Summit 2015
The Art of AngularJS in 2015 - Angular Summit 2015
Matt Raible37.3K views
A Gentle Introduction to Angular Schematics - Devoxx Belgium 2019 by Matt Raible
A Gentle Introduction to Angular Schematics - Devoxx Belgium 2019A Gentle Introduction to Angular Schematics - Devoxx Belgium 2019
A Gentle Introduction to Angular Schematics - Devoxx Belgium 2019
Matt Raible183 views
Play Framework on Google App Engine - Productivity Stack by Marcin Stepien
Play Framework on Google App Engine - Productivity StackPlay Framework on Google App Engine - Productivity Stack
Play Framework on Google App Engine - Productivity Stack
Marcin Stepien3.9K views
Microservices for the Masses with Spring Boot, JHipster, and JWT - Rich Web 2016 by Matt Raible
Microservices for the Masses with Spring Boot, JHipster, and JWT - Rich Web 2016Microservices for the Masses with Spring Boot, JHipster, and JWT - Rich Web 2016
Microservices for the Masses with Spring Boot, JHipster, and JWT - Rich Web 2016
Matt Raible4.2K views
Testing Mobile JavaScript by jeresig
Testing Mobile JavaScriptTesting Mobile JavaScript
Testing Mobile JavaScript
jeresig215.2K views
Web Frameworks of the Future: Flex, GWT, Grails and Rails by Matt Raible
Web Frameworks of the Future: Flex, GWT, Grails and RailsWeb Frameworks of the Future: Flex, GWT, Grails and Rails
Web Frameworks of the Future: Flex, GWT, Grails and Rails
Matt Raible6.8K views

Similar to Play Framework vs Grails Smackdown - JavaOne 2013

Running your Java EE 6 Apps in the Cloud - JavaOne India 2011 by
Running your Java EE 6 Apps in the Cloud - JavaOne India 2011Running your Java EE 6 Apps in the Cloud - JavaOne India 2011
Running your Java EE 6 Apps in the Cloud - JavaOne India 2011Arun Gupta
299 views51 slides
JavaOne India 2011 - Running your Java EE 6 Apps in the Cloud by
JavaOne India 2011 - Running your Java EE 6 Apps in the CloudJavaOne India 2011 - Running your Java EE 6 Apps in the Cloud
JavaOne India 2011 - Running your Java EE 6 Apps in the CloudArun Gupta
400 views51 slides
Web Performance Part 4 "Client-side performance" by
Web Performance Part 4  "Client-side performance"Web Performance Part 4  "Client-side performance"
Web Performance Part 4 "Client-side performance"Binary Studio
2.3K views70 slides
Running your Java EE 6 applications in the Cloud (FISL 12) by
Running your Java EE 6 applications in the Cloud (FISL 12)Running your Java EE 6 applications in the Cloud (FISL 12)
Running your Java EE 6 applications in the Cloud (FISL 12)Arun Gupta
1.8K views52 slides
Running your Java EE 6 Applications in the Cloud by
Running your Java EE 6 Applications in the CloudRunning your Java EE 6 Applications in the Cloud
Running your Java EE 6 Applications in the CloudArun Gupta
9 views49 slides
Running your Java EE 6 applications in the Cloud by
Running your Java EE 6 applications in the CloudRunning your Java EE 6 applications in the Cloud
Running your Java EE 6 applications in the CloudArun Gupta
1.1K views52 slides

Similar to Play Framework vs Grails Smackdown - JavaOne 2013(20)

Running your Java EE 6 Apps in the Cloud - JavaOne India 2011 by Arun Gupta
Running your Java EE 6 Apps in the Cloud - JavaOne India 2011Running your Java EE 6 Apps in the Cloud - JavaOne India 2011
Running your Java EE 6 Apps in the Cloud - JavaOne India 2011
Arun Gupta299 views
JavaOne India 2011 - Running your Java EE 6 Apps in the Cloud by Arun Gupta
JavaOne India 2011 - Running your Java EE 6 Apps in the CloudJavaOne India 2011 - Running your Java EE 6 Apps in the Cloud
JavaOne India 2011 - Running your Java EE 6 Apps in the Cloud
Arun Gupta400 views
Web Performance Part 4 "Client-side performance" by Binary Studio
Web Performance Part 4  "Client-side performance"Web Performance Part 4  "Client-side performance"
Web Performance Part 4 "Client-side performance"
Binary Studio2.3K views
Running your Java EE 6 applications in the Cloud (FISL 12) by Arun Gupta
Running your Java EE 6 applications in the Cloud (FISL 12)Running your Java EE 6 applications in the Cloud (FISL 12)
Running your Java EE 6 applications in the Cloud (FISL 12)
Arun Gupta1.8K views
Running your Java EE 6 Applications in the Cloud by Arun Gupta
Running your Java EE 6 Applications in the CloudRunning your Java EE 6 Applications in the Cloud
Running your Java EE 6 Applications in the Cloud
Arun Gupta9 views
Running your Java EE 6 applications in the Cloud by Arun Gupta
Running your Java EE 6 applications in the CloudRunning your Java EE 6 applications in the Cloud
Running your Java EE 6 applications in the Cloud
Arun Gupta1.1K views
JFokus 2011 - Running your Java EE 6 apps in the Cloud by Arun Gupta
JFokus 2011 - Running your Java EE 6 apps in the CloudJFokus 2011 - Running your Java EE 6 apps in the Cloud
JFokus 2011 - Running your Java EE 6 apps in the Cloud
Arun Gupta705 views
Lean microservices through ahead of time compilation (Tobias Piper, Loveholid... by London Microservices
Lean microservices through ahead of time compilation (Tobias Piper, Loveholid...Lean microservices through ahead of time compilation (Tobias Piper, Loveholid...
Lean microservices through ahead of time compilation (Tobias Piper, Loveholid...
Dynamic Languages Web Frameworks Indicthreads 2009 by Arun Gupta
Dynamic Languages Web Frameworks Indicthreads 2009Dynamic Languages Web Frameworks Indicthreads 2009
Dynamic Languages Web Frameworks Indicthreads 2009
Arun Gupta1.3K views
Running your Java EE 6 applications in the Cloud @ Silicon Valley Code Camp 2010 by Arun Gupta
Running your Java EE 6 applications in the Cloud @ Silicon Valley Code Camp 2010Running your Java EE 6 applications in the Cloud @ Silicon Valley Code Camp 2010
Running your Java EE 6 applications in the Cloud @ Silicon Valley Code Camp 2010
Arun Gupta1.1K views
20151010 my sq-landjavav2a by Ivan Ma
20151010 my sq-landjavav2a20151010 my sq-landjavav2a
20151010 my sq-landjavav2a
Ivan Ma327 views
Jwis2011 ruo ando by Ruo Ando
Jwis2011 ruo andoJwis2011 ruo ando
Jwis2011 ruo ando
Ruo Ando398 views
Running your Java EE 6 applications in the clouds by Arun Gupta
Running your Java EE 6 applications in the clouds Running your Java EE 6 applications in the clouds
Running your Java EE 6 applications in the clouds
Arun Gupta385 views
GR8Conf 2011: Adopting Grails by GR8Conf
GR8Conf 2011: Adopting GrailsGR8Conf 2011: Adopting Grails
GR8Conf 2011: Adopting Grails
GR8Conf660 views
Adopting Grails - GR8Conf Europe by KlausBaumecker
Adopting Grails - GR8Conf EuropeAdopting Grails - GR8Conf Europe
Adopting Grails - GR8Conf Europe
KlausBaumecker196 views
Haj 4344-java se 9 and the application server-1 by Kevin Sutter
Haj 4344-java se 9 and the application server-1Haj 4344-java se 9 and the application server-1
Haj 4344-java se 9 and the application server-1
Kevin Sutter170 views
4F Migrating to Gradle Project by Okars Gavriševs
4F Migrating to Gradle Project 4F Migrating to Gradle Project
4F Migrating to Gradle Project
Okars Gavriševs1.7K views
Continuous Deployment: The Dirty Details by Mike Brittain
Continuous Deployment: The Dirty DetailsContinuous Deployment: The Dirty Details
Continuous Deployment: The Dirty Details
Mike Brittain27.3K views

More from Matt Raible

Micro Frontends for Java Microservices - Belfast JUG 2022 by
Micro Frontends for Java Microservices - Belfast JUG 2022Micro Frontends for Java Microservices - Belfast JUG 2022
Micro Frontends for Java Microservices - Belfast JUG 2022Matt Raible
26 views57 slides
Micro Frontends for Java Microservices - Dublin JUG 2022 by
Micro Frontends for Java Microservices - Dublin JUG 2022Micro Frontends for Java Microservices - Dublin JUG 2022
Micro Frontends for Java Microservices - Dublin JUG 2022Matt Raible
19 views56 slides
Micro Frontends for Java Microservices - Cork JUG 2022 by
Micro Frontends for Java Microservices - Cork JUG 2022Micro Frontends for Java Microservices - Cork JUG 2022
Micro Frontends for Java Microservices - Cork JUG 2022Matt Raible
7 views56 slides
Comparing Native Java REST API Frameworks - Seattle JUG 2022 by
Comparing Native Java REST API Frameworks - Seattle JUG 2022Comparing Native Java REST API Frameworks - Seattle JUG 2022
Comparing Native Java REST API Frameworks - Seattle JUG 2022Matt Raible
49 views87 slides
Reactive Java Microservices with Spring Boot and JHipster - Spring I/O 2022 by
Reactive Java Microservices with Spring Boot and JHipster - Spring I/O 2022Reactive Java Microservices with Spring Boot and JHipster - Spring I/O 2022
Reactive Java Microservices with Spring Boot and JHipster - Spring I/O 2022Matt Raible
105 views42 slides
Comparing Native Java REST API Frameworks - Devoxx France 2022 by
Comparing Native Java REST API Frameworks - Devoxx France 2022Comparing Native Java REST API Frameworks - Devoxx France 2022
Comparing Native Java REST API Frameworks - Devoxx France 2022Matt Raible
130 views86 slides

More from Matt Raible(20)

Micro Frontends for Java Microservices - Belfast JUG 2022 by Matt Raible
Micro Frontends for Java Microservices - Belfast JUG 2022Micro Frontends for Java Microservices - Belfast JUG 2022
Micro Frontends for Java Microservices - Belfast JUG 2022
Matt Raible26 views
Micro Frontends for Java Microservices - Dublin JUG 2022 by Matt Raible
Micro Frontends for Java Microservices - Dublin JUG 2022Micro Frontends for Java Microservices - Dublin JUG 2022
Micro Frontends for Java Microservices - Dublin JUG 2022
Matt Raible19 views
Micro Frontends for Java Microservices - Cork JUG 2022 by Matt Raible
Micro Frontends for Java Microservices - Cork JUG 2022Micro Frontends for Java Microservices - Cork JUG 2022
Micro Frontends for Java Microservices - Cork JUG 2022
Matt Raible7 views
Comparing Native Java REST API Frameworks - Seattle JUG 2022 by Matt Raible
Comparing Native Java REST API Frameworks - Seattle JUG 2022Comparing Native Java REST API Frameworks - Seattle JUG 2022
Comparing Native Java REST API Frameworks - Seattle JUG 2022
Matt Raible49 views
Reactive Java Microservices with Spring Boot and JHipster - Spring I/O 2022 by Matt Raible
Reactive Java Microservices with Spring Boot and JHipster - Spring I/O 2022Reactive Java Microservices with Spring Boot and JHipster - Spring I/O 2022
Reactive Java Microservices with Spring Boot and JHipster - Spring I/O 2022
Matt Raible105 views
Comparing Native Java REST API Frameworks - Devoxx France 2022 by Matt Raible
Comparing Native Java REST API Frameworks - Devoxx France 2022Comparing Native Java REST API Frameworks - Devoxx France 2022
Comparing Native Java REST API Frameworks - Devoxx France 2022
Matt Raible130 views
Lock That Sh*t Down! Auth Security Patterns for Apps, APIs, and Infra - Devne... by Matt Raible
Lock That Sh*t Down! Auth Security Patterns for Apps, APIs, and Infra - Devne...Lock That Sh*t Down! Auth Security Patterns for Apps, APIs, and Infra - Devne...
Lock That Sh*t Down! Auth Security Patterns for Apps, APIs, and Infra - Devne...
Matt Raible98 views
Java REST API Framework Comparison - PWX 2021 by Matt Raible
Java REST API Framework Comparison - PWX 2021Java REST API Framework Comparison - PWX 2021
Java REST API Framework Comparison - PWX 2021
Matt Raible148 views
Web App Security for Java Developers - PWX 2021 by Matt Raible
Web App Security for Java Developers - PWX 2021Web App Security for Java Developers - PWX 2021
Web App Security for Java Developers - PWX 2021
Matt Raible135 views
Mobile App Development with Ionic, React Native, and JHipster - Connect.Tech ... by Matt Raible
Mobile App Development with Ionic, React Native, and JHipster - Connect.Tech ...Mobile App Development with Ionic, React Native, and JHipster - Connect.Tech ...
Mobile App Development with Ionic, React Native, and JHipster - Connect.Tech ...
Matt Raible187 views
Lock That Shit Down! Auth Security Patterns for Apps, APIs, and Infra - Joker... by Matt Raible
Lock That Shit Down! Auth Security Patterns for Apps, APIs, and Infra - Joker...Lock That Shit Down! Auth Security Patterns for Apps, APIs, and Infra - Joker...
Lock That Shit Down! Auth Security Patterns for Apps, APIs, and Infra - Joker...
Matt Raible140 views
Web App Security for Java Developers - UberConf 2021 by Matt Raible
Web App Security for Java Developers - UberConf 2021Web App Security for Java Developers - UberConf 2021
Web App Security for Java Developers - UberConf 2021
Matt Raible152 views
Java REST API Framework Comparison - UberConf 2021 by Matt Raible
Java REST API Framework Comparison - UberConf 2021Java REST API Framework Comparison - UberConf 2021
Java REST API Framework Comparison - UberConf 2021
Matt Raible150 views
Native Java with Spring Boot and JHipster - SF JUG 2021 by Matt Raible
Native Java with Spring Boot and JHipster - SF JUG 2021Native Java with Spring Boot and JHipster - SF JUG 2021
Native Java with Spring Boot and JHipster - SF JUG 2021
Matt Raible69 views
Lock That Shit Down! Auth Security Patterns for Apps, APIs, and Infra - Sprin... by Matt Raible
Lock That Shit Down! Auth Security Patterns for Apps, APIs, and Infra - Sprin...Lock That Shit Down! Auth Security Patterns for Apps, APIs, and Infra - Sprin...
Lock That Shit Down! Auth Security Patterns for Apps, APIs, and Infra - Sprin...
Matt Raible182 views
Reactive Java Microservices with Spring Boot and JHipster - Denver JUG 2021 by Matt Raible
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
Matt Raible182 views
Get Hip with JHipster - Colorado Springs Open Source User Group 2021 by Matt Raible
Get Hip with JHipster - Colorado Springs Open Source User Group 2021Get Hip with JHipster - Colorado Springs Open Source User Group 2021
Get Hip with JHipster - Colorado Springs Open Source User Group 2021
Matt Raible150 views
JHipster and Okta - JHipster Virtual Meetup December 2020 by Matt Raible
JHipster and Okta - JHipster Virtual Meetup December 2020JHipster and Okta - JHipster Virtual Meetup December 2020
JHipster and Okta - JHipster Virtual Meetup December 2020
Matt Raible226 views
Java REST API Comparison: Micronaut, Quarkus, and Spring Boot - jconf.dev 2020 by Matt Raible
Java REST API Comparison: Micronaut, Quarkus, and Spring Boot - jconf.dev 2020Java REST API Comparison: Micronaut, Quarkus, and Spring Boot - jconf.dev 2020
Java REST API Comparison: Micronaut, Quarkus, and Spring Boot - jconf.dev 2020
Matt Raible434 views
Security Patterns for Microservice Architectures - SpringOne 2020 by Matt Raible
Security Patterns for Microservice Architectures - SpringOne 2020Security Patterns for Microservice Architectures - SpringOne 2020
Security Patterns for Microservice Architectures - SpringOne 2020
Matt Raible329 views

Recently uploaded

Developments to CloudStack’s SDN ecosystem: Integration with VMWare NSX 4 - P... by
Developments to CloudStack’s SDN ecosystem: Integration with VMWare NSX 4 - P...Developments to CloudStack’s SDN ecosystem: Integration with VMWare NSX 4 - P...
Developments to CloudStack’s SDN ecosystem: Integration with VMWare NSX 4 - P...ShapeBlue
194 views62 slides
Transitioning from VMware vCloud to Apache CloudStack: A Path to Profitabilit... by
Transitioning from VMware vCloud to Apache CloudStack: A Path to Profitabilit...Transitioning from VMware vCloud to Apache CloudStack: A Path to Profitabilit...
Transitioning from VMware vCloud to Apache CloudStack: A Path to Profitabilit...ShapeBlue
159 views25 slides
iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas... by
iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas...iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas...
iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas...Bernd Ruecker
54 views69 slides
State of the Union - Rohit Yadav - Apache CloudStack by
State of the Union - Rohit Yadav - Apache CloudStackState of the Union - Rohit Yadav - Apache CloudStack
State of the Union - Rohit Yadav - Apache CloudStackShapeBlue
297 views53 slides
Centralized Logging Feature in CloudStack using ELK and Grafana - Kiran Chava... by
Centralized Logging Feature in CloudStack using ELK and Grafana - Kiran Chava...Centralized Logging Feature in CloudStack using ELK and Grafana - Kiran Chava...
Centralized Logging Feature in CloudStack using ELK and Grafana - Kiran Chava...ShapeBlue
145 views17 slides
2FA and OAuth2 in CloudStack - Andrija Panić - ShapeBlue by
2FA and OAuth2 in CloudStack - Andrija Panić - ShapeBlue2FA and OAuth2 in CloudStack - Andrija Panić - ShapeBlue
2FA and OAuth2 in CloudStack - Andrija Panić - ShapeBlueShapeBlue
147 views23 slides

Recently uploaded(20)

Developments to CloudStack’s SDN ecosystem: Integration with VMWare NSX 4 - P... by ShapeBlue
Developments to CloudStack’s SDN ecosystem: Integration with VMWare NSX 4 - P...Developments to CloudStack’s SDN ecosystem: Integration with VMWare NSX 4 - P...
Developments to CloudStack’s SDN ecosystem: Integration with VMWare NSX 4 - P...
ShapeBlue194 views
Transitioning from VMware vCloud to Apache CloudStack: A Path to Profitabilit... by ShapeBlue
Transitioning from VMware vCloud to Apache CloudStack: A Path to Profitabilit...Transitioning from VMware vCloud to Apache CloudStack: A Path to Profitabilit...
Transitioning from VMware vCloud to Apache CloudStack: A Path to Profitabilit...
ShapeBlue159 views
iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas... by Bernd Ruecker
iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas...iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas...
iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas...
Bernd Ruecker54 views
State of the Union - Rohit Yadav - Apache CloudStack by ShapeBlue
State of the Union - Rohit Yadav - Apache CloudStackState of the Union - Rohit Yadav - Apache CloudStack
State of the Union - Rohit Yadav - Apache CloudStack
ShapeBlue297 views
Centralized Logging Feature in CloudStack using ELK and Grafana - Kiran Chava... by ShapeBlue
Centralized Logging Feature in CloudStack using ELK and Grafana - Kiran Chava...Centralized Logging Feature in CloudStack using ELK and Grafana - Kiran Chava...
Centralized Logging Feature in CloudStack using ELK and Grafana - Kiran Chava...
ShapeBlue145 views
2FA and OAuth2 in CloudStack - Andrija Panić - ShapeBlue by ShapeBlue
2FA and OAuth2 in CloudStack - Andrija Panić - ShapeBlue2FA and OAuth2 in CloudStack - Andrija Panić - ShapeBlue
2FA and OAuth2 in CloudStack - Andrija Panić - ShapeBlue
ShapeBlue147 views
Business Analyst Series 2023 - Week 4 Session 7 by DianaGray10
Business Analyst Series 2023 -  Week 4 Session 7Business Analyst Series 2023 -  Week 4 Session 7
Business Analyst Series 2023 - Week 4 Session 7
DianaGray10139 views
Business Analyst Series 2023 - Week 4 Session 8 by DianaGray10
Business Analyst Series 2023 -  Week 4 Session 8Business Analyst Series 2023 -  Week 4 Session 8
Business Analyst Series 2023 - Week 4 Session 8
DianaGray10123 views
Why and How CloudStack at weSystems - Stephan Bienek - weSystems by ShapeBlue
Why and How CloudStack at weSystems - Stephan Bienek - weSystemsWhy and How CloudStack at weSystems - Stephan Bienek - weSystems
Why and How CloudStack at weSystems - Stephan Bienek - weSystems
ShapeBlue238 views
Live Demo Showcase: Unveiling Dell PowerFlex’s IaaS Capabilities with Apache ... by ShapeBlue
Live Demo Showcase: Unveiling Dell PowerFlex’s IaaS Capabilities with Apache ...Live Demo Showcase: Unveiling Dell PowerFlex’s IaaS Capabilities with Apache ...
Live Demo Showcase: Unveiling Dell PowerFlex’s IaaS Capabilities with Apache ...
ShapeBlue126 views
Zero to Cloud Hero: Crafting a Private Cloud from Scratch with XCP-ng, Xen Or... by ShapeBlue
Zero to Cloud Hero: Crafting a Private Cloud from Scratch with XCP-ng, Xen Or...Zero to Cloud Hero: Crafting a Private Cloud from Scratch with XCP-ng, Xen Or...
Zero to Cloud Hero: Crafting a Private Cloud from Scratch with XCP-ng, Xen Or...
ShapeBlue198 views
GDG Cloud Southlake 28 Brad Taylor and Shawn Augenstein Old Problems in the N... by James Anderson
GDG Cloud Southlake 28 Brad Taylor and Shawn Augenstein Old Problems in the N...GDG Cloud Southlake 28 Brad Taylor and Shawn Augenstein Old Problems in the N...
GDG Cloud Southlake 28 Brad Taylor and Shawn Augenstein Old Problems in the N...
James Anderson160 views
DRBD Deep Dive - Philipp Reisner - LINBIT by ShapeBlue
DRBD Deep Dive - Philipp Reisner - LINBITDRBD Deep Dive - Philipp Reisner - LINBIT
DRBD Deep Dive - Philipp Reisner - LINBIT
ShapeBlue180 views
Migrating VMware Infra to KVM Using CloudStack - Nicolas Vazquez - ShapeBlue by ShapeBlue
Migrating VMware Infra to KVM Using CloudStack - Nicolas Vazquez - ShapeBlueMigrating VMware Infra to KVM Using CloudStack - Nicolas Vazquez - ShapeBlue
Migrating VMware Infra to KVM Using CloudStack - Nicolas Vazquez - ShapeBlue
ShapeBlue218 views
Extending KVM Host HA for Non-NFS Storage - Alex Ivanov - StorPool by ShapeBlue
Extending KVM Host HA for Non-NFS Storage -  Alex Ivanov - StorPoolExtending KVM Host HA for Non-NFS Storage -  Alex Ivanov - StorPool
Extending KVM Host HA for Non-NFS Storage - Alex Ivanov - StorPool
ShapeBlue123 views
Backup and Disaster Recovery with CloudStack and StorPool - Workshop - Venko ... by ShapeBlue
Backup and Disaster Recovery with CloudStack and StorPool - Workshop - Venko ...Backup and Disaster Recovery with CloudStack and StorPool - Workshop - Venko ...
Backup and Disaster Recovery with CloudStack and StorPool - Workshop - Venko ...
ShapeBlue184 views
DRaaS using Snapshot copy and destination selection (DRaaS) - Alexandre Matti... by ShapeBlue
DRaaS using Snapshot copy and destination selection (DRaaS) - Alexandre Matti...DRaaS using Snapshot copy and destination selection (DRaaS) - Alexandre Matti...
DRaaS using Snapshot copy and destination selection (DRaaS) - Alexandre Matti...
ShapeBlue139 views
Future of AR - Facebook Presentation by Rob McCarty
Future of AR - Facebook PresentationFuture of AR - Facebook Presentation
Future of AR - Facebook Presentation
Rob McCarty64 views

Play Framework vs Grails Smackdown - JavaOne 2013