Yupeng Fu Kian Win Ong Kevin Zhao Yannis Papakonstantinou Michalis Petropoulos
description
Transcript of Yupeng Fu Kian Win Ong Kevin Zhao Yannis Papakonstantinou Michalis Petropoulos
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