17
Adrian Lienhard & Lukas Renggli, August 2003 Slide 1 Roadmap ß Introduction ß Seaside Web Applications ß Example: Insurance Application ß Server Management Interface ß ROE ß Smalltalk Relational DB Access

Squeak at NetStyle

  • Upload
    esug

  • View
    454

  • Download
    2

Embed Size (px)

DESCRIPTION

Squeak at NetStyle Adrian Lienhard & Lukas Renggli, (ESUG 2003, Bled)

Citation preview

Page 1: Squeak at NetStyle

Adrian Lienhard & Lukas Renggli, August 2003 Slide 1

Roadmap

ß Introductionß Seaside Web Applicationsß Example: Insurance Applicationß Server Management Interface

ß ROEß Smalltalk Relational DB Access

Page 2: Squeak at NetStyle

Adrian Lienhard & Lukas Renggli, August 2003 Slide 2

Introduction

ß netstyle.ch founded in 2000ß Startup specialized in developing

Web-Applicationsß Team of ~6 people (most parttime)

Page 3: Squeak at NetStyle

Adrian Lienhard & Lukas Renggli, August 2003 Slide 3

Seaside Web-Applicationß Sophisticated framework in Squeakß Server setup:

Apache

Comanche / Swazoo

Static files

SeasideComponent Component

http(s)

Web-client

Page 4: Squeak at NetStyle

Adrian Lienhard & Lukas Renggli, August 2003 Slide 4

Exampleß Domain: Health Insuranceß Specialized little company with

agenciesß Application: Extranet for...ß creating and manageing offers (with

printing/pdf)ß process of accepting new policiesß management of existing customers with

document-managementß billing for agencies

Page 5: Squeak at NetStyle

Adrian Lienhard & Lukas Renggli, August 2003 Slide 5

Screenshots

Page 6: Squeak at NetStyle

Adrian Lienhard & Lukas Renggli, August 2003 Slide 6

Page 7: Squeak at NetStyle

Adrian Lienhard & Lukas Renggli, August 2003 Slide 7

Page 8: Squeak at NetStyle

Adrian Lienhard & Lukas Renggli, August 2003 Slide 8

Page 9: Squeak at NetStyle

Adrian Lienhard & Lukas Renggli, August 2003 Slide 9

Page 10: Squeak at NetStyle

Adrian Lienhard & Lukas Renggli, August 2003 Slide 10

ROE

ß Generic DB access using Smalltalkß Automatically generated SQL

ß Implementation by Avi Bryantß Extended while developing insurance

application

Page 11: Squeak at NetStyle

Adrian Lienhard & Lukas Renggli, August 2003 Slide 11

Example: Create Tableperson := factory relation: ‘person’.person

create;addColumn: #id withType: #int;addColumn: #name withType : #text.

CREATE TABLE person ();ALTER TABLE person ADD COLUMN “id” INT;ALTER TABLE person ADD COLUMN “name” TEXT;

Page 12: Squeak at NetStyle

Adrian Lienhard & Lukas Renggli, August 2003 Slide 12

Simple Example

query := person where: [ :id :name |id > 200 & (name like: ‘avi%’) ].

query := query project: #id.query do: [ :row |

… ]

SELECT "id" FROM(SELECT * FROM (SELECT * FROM person)WHERE ("id">200) AND ("name" LIKE 'avi%'))

Page 13: Squeak at NetStyle

Adrian Lienhard & Lukas Renggli, August 2003 Slide 13

Class DiagramCollection

Relation

Concrete

Array Postgres

Transform

Join

Intersect

Difference

Union

Project

Select

Alias

Order

Distinct

Unary Binary

2

11

1

Page 14: Squeak at NetStyle

Adrian Lienhard & Lukas Renggli, August 2003 Slide 14

Advanced Examplerelation := PLPerson relation where: [ :lastname |

lastname like: ‘%’ , self searchName , ‘%’ ignoreCase: true ].relation := relation project: #familyid.

relation := relation * PLPersistentVersionHolder relation.relation := relation whereEqual: #(versionid familyid).relation := relation project: #holderid.

relation := relation * PLInternetOffer relation.relation := relation whereEqual: #(holderid id).

relation := self applyVisibilityRules: relation.relation := relation project: #id.relation := relation distinct.

Page 15: Squeak at NetStyle

Adrian Lienhard & Lukas Renggli, August 2003 Slide 15

Algebraic Representation

P[id](S[(holderid=id)](P[holderid](S[(versionid=familyid)](P[familyid](S[(lastnameilike'%avi%')](table_person)) Xtable_version_holder)) Xtable_internetoffer))

Page 16: Squeak at NetStyle

Adrian Lienhard & Lukas Renggli, August 2003 Slide 16

SQL Query

SELECT DISTINCT * FROM(SELECT "id" FROM (SELECT * FROM(SELECT * FROM (SELECT "holderid" FROM(SELECT * FROM (SELECT * FROM (SELECT"familyid" FROM (SELECT * FROM (SELECT* FROM table_person) WHERE ("lastname"ILIKE '%avi%'))), (SELECT * FROMtable_version_holder)) WHERE("versionid"="familyid"))), (SELECT * FROMtable_internetoffer)) WHERE("holderid"="id")))

Page 17: Squeak at NetStyle

Adrian Lienhard & Lukas Renggli, August 2003 Slide 17

Transaction Examplefactory transaction: [

users add: #(id name) values: #(1 avi).users add: #(id name) values: #(2 adi).“other updates, queries, …” ]

BEGIN;INSERT INTO users (id, name) VALUES (1, ‘avi’);INSERT INTO users (id, name) VALUES (2, ‘adi);…

COMMIT;

BEGIN;INSERT INTO users (id, name) VALUES (1, ‘avi’);INSERT INTO users (id, name) VALUES (2, ‘adi);…

ROLLBACK;