Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Introducing Liferay Standalone Applications
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Eduardo Lundgren
November 06, 2014
540
3
Share
Introducing Liferay Standalone Applications
Eduardo Lundgren
November 06, 2014
More Decks by Eduardo Lundgren
See All by Eduardo Lundgren
WeDeploy
eduardolundgren
0
72
Single Page Applications in Liferay
eduardolundgren
5
2.6k
Single Page Applications done right
eduardolundgren
10
810
tracking.js with Maira Bello
eduardolundgren
0
130
Single Page Application
eduardolundgren
0
450
Getting Started with YUI3 and AlloyUI
eduardolundgren
0
98
Getting started with AlloyUI
eduardolundgren
0
100
Augmented Reality.js
eduardolundgren
0
170
Liferay UI revolution
eduardolundgren
0
200
Featured
See All Featured
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
570
ラッコキーワード サービス紹介資料
rakko
1
3.4M
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.2k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.9k
Thoughts on Productivity
jonyablonski
76
5.2k
Technical Leadership for Architectural Decision Making
baasie
3
380
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.5k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
1
3.6k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
830
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
250
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
120k
Transcript
Standalone Applications in Liferay @eduardolundgren
“Liferay isn't sexy...”
None
One of the most efficient animal in the kingdom
None
None
They have 360-degree view
360-degree view
They are immortal
None
None
The most deadly creature on earth
None
None
None
None
None
What is the secret behind the jellyfish ? ? ?
? ? ? ? ? ? ? ? ?
None
“Teams with a better distribution of skills, not segmented by
roles, produce better results” Jared Spool User Interface Engineering
None
@rotty3000 (he also loves cars)
Standalone app is our Jellyfish
2013
None
None
None
None
None
None
!
None
Datastore
Datastore " Liferay A B Schemaless NoSQL Robust Scalable
A B " Datastore Liferay
Datastore ( your code goes here ) A B Deploy
Liferay
Datastore ( your code goes here ) A B Deploy
Liferay
Datastore API Clients A B Cross domain requests Promises Error
handling Batch Real time Liferay HTTP JavaScript Java ObjectiveC
Datastore RESTful Web Services API Clients A B Restful Liferay
HTTP JavaScript Java ObjectiveC
<script src="//apis.liferay.com/client.js" /> 8KB
lfr.request('http://api.example.com/v1/users') .then(function(response) { // success }) .catch(function(reason) { // failure
});
Your clients can talk directly to the back end services
without needing to go through your server side code
Autogenerated RESTful apis
The secret to machines talking to machines is to speak
human first
None
None
Users
Users https://api.example.com/v1/users Version Entity
Users /v1/users/ec557f-b045-0bad-5130-1347
Users /v1/users/559743231794
App id = 1, 2, 3... Normal DB
App id = 7 Sharded id = 46 id =
wat? DB DB DB
App id = 7 Sharded id = 46 id =
wat? DB 1) Random 2) Ordered 3) Unique 4) Distributed 5) Human Readable DB DB
64 bits IDs 0000000000000000000000000000000000000000000 0 00000000000000000000 |------------------------------------------| |---| |------------------| timestamp
sequence random bits safety bit bits Liferay's Simpleflake IDs /v1/users/559743231794
64 bits IDs 0000000000000000000000000000000000000000000 0 00000000000000000000 |------------------------------------------| |---| |------------------| timestamp
sequence random bits safety bit bits Chances of collision Liferay's Simpleflake IDs
Places for data: method and url, headers and body
POST https://api.example.com/v1/users PUT https://api.example.com/v1/users ! { "about": "Start simple. Dream
big. Do good. Be well.", "city": "Recife", "country": "BR" } ! HTTP 1.1/201 Created HTTP 1.1/202 Accepted (pending) Create
PUT https://api.example.com/v1/users/1 PATCH https://api.example.com/v1/users/1 ! { "about": "Updated", "city": "Recife",
"country": "BR" } ! HTTP 1.1/200 OK HTTP 1.1/202 Accepted (pending) Update
DELETE https://api.example.com/v1/users/1 ! HTTP 1.1/204 No content Delete
GET https://api.example.com/v1/users ! HTTP/1.1 200 OK Content-Type: application/json ! {
"users": [ { "about": "Start simple. Dream big. Do good. Be well.", "city": "Recife", "country": "BR" } ]} GET
GET https://api.example.com/v1/users.json ! HTTP/1.1 200 OK Content-Type: application/json ! {
"users": [ { "about": "Start simple. Dream big. Do good. Be well.", "city": "Recife", "country": "BR" } ]} GET JSON output
GET https://api.example.com/v1/users.xml ! HTTP/1.1 200 OK Content-Type: text/xml ! <?xml
version="1.0" encoding="UTF-8" ?> <users> <about>Start simple. Dream big. Do good. Be well.</aboutMe> <city>Recife</city> <country>BR</country> </users> GET XML output
POST https://api.example.com/v1/users/1/publish POST https://api.example.com/v1/users/1/star ! HTTP 1.1/200 OK HTTP 1.1/202
Accepted (pending) ! Custom verbs
Real-time
RESTful Web Services API Clients Restful HTTP JavaScript Java ObjectiveC
None
lfr.subscribe('http://api.example.com/v1/users') .on('data', function(response) { // data has arrived... });
Push notifications for all your services for free
Routing !
http://example.com/special/women
http://example.com/special/men
routes.txt
None
Automated tools
None
None
None
None
Management
Quota, Billing, Security policies, Reports, available at one click
Architecture
Database Service Builder Portlet Portlet Portlet JSON Web Services
RESTful Web Services Real-time Datastore MongoDB Elasticsearch RID Generator Auth
Permissions
Service Builder RESTful Web Services JSON Web Services Database Real-time
Datastore MongoDB Elasticsearch RID Generator Auth Permissions Portlet Portlet Portlet
None
Concrete Abstract "
" Concrete Abstract
Concrete Abstract "
None
" Concrete Abstract
DATASTORE RESTFUL REAL TIME ROUTING MANAGEMENT AUTHENTICATION TOOLS
We wanna be more than sexy.
Thank you! @eduardolundgren