24

SOEN 387 Web-based Enterprise Application Designsthiel/soen387/05_DatasourceAndRDGs.pdfSOEN 387 Web-based Enterprise Application Design Stuart Thiel Interacting with Databases ransactionT

  • Upload
    others

  • View
    10

  • Download
    0

Embed Size (px)

Citation preview

Page 1: SOEN 387 Web-based Enterprise Application Designsthiel/soen387/05_DatasourceAndRDGs.pdfSOEN 387 Web-based Enterprise Application Design Stuart Thiel Interacting with Databases ransactionT

SOEN 387Web-basedEnterpriseApplicationDesign

Stuart Thiel

Interacting withDatabases

TransactionScripts

Data LayerPatterns

Row DataGateway

SOEN 387 Web-based Enterprise ApplicationDesign

Stuart Thiel

Concordia University

Department of Computer & Software Engineering

Fall, 2015

1/21

Page 2: SOEN 387 Web-based Enterprise Application Designsthiel/soen387/05_DatasourceAndRDGs.pdfSOEN 387 Web-based Enterprise Application Design Stuart Thiel Interacting with Databases ransactionT

SOEN 387Web-basedEnterpriseApplicationDesign

Stuart Thiel

Interacting withDatabases

TransactionScripts

Data LayerPatterns

Row DataGateway

Outline

Interacting with Databases

Transaction Scripts

Data Layer Patterns

Row Data Gateway

2/21

Page 3: SOEN 387 Web-based Enterprise Application Designsthiel/soen387/05_DatasourceAndRDGs.pdfSOEN 387 Web-based Enterprise Application Design Stuart Thiel Interacting with Databases ransactionT

SOEN 387Web-basedEnterpriseApplicationDesign

Stuart Thiel

Interacting withDatabases

TransactionScripts

Data LayerPatterns

Row DataGateway

Making a connection

I To create a db connection, handshake with db server

I Can be expensive if server is remote

I Subsequent access is easy, if connection is passed around

I Don't share that connection with another request!!!

3/21

Page 4: SOEN 387 Web-based Enterprise Application Designsthiel/soen387/05_DatasourceAndRDGs.pdfSOEN 387 Web-based Enterprise Application Design Stuart Thiel Interacting with Databases ransactionT

SOEN 387Web-basedEnterpriseApplicationDesign

Stuart Thiel

Interacting withDatabases

TransactionScripts

Data LayerPatterns

Row DataGateway

Local Database Servers

I Local database servers eliminate much of thehandshaking cost

I This is a common setup, but not always this way

4/21

Page 5: SOEN 387 Web-based Enterprise Application Designsthiel/soen387/05_DatasourceAndRDGs.pdfSOEN 387 Web-based Enterprise Application Design Stuart Thiel Interacting with Databases ransactionT

SOEN 387Web-basedEnterpriseApplicationDesign

Stuart Thiel

Interacting withDatabases

TransactionScripts

Data LayerPatterns

Row DataGateway

Separate Database Server

I To eliminate those handshaking costs, pool connections

I Just clean them after use

I Can pollute next request's use if not careful

I How to recover hung connections?

5/21

Page 6: SOEN 387 Web-based Enterprise Application Designsthiel/soen387/05_DatasourceAndRDGs.pdfSOEN 387 Web-based Enterprise Application Design Stuart Thiel Interacting with Databases ransactionT

SOEN 387Web-basedEnterpriseApplicationDesign

Stuart Thiel

Interacting withDatabases

TransactionScripts

Data LayerPatterns

Row DataGateway

Two-Tier Systems

I Layers are usually a logical separation

I Tiers usually imply physical separation

I In this can, we see example of separated data source

6/21

Page 7: SOEN 387 Web-based Enterprise Application Designsthiel/soen387/05_DatasourceAndRDGs.pdfSOEN 387 Web-based Enterprise Application Design Stuart Thiel Interacting with Databases ransactionT

SOEN 387Web-basedEnterpriseApplicationDesign

Stuart Thiel

Interacting withDatabases

TransactionScripts

Data LayerPatterns

Row DataGateway

Java Database Connections, MySQL

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

// Notice, do not import com.mysql.jdbc.*

// or you will have problems!

public class LoadDriver {

public static void main(String[] args) {

try {

// The newInstance() call is a work around for some

// broken Java implementations

Class.forName("com.mysql.jdbc.Driver").newInstance();

conn = DriverManager.getConnection(

"jdbc:mysql://localhost/test?"

+ "user=monty&password=greatsqldb");

} catch (Exception ex) {

// handle the error

}

}

}

7/21

Page 8: SOEN 387 Web-based Enterprise Application Designsthiel/soen387/05_DatasourceAndRDGs.pdfSOEN 387 Web-based Enterprise Application Design Stuart Thiel Interacting with Databases ransactionT

SOEN 387Web-basedEnterpriseApplicationDesign

Stuart Thiel

Interacting withDatabases

TransactionScripts

Data LayerPatterns

Row DataGateway

Java Database Connections, Con�guration

I There are additional con�gurations to be had using thequery notation

I Not covered right now, but often indicate utf-8

8/21

Page 9: SOEN 387 Web-based Enterprise Application Designsthiel/soen387/05_DatasourceAndRDGs.pdfSOEN 387 Web-based Enterprise Application Design Stuart Thiel Interacting with Databases ransactionT

SOEN 387Web-basedEnterpriseApplicationDesign

Stuart Thiel

Interacting withDatabases

TransactionScripts

Data LayerPatterns

Row DataGateway

Making Select Queries

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

// Notice, do not import com.mysql.jdbc.*

// or you will have problems!

public class LoadDriver {

public static void main(String[] args) {

try {

// ...

// assume you have conn above

String query = "SELECT * FROM users";

Statement st = conn.createStatement();

ResultSet rs = st.executeQuery(query);

} catch (Exception ex) {

// handle the error

}

}

}

9/21

Page 10: SOEN 387 Web-based Enterprise Application Designsthiel/soen387/05_DatasourceAndRDGs.pdfSOEN 387 Web-based Enterprise Application Design Stuart Thiel Interacting with Databases ransactionT

SOEN 387Web-basedEnterpriseApplicationDesign

Stuart Thiel

Interacting withDatabases

TransactionScripts

Data LayerPatterns

Row DataGateway

Results From Select Queries

public class LoadDriver {

public static void main(String[] args) {

try {

// ...

// assume you have the resultset rs

while (rs.next()) {

int id = rs.getInt("id");

String firstName = rs.getString("first_name");

String lastName = rs.getString("last_name");

Date dateCreated = rs.getDate("date_created");

boolean isAdmin = rs.getBoolean("is_admin");

int numPoints = rs.getInt("num_points");

}

st.close();

} catch (Exception ex) {

// handle the error

}

}

}

10/21

Page 11: SOEN 387 Web-based Enterprise Application Designsthiel/soen387/05_DatasourceAndRDGs.pdfSOEN 387 Web-based Enterprise Application Design Stuart Thiel Interacting with Databases ransactionT

SOEN 387Web-basedEnterpriseApplicationDesign

Stuart Thiel

Interacting withDatabases

TransactionScripts

Data LayerPatterns

Row DataGateway

Making Database Modi�cation: Insert

import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;

// Notice, do not import com.mysql.jdbc.*

// or you will have problems!

public class LoadDriver {public static void main(String[] args) {

try {// ...

// assume you have conn above

String query = " insert into users "+ " (first_name, last_name, num_points)"

+ " values (\"Fred\", \"Durst\", 1)";Statement st = conn.createStatement();int count = st.executeUpdate(query);

} catch (Exception ex) {// handle the error

}}

}

11/21

Page 12: SOEN 387 Web-based Enterprise Application Designsthiel/soen387/05_DatasourceAndRDGs.pdfSOEN 387 Web-based Enterprise Application Design Stuart Thiel Interacting with Databases ransactionT

SOEN 387Web-basedEnterpriseApplicationDesign

Stuart Thiel

Interacting withDatabases

TransactionScripts

Data LayerPatterns

Row DataGateway

Making Database Modi�cation: Update

import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;

// Notice, do not import com.mysql.jdbc.*

// or you will have problems!

public class LoadDriver {public static void main(String[] args) {

try {// ...

// assume you have conn above

String query = "update users set "+ "num_points = 2 where first_name = \"Fred\"";

Statement st = conn.createStatement();int count = st.executeUpdate(query);

} catch (Exception ex) {// handle the error

}}

}

12/21

Page 13: SOEN 387 Web-based Enterprise Application Designsthiel/soen387/05_DatasourceAndRDGs.pdfSOEN 387 Web-based Enterprise Application Design Stuart Thiel Interacting with Databases ransactionT

SOEN 387Web-basedEnterpriseApplicationDesign

Stuart Thiel

Interacting withDatabases

TransactionScripts

Data LayerPatterns

Row DataGateway

Adding/Dropping Tables

I You can also delete rows

I You can add/drop tables

13/21

Page 14: SOEN 387 Web-based Enterprise Application Designsthiel/soen387/05_DatasourceAndRDGs.pdfSOEN 387 Web-based Enterprise Application Design Stuart Thiel Interacting with Databases ransactionT

SOEN 387Web-basedEnterpriseApplicationDesign

Stuart Thiel

Interacting withDatabases

TransactionScripts

Data LayerPatterns

Row DataGateway

Prepared Statements

I Protect your data!

14/21

Page 15: SOEN 387 Web-based Enterprise Application Designsthiel/soen387/05_DatasourceAndRDGs.pdfSOEN 387 Web-based Enterprise Application Design Stuart Thiel Interacting with Databases ransactionT

SOEN 387Web-basedEnterpriseApplicationDesign

Stuart Thiel

Interacting withDatabases

TransactionScripts

Data LayerPatterns

Row DataGateway

Prepared Statements Code

import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;

// Notice, do not import com.mysql.jdbc.*

// or you will have problems!

public class LoadDriver {public static void main(String[] args) {

try {// ...

// assume you have conn above

String query = " insert into users "+ "(first_name, last_name, num_points)"

+ " values (?, ?, ?)";PreparedStatement preparedStmt =

conn.prepareStatement(query);preparedStmt.setString(1, "Fred");preparedStmt.setString(2, "Durst");preparedStmt.setInt (3, 1);

int count = preparedStmt.executeUpdate();

} catch (Exception ex) {// handle the error

}}

}

15/21

Page 16: SOEN 387 Web-based Enterprise Application Designsthiel/soen387/05_DatasourceAndRDGs.pdfSOEN 387 Web-based Enterprise Application Design Stuart Thiel Interacting with Databases ransactionT

SOEN 387Web-basedEnterpriseApplicationDesign

Stuart Thiel

Interacting withDatabases

TransactionScripts

Data LayerPatterns

Row DataGateway

Transaction Scripts

Organizes business logic by procedures where each

procedure handles a single request from the

presentation.

I Reads any parameters

I Pulls any data

I Manipulates any data

I Writes any data

I Formats response for client

I . . . all in one class

I Is this a good idea?

16/21

Page 17: SOEN 387 Web-based Enterprise Application Designsthiel/soen387/05_DatasourceAndRDGs.pdfSOEN 387 Web-based Enterprise Application Design Stuart Thiel Interacting with Databases ransactionT

SOEN 387Web-basedEnterpriseApplicationDesign

Stuart Thiel

Interacting withDatabases

TransactionScripts

Data LayerPatterns

Row DataGateway

Transaction Scripts

Organizes business logic by procedures where each

procedure handles a single request from the

presentation.

I Reads any parameters

I Pulls any data

I Manipulates any data

I Writes any data

I Formats response for client

I . . . all in one class

I Is this a good idea?

16/21

Page 18: SOEN 387 Web-based Enterprise Application Designsthiel/soen387/05_DatasourceAndRDGs.pdfSOEN 387 Web-based Enterprise Application Design Stuart Thiel Interacting with Databases ransactionT

SOEN 387Web-basedEnterpriseApplicationDesign

Stuart Thiel

Interacting withDatabases

TransactionScripts

Data LayerPatterns

Row DataGateway

Transaction Scripts

Organizes business logic by procedures where each

procedure handles a single request from the

presentation.

I Reads any parameters

I Pulls any data

I Manipulates any data

I Writes any data

I Formats response for client

I . . . all in one class

I Is this a good idea?

16/21

Page 19: SOEN 387 Web-based Enterprise Application Designsthiel/soen387/05_DatasourceAndRDGs.pdfSOEN 387 Web-based Enterprise Application Design Stuart Thiel Interacting with Databases ransactionT

SOEN 387Web-basedEnterpriseApplicationDesign

Stuart Thiel

Interacting withDatabases

TransactionScripts

Data LayerPatterns

Row DataGateway

Example TSApplication / Presentation

Domain

Technical Services

HelloWorldServlet

+ procesGet(req:HttpServletRequest, resp:HttpServletResponse) : void

17/21

Page 20: SOEN 387 Web-based Enterprise Application Designsthiel/soen387/05_DatasourceAndRDGs.pdfSOEN 387 Web-based Enterprise Application Design Stuart Thiel Interacting with Databases ransactionT

SOEN 387Web-basedEnterpriseApplicationDesign

Stuart Thiel

Interacting withDatabases

TransactionScripts

Data LayerPatterns

Row DataGateway

Example TS Layers

I Tutorial, Phase 1I Received requestI Read parametersI Formated resultI Returned result to client

18/21

Page 21: SOEN 387 Web-based Enterprise Application Designsthiel/soen387/05_DatasourceAndRDGs.pdfSOEN 387 Web-based Enterprise Application Design Stuart Thiel Interacting with Databases ransactionT

SOEN 387Web-basedEnterpriseApplicationDesign

Stuart Thiel

Interacting withDatabases

TransactionScripts

Data LayerPatterns

Row DataGateway

What is wrong with this

I Cohesion

I Coupling

I Layers?

I What did we do in the tutorial?

19/21

Page 22: SOEN 387 Web-based Enterprise Application Designsthiel/soen387/05_DatasourceAndRDGs.pdfSOEN 387 Web-based Enterprise Application Design Stuart Thiel Interacting with Databases ransactionT

SOEN 387Web-basedEnterpriseApplicationDesign

Stuart Thiel

Interacting withDatabases

TransactionScripts

Data LayerPatterns

Row DataGateway

What is wrong with this

I Cohesion

I Coupling

I Layers?

I What did we do in the tutorial?

19/21

Page 23: SOEN 387 Web-based Enterprise Application Designsthiel/soen387/05_DatasourceAndRDGs.pdfSOEN 387 Web-based Enterprise Application Design Stuart Thiel Interacting with Databases ransactionT

SOEN 387Web-basedEnterpriseApplicationDesign

Stuart Thiel

Interacting withDatabases

TransactionScripts

Data LayerPatterns

Row DataGateway

How Much To See

I We can also start cleaning up TS at the data-sourcelayer

I What if full names come from a DB?

I Transaction Script can access rows as a service

20/21

Page 24: SOEN 387 Web-based Enterprise Application Designsthiel/soen387/05_DatasourceAndRDGs.pdfSOEN 387 Web-based Enterprise Application Design Stuart Thiel Interacting with Databases ransactionT

SOEN 387Web-basedEnterpriseApplicationDesign

Stuart Thiel

Interacting withDatabases

TransactionScripts

Data LayerPatterns

Row DataGateway

Row Data Gateway, RefactoringApplication / Presentation

Domain

Technical Services

HelloWorldServlet

+ procesGet(req:HttpServletRequest,resp:HttpServletResponse) : void

Transaction Script

PersonRDG

- �rstName : String- lastName : String

+ PersonRDG(�rstName: String, lastName: String):+ �nd(�rstName:String):PersonRDG

+ �ndAll():List<PersonRDG>

+ getFirstName(): String+ setFirstName(�rst: String): void+ getLastName(): String+ setLastName(last: String): void+ insert(): void+ update(): void+ delete(): void

Row Data Gateway

21/21