Yupeng FuKian Win Ong
Kevin ZhaoYannis Papakonstantinou
Michalis Petropoulos
The FORWARD SQL-Based Declarative Framework
for Ajax Applications
Vast Majority of Web Applications: Issue simple SQL commands, reflect new state on browser
Web Application
Database
Browser
INSERTUPDATEDELETE
SELECT
Submit
2
App server datain main memory
SessionObjectsSessionObjects
SessionObjects
The Paradox
Most web applications are fundamentally simple;yet their development requires large amounts of code,both server-side* and client-side (JavaScript)
* Java, PHP, C#, Ruby etc.3
Where is the extraneous code expended?
Low-level code addressing frictionsof the web application architectures
pre-2005: Pure server-side programming Plumbing code addressing language heterogeneities
post-2005: Ajax (also Flash, Silverlight) Data coordination code between Ajax page
and server state (main memory + database)
4
Pre-2005: Pure server-side programming: Tedious code to integrate across three languages and computation hosts
Browser
Application Server
Database
HTMLDOM
Action
INSERT INTO reviews …
Java
Page Computation
SELECT *FROM proposals…SELECT * FROM reviews …
Java
Code with JDBC/SQL calls to combine database and application-server data
Code to combine database and application server data into HTML
RequestParameters
Database Server
SessionObjectsSessionObjects
SessionObjects
In MVC-coded applications of UCSD’s Web App programming class projects60 lines of plumbing code for each
line of SQL and 2 lines of control flow
5
2005: Enter Ajax:A desktop feel to cloud-based applications
• Asynchronous partial update of the page
• Fancy JavaScript/Ajax componentsmaps, calendars, tabbed windows
6
RequestParameters
Ajax: Mundane data coordination betweenpage state and server state (app server + database)
JavaScript
Action
INSERT INTO reviews …
Java
collect_args();response_handler = function(){ partial_renderer(); }send_request();Browser
Application Server
Database Server Database
Page Computation
SELECT *FROM proposals…SELECT * FROM reviews …
JavaDelta
Queries
Diffs
SessionObjects
HTMLDOM
JavaScriptComponents
SessionObjects
JavaScript/Java code reflects page data & request parameters to the server
JavaScript components have different programmatic interfaces
JavaScript/Java code tuned to incrementally update HTML DOM & JavaScript components
7
For each action, yet another incremental page computation code and partial renderer
BrowserApplication Server
Pure Server-side Model Ajax Model
Page Computation Page Computation 1
Page Computation 2
Page Computation 3
Partial Renderer 1
Partial Renderer 2
Partial Renderer 3
Partial update requires different logic and imperative programming for each user action
Action 1
Action 2
Action 3
INSERT …
DELETE …
UPDATE …
8
Action 1
Action 2
Action 3
INSERT …
DELETE …
UPDATE …
Goal of theFORWARD Web Application Programming Framework
• Remove the architectural frictions– Plumbing code addressing language heterogeneities– Data coordination code between Ajax page and server
state (app server main memory + database)• Make easy things easy while difficult things possible• Novelty: SQL-based declarative programming
1. “Unified application state” virtual database, comprisingentire application stateaccessible via SQL++ distributed queries
2. Ajax page as a rendered SQL++ view that is automatically and incrementally maintained
Actions and pages use just SQL++, no Java or JavaScriptAutomatic optimizations enabled 9
FORWARD Interpreter (e.g., http://forward.ucsd.edu )
FORWARD Application: Set of declarative configurations, interpreted in a location-transparent way
FORWARD Application nsf_reviewingAction ConfigurationAction Configuration save_review
Page ConfigurationPage Configurationreview
Source Configurations & SQL++ Schema Definitions
10
Browser-side FORWARD JavaScript librariesHTMLDOM
JavaScriptComponents
Unified SQL++ Application State
FORWARD Application:Operation
11
FORWARD Interpreter (e.g., http://forward.ucsd.edu )
FORWARD Application nsf_reviewing
Browser-side FORWARD JavaScript librariesHTMLDOM
JavaScriptComponents
Action ConfigurationAction Configuration save_review
Page ConfigurationPage Configurationreview
Source Configurations & SQL++ Schema Definitions
Unified SQL++ Application State
Actions Access Unified Application State via SQL++
12
FORWARD Interpreter (e.g., http://forward.ucsd.edu )
FORWARD Application nsf_reviewing
Browser-side FORWARD JavaScript librariesHTMLDOM
JavaScriptComponents
Unified SQL++ Application StateAction
Outputs
Core PageRequest
ParametersDatabaseSessionObjects
Action ConfigurationAction Configuration save_review
Page ConfigurationPage Configurationreview
Source Configurations & SQL++ Schema Definitions
Core page & request parameters: Abstraction of relevant part of browser state
SQL++ includes:NestingVariabilityIdentityOrdering
Actions as Compositions of Services
Action Configuration save_review
SQL++condition
SQL++update
defaultyesgoto page:
errorgoto page:
home
sent
successfailure
goto page:review
13
noJava
// Insert submitted review into reviews table of the hosted databaseINSERT INTO hosted.reviews(proposalId, comment, rating)VALUES (request.pid, request.myComment, request.myRating)
// Has the reviewer reviewed all assigned proposalsNOT EXISTS( SELECT * FROM … )
Pages as Rendered SQL++ Views,with User Input Attributes
14
FORWARD Interpreter (e.g., http://forward.ucsd.edu )
FORWARD Application nsf_reviewing
Browser-side FORWARD JavaScript librariesHTMLDOM
JavaScriptComponents
Action ConfigurationAction Configuration save_review
Page ConfigurationPage Configurationreview
Source Configurations & SQL++ Schema Definitions
Unified SQL++ Application State
<fstmt:for query=" // proposals assigned to // currently logged-in reviewer SELECT p.id AS pid, p.title FROM hosted.proposals AS p WHERE EXISTS( SELECT * FROM hosted.assignments AS a WHERE a.proposal = p.id AND a.reviewer =
session.user"> <tr> ... <td>{pid}</td> ... </tr></fstmt:for>
Page Configuration Follows Popular Frameworks:HTML + FORWARD statements & expressions, using SQL++
Overall structure reminiscent of XQuery and SQL/XML
15
<fstmt:for query=" SELECT ..."><tr> ... <td> <funit:bar_chart> <bars> <fstmt:for query="SELECT …"> <bar> <id> {gid} </id> <value> {score} </value> </bar> </fstmt:for> </bars> </funit:bar_chart> </td> ...
Page Configuration: Ajax/JavaScript Components Simply by FORWARD Unit Tags
16
After each action, the FORWARD interpreter automatically & incrementally updatesHTML and JavaScript components
Core Page and Request Parameters:Mirror of named page data
<fstmt:for name="proposals" query=" SELECT p.id AS pid, p.title FROM hosted.proposals AS p WHERE ..."><tr>... <funit:editor name="myReview"> ... </funit:editor> ... <funit:select name="myRating"> ... </funit:select> ... <funit:button onclick="save_review"/></tr></fstmt:for>
Core Page
proposals
Automatically inferred
pid my_review rating
17
Implementation Issues Summary
• Incremental page maintenance:Data: Deferred incremental SQL++ view maintenanceVisual units: Efficient wrapping of components from Dojo, Yahoo UI, Google Visualization, Stanford Protovis
• Query optimization for distributed queries over small main memory sources and a large persistent database
• Internal mappings, resolving heterogeneities– query results to visual state– visual state to core and request schemas
18
Related Work on Removing Cross-Layer Frictions
Browser
Database server
Application server
SQL Data
Browser Mirror Java (C#) ObjectsJava (C#)
Database Mirror Java (C#) ObjectsApp Server
Objects
?
19
HTMLDOM
JavaScriptComponents
ASP.NET,GWT
Hibernate,Entity Framework
Future work
• Client side computation optimizations– enabled by declarativeness, location transparency– deliver efficiency, disconnected operation
• Optimizations for updating a myriad views– leveraging pub-sub works
• Visual Do-It-Yourself development
20
21
FORWARD Demo