Post on 24-Feb-2016
description
Baze podataka i aplikacije
Uvod
Klijent server arhitektura SUBP – serverska strana Aplikacija koja koristi BP – klijentska strana
Uspostavakonekcije
Zahtev za servisomDavanjeservisaRaskid
konekcije
2
Integrisana okruženja
Klijent i server su jedno Primer Access-a i MS JetDB Sve je u jednom fajlu Platformska zavisnost
JetDB engineAccess
Forms
Reports
Queries
Modules
3
JetDB engineAccess
Forms
Reports
Queries
Modules
4
Integrisana okruženja
JetDB engineAccess
Forms
Reports
Queries
Modules
5
Integrisana okruženja
JetDB engineAccess
Forms
Reports
Queries
Modules
6
Integrisana okruženja
JetDB engineAccess
Forms
Reports
Queries
Modules
7
Integrisana okruženja
Raslojavanje po potrebi
8
Integrisana okruženja
Pojavom OOP omogućeno je:◦ razdvajanje podataka od logike njihove obrade ◦ razdvajanje podataka od interfejsa prema
korisnicima podataka. Aplikacije se grade od objekata Objekti preuzimaju odovornost za
obavljanje specifičnih funkcionalnosti aplikacije
9
Slojevita struktura aplikacija
10
Slojevita struktura aplikacija
Primeri:◦ Grupa objekata od kojih se gradi korisnički
interfejs ◦ Grupa objekata koji ostvaruju konekciju na BP,
izvršavaju upite i prihvataju rezultate upita Objekti međusobno komuniciraju preko
funkcionalnih poziva Objekti mogu biti fizički razdvojeni (na
različitim računarskim platformama◦ Za takve aplikacije kažemo da su ditribuirane
Raslojavanje aplikacije - odvajanje njenih delova prema funkcionalnosti
Slojevi – grupisani objekti srodnih funkcionalnosti
Pravilo dobrog dizajna aplikacija: ◦ između objekata (klasa) u istom sloju treba da se
postigne visoka kohezija (high cohesion), ◦ slaba sprega između slojeva (low coupling).
11
Slojevita struktura aplikacija
Osnovni aplikacioni model je troslojni model◦ Prezentcioni sloj (presentation layer)◦ Sloj poslovne logike (buisness logic layer)◦ Sloj podataka (data layer)
12
Slojevita struktura aplikacija
13
Slojevita struktura aplikacija
Aplikacije mogu imati više od tri sloja Podaci mogu biti razdvojeni na više
različitih mesta ◦ Rasterećenje hardverskih (serverskih) platformi
Više nivoa obrade Primer: Web aplikacije
14
Slojevita struktura aplikacija
15
Slojevita struktura aplikacija
Aplikacije servisi (nezavisne softverske komponente )
Web servisi su zasnovani na tri osnovna standarda:
◦ XML – extensible markup language - (za prikazivanje podataka),
◦ SOAP – simple object access protokol (za razmenu podataka između davalaca i korisnika servisa) i,
◦ WSDL – Web Service Definition Language - za potrebe opisa servisa, definisan je poseban jezik
16
Slojevita struktura aplikacija
17
Slojevita struktura aplikacija
Tri komponente Web servisa:Davalac servisa, korisnik servisa, provajderWeb servisi omogućavaju:Povezivanje različitih aplikacija, tehnologija i računarskih platformi
Specifičnosti pristupa BP iz različitih slojeva◦ Pristup podacima iz prezentacionog sloja◦ Pristup podacima iz sloja poslovne logike◦ Pristup iz sloja podataka
18
Pristup BP
Prezentacioni sloj sadrži objekte koriničkog interfejsa
Uokvireni prozori sa naslovnom linijom koji sadrže kontrole za interakciju sa korisnikom
19
Pristupa BP - Prezentacioni sloj -
20
Pristupa BP - Prezentacioni sloj -
Pristupa BP - Prezentacioni sloj -
1:Private Sub Form_Close()2:DoCmd.RunSQL "UPDATE KolicineSred SET [KOLIC] = 3:Forms![TSredstva]![RecSum] WHERE
KolicineSred.ID_BR = 4:Forms![TSredstva]![ID_BR] AND 5:KolicineSred.SifDug=Forms![TSredstva]![SifDug];"6:End Sub
21
VBA skripta koja sadrži SQL naredbu
22
Pristupa BP - Prezentacioni sloj -
Pristupa BP - Prezentacioni sloj -
23
- Prezentacioni sloj -1: <html>2: <body>3: <%4: set conn=Server.CreateObject("ADODB.Connection")5: conn.Provider="Microsoft.Jet.OLEDB.4.0"6: conn.Open "d:/webdata/partneri.mdb“7: sql="INSERT INTO kupci (naz_firme, adresa, postbroj)"8: sql=sql & " VALUES “9: sql=sql & "('" & Request.Form("firma") & "',“10: sql=sql & "'" & Request.Form("adresa") & "',“11: sql=sql & "'" & Request.Form("postkod") & "')“12: on error resume next13: conn.Execute sql,recaffected14: if err<>0 then15: Response.Write("Nemate prava na dodavanje podataka!")16: else 17: Response.Write("<h3>Klijent " & Request.Form("firma") 18: & " je dodat</h3>")19: end if20: conn.close21: %>22: </body>23: </html>
24
Pristup BP iz ASP (Active Server Pages) stranice
Pristupa BP - Prezentacioni sloj -
1: <sql:query var="upit1">2: SELECT * FROM moja_tabela3: </sql:query>4: <c:forEach var="naziv_polja" items="${upit1.columnNames}">5: <th><c:out value="${naziv_polja}"/></th>6: </c:forEach>7: <c:forEach var="red" items="${upit1.rows}">8: <tr>9: <c:forEach var="kolona" items="${red}">10: <td><c:out value="${kolona.value}"/></td>11: </c:forEach>12: </tr>13: </c:forEach>
25
Posebno dizajnirani tag-ovi za pristupanje BP iz prezentacionog sloja
Pristupa BP - Prezentacioni sloj -
1: mysql_connect(“localhost",$username,$password);2: @mysql_select_db("biblioteka") or die( "Nema konekcije sa BP");3: $result = mysql_query("SELECT * FROM knjige");4: $num = mysql_numrows($result);5: mysql_close();6: $i=0;7: while ($i < $num) {8: $naslov = mysql_result($result,$i,"naslov");9: $autor = mysql_result($result,$i,"autor");10: $i++;11: }
26
Pristupanje BP iz PHP stranice
Najčešće korišćen pristup kod višeslojnih aplikacija
Entiteti (klase ili moduli) zaduženi za komunikciju sa BP
Uslužne klase koje omogućavaju interakciju sa BP
CDatabase, CRecordset klase iz Microsoft (MFC)
ResultSet, Connection klase u Java-inom paketu java.sql.*
27
Pristup BP - sloj poslovne logike -
28
Pristup BP - sloj poslovne logike -
29
Pristup BP - sloj poslovne logike -
C++ kod koji preuzima nazive proizvoda iz tabele u BPi dodaje ih u listu proizvoda u korisničkom interfejsu
30
Pristup BP - sloj poslovne logike -
Java kod koji u tabelu t_mtutor_groups u BPdodaje novi zapis (novi naziv grupe)
Pristup BP - sloj podataka -
Izmeštanje SQL naredbi iz izvornog koda aplikacije u SUBP
31
Pristup BP - sloj podataka -
Ugnježdene procedure (stored procedures)◦ Skupovi instrukcija koje se često koriste◦ Njihovom upotrebom programeri se
oslobađaju višestrukih pozivanja istih komandi◦ Najbrže se izvršavaju jer se proces prevođenja
instrukcija vrši na SQL serveru◦ Procedure se nalaze na jednom mestu, a ne
na više mesta u aplikacijama (npr. na front-end kraju – prezentacioni sloj), pa je njihova izmena i ažuriranje mnogo lakše
32
Pristup BP - sloj podataka -
Ugnježdene procedure (stored procedures)◦ Kada se izvrši procedura, samo rezultat obrade se
šalje ka sledećem sloju Najmanje opterećenje mreže, poboljšanje performansi
◦ Procedurama se mogu prosleđivati parametri i promenljive
◦ Procedure se mogu pozivati i iz drugih procedura Najčešće se pišu u nekom od proširenja jezika SQL
koje definiše proizvođač konkretnog DBMS ◦ Oracle – PL/SQL ◦ Microsoft SQL Server – Tansact-SQL
33
Pristup BP - sloj podataka -
Preduslov - SUBP mora da poseduje mogućnosti kreiranja procedura
SQL naredbe se ugnježdavaju kao procedure (stored procedure) u ciljnu BP
1: CREATE PROCEDURE `spUsedTestSets`(IN u_id INTEGER(11))2: BEGIN3: SELECT * FROM `t_mtutor_used_test_sets` WHERE ( user_id = u_id );4: END;
34
Pristup BP - sloj podataka -
Poziv ugnježdenih procedura
1: cs = conn.prepareCall("{call spUsedTestSets(?)}");2: cs.setInt("user_id", u_id);3: rs = cs.executeQuery();4: while( rs.next() ){5: int test_id = rs.getInt("test_set_id");6: Date test_dat = rs.getDate("date");7: }
35
Pristup BP - sloj podataka -
Trigeri, okidači (triggers)◦ Programska procedura u okviru SUBP, koja se
aktivira određenim događajem: upis novog zapisa u tabelu brisanje određenog zapisa modifikacija postojećeg zapisa
Triger predstavlja jedan od mehanizama za proveru uslova integriteta baze podataka◦ Npr. Pre upisa u tabelu dobavljač-artikal
proveriti da li dobavljač dobavlja dati proizvod36
Pristup BP - sloj podataka -
Trigeri, okidači (triggers)◦ Triger pokreće određenu aktivnost nad bazom,
uvek kada se desi jedan od navedenih događaja
◦ Tačnije rečeno, SUBP inicira izvršenje okidača, odmah po nastajanju događaja
◦ Rad okidača je van kontrole aplikativnog programa koji je vezan na SUBP, a obavezno se izvršava
37
Pristup BP - sloj podataka -
Trigeri, okidači (triggers)◦ Sintaksa trigera je sledeća:
Tip može biti: BEFORE, AFTER i INSTEAD OF
◦ CREATE [OR REPLACE] TRIGGER /naziv_trigera/ /tip trigera/ ON /naziv tabele/ BEGIN /izvrsne_instrukcije_trigera/ END
38
Pristup BP - sloj podataka -
Trigeri, okidači (triggers)◦ Oracle ima trigere koji se aktiviraju i kada se
menja šema RBP ◦ Schema-level triggers
After Creation Before Alter After Alter Before Drop After Drop Before Logoff After Logon
39
Razmena podataka između BP i aplikacija- ODBC -
Pre kreiranja aplikacije potrebno je izvršiti registrovanje BP kojoj se pristupa posredstvom ODBC drajvera.
Registracija je obavezna bez obzira na tip BP
U Windows-ovom kontrol-panelu se bira ikonica ODBC, pri čemu se otvara administatorski dijalog prozor
40
Razmena podataka između BP i aplikacija- ODBC -
41
Dodavanje novogODBC veznika
Razmena podataka između BP i aplikacija- ODBC -
42
Izbor ODBC drajvera
Razmena podataka između BP i aplikacija- ODBC -
43
Zadavanje imenaODBC izvora podataka
Izbor BP
Razmena podataka između BP i aplikacija- ODBC -
44
Izbor BP
Razmena podataka između BP i aplikacija- ODBC -
Dalje se kreiraju brokerske klase koje koriste ODBC preko datog naziva, da bi uspostavile interakciju sa podacima u BP
45
Naziv ODBC-a
Naziv tabele
Povezivanje polja u tabeli sapodacima u brokerskoj klasi
Razmena podataka između BP i aplikacija
JDBC (Java DB Connectivity)
46
Razmena podataka između BP i aplikacija- JDBC -
Posredstvom JDBC-a je moguće dobiti informacije o:◦ strukturi baze podataka i njenih tabela
Posredstvom klase DatabaseMetaData je moguće dobiti informacije o strukturi baze
47
Razmena podataka između BP i aplikacija- JDBC -
Moguće je dobiti detaljne informacije o:◦ tabelama, ◦ ograničenjima, ◦ uskladištenim procedurama, ◦ user-ima, ◦ JDBC drajveru pomoću kojega je
uspostavljena konekcija...
48
Razmena podataka između BP i aplikacija- JDBC -
Klasa ResultSetMetaData može da posluži kao izvor detaljnih informacija o:◦ broju kolona, ◦ nazivu svake od njih, ◦ tipu, ◦ dužini polja...
49
Razmena podataka između BP i aplikacija- JDBC -
Ova klasa takođe poseduje veliki broj metoda od kojih su najvažnije:◦ int getColumnCount() – vraća broj kolona◦ String getColumnLabel(int i) – vraća naziv i-
te kolone◦ int getColumnType(int i) – vraća tip i-te
kolone
50