• Nie Znaleziono Wyników

Wykład 3Mechanizmy RMI i JDBC w dostępie do baz danych

N/A
N/A
Protected

Academic year: 2021

Share "Wykład 3Mechanizmy RMI i JDBC w dostępie do baz danych"

Copied!
1
0
0

Pełen tekst

(1)

Wykład 3

Mechanizmy RMI i JDBC w dostępie do baz danych

Aplikacja - baza

Tytul, Ksiazka, Ksiazka_Tytul, WeWy

ObjectProcessor SQLProcessor2 Warstwa pośrednia ConnectionImpl_stub.class

SessionImpl_stub.class Warstwa odwołań zdalnych

Warstwa transportowa

Aplikacja - server

Warstwa szkieletowa ConnectionImpl_skel.class

SessionImpl_skel.class Warstwa odwołań zdalnych

Warstwa transportowa sieć

Klient Serwer

Pliki żródłowe aplikacji

(2)

Zofia Kruczkiewicz, I-6, p325 C3 Internetowe bazy danych, Wykład 32

Interfejsy RMI

Connection - interfejs zamykający i otwierający dostęp do bazy danych zwraca referencję do interfejsu typu Session

Session - interfejs będący odwołaniem do obiektu RMI

warstwy pośredniej, operującego na bazie danych

Klasa warstwy klienta- interfejs użytkownika

Klasy warstwy danych

przesyłanych między warstwą pośrednią a warstwą klienta

obiekty reprezentujące poszczególne struktury w b służą do operacji We/Wy (WeWy)

Klasy warstwy pośredniej SQLProcessor2-

klasa odpowiedzialna za otwieranie i zamykanie połączeń z bazą

danych; udostępnia referencje do obiektu typu ObjectPropcessor ObjectProcessor –

klasa odpowiedzialna za zapis do bazy i odczyt z bazy danych

potrzebnych do tworzenia obiektów z warstwy obiektów; zawiera

wywołanie preinterpretowanych zapytań do bazy danych

Klasa serwera warstwy pośredniej

(3)

package przyklad.klient;

import java.io.*;

import java.util.*;

import java.rmi.*;

import przyklad.obiekty.*;

import przyklad.*;

public class baza { String data, sql;

Connection _connection = null;

Session _session = null;

String _user="";

void glowna()

{ System.setSecurityManager(new RMISecurityManager());

try

{ _connection= (Connection)Naming.lookup("Przyklad_connection");

_session= _connection.connect("","");

if (_connection!=null )

{ System.out.println("Jest polaczenie");

if ( _session!=null)

{ System.out.println("Jest sesja");

operacje_na_bazie(); } }

} catch(Exception e)

{ System.out.println("Blad bazy "+e);

_connection=null;

_session=null;}

try

{ _connection.disconnect(_user);

} catch(Exception e)

{ System.out.println(e.getMessage()); } finally

{ _connection=null;

_session=null; } }

void drukuj_tytuly(Tytul t[]) { int ile=t.length;

for (int i=0;i<ile;i++) t[i].drukuj(); } void drukuj_ksiazki(Ksiazka_Tytul t[])

{ int ile=t.length;

for (int i=0;i<ile;i++) t[i].drukuj(); }

Klasa warstwy pośredniej

(4)

Tytul podaj_tytul()

{ Tytul t = new Tytul();

t.wstaw_tytul();

return t; }

Ksiazka podaj_ksiazke()

{ Ksiazka k = new Ksiazka();

k.wstaw_ksiazke();

return k; }

void operacje_na_bazie() throws Exception { int opcja;

do

{ System.out.println("\n"+"1 - wyswietl tytuly");

System.out.println("2 - wyswietl ksiazki");

System.out.println("3 - wyszukaj ksiazki danego autora");

System.out.println("4 - wstaw tytul");

System.out.println("5 - wstaw ksiazke");

System.out.println("-1 - koniec programu");

opcja = WeWy.weInteger("Podaj opcje: ");

switch(opcja)

{ case 1 : System.out.println("Tytuly");

Tytul t[]=_session.wyswietl_tytuly();

drukuj_tytuly(t); break;

case 2 : System.out.println("Ksiazki");

Ksiazka_Tytul kt[]=_session.wyswietl_ksiazki();

drukuj_ksiazki(kt); break;

case 3 : String autor = WeWy.weString("Podaj autora: ");

Ksiazka_Tytul kt_[]=_session.wyszukaj(autor);

drukuj_ksiazki(kt_); break;

case 4 : _session.dodaj_tytuly(podaj_tytul()); break;

case 5 : _session.dodaj_ksiazki(podaj_ksiazke()); break;

case -1: System.out.println("Koniec programu"); break;

default: System.out.println("Zla opcja");

}

}while(opcja!=-1);

}

static public void main(String arg[]) { baza baza = new baza();

baza.glowna();

} }

(5)

package przyklad.obiekty;

import java.io.*;

import java.util.*;

import java.rmi.*;

import przyklad.*;

public class Tytul implements Serializable { public String tytul,autor;

public int ISBN;

public Tytul(String _tytul, String _autor, int _ISBN) { tytul=_tytul;

autor=_autor;

ISBN=_ISBN;}

public Tytul( ) { }

public void wstaw_tytul()

{ tytul = WeWy.weString("Podaj tytul: ");

autor = WeWy.weString("Podaj autora: ");

ISBN = WeWy.weInteger("Podaj ISBN: "); }

public void drukuj()

{ System.out.println(tytul+'\t'+autor+'\t'+ISBN+'\t'); } }

********************************************************************

package przyklad.obiekty;

import java.io.*;

import java.util.*;

import java.rmi.*;

import przyklad.*;

public class Ksiazka implements Serializable { public int numer;

public Ksiazka(int _numer) { numer=_numer;}

public Ksiazka( ) { }

public void wstaw_ksiazke()

{ numer = WeWy.weInteger("Podaj numer ksiazki: "); }

public void drukuj()

{ System.out.println(numer+'\t'); } }

(6)

package przyklad.obiekty;

import java.io.*;

import java.util.*;

import java.rmi.*;

import przyklad.*;

public class Ksiazka_Tytul extends Tytul implements Serializable { public int numer;

public Ksiazka_Tytul(String _tytul, String _autor, int _ISBN, int _numer) { super(_tytul,_autor,_ISBN);

numer=_numer; }

public void drukuj()

{ System.out.print(numer+" "+'\t');

super.drukuj(); } }

********************************************************************

package przyklad.obiekty;

import java.io.*;

import java.util.*;

import java.rmi.*;

import przyklad.*;

public class WeWy

{ public static String weString(String menu)

{ InputStreamReader wejscie = new InputStreamReader( System.in );

BufferedReader bufor = new BufferedReader( wejscie );

try

{ System.out.print(menu);

return bufor.readLine();

}catch (IOException e)

{ System.err.println("Blad IO String");

return ""; } }

public static byte weInteger(String menu)

{ InputStreamReader wejscie = new InputStreamReader( System.in );

BufferedReader bufor = new BufferedReader( wejscie );

StringTokenizer zeton;

try

{ System.out.print(menu);

zeton = new StringTokenizer(bufor.readLine());

return Byte.parseByte(zeton.nextToken());

} catch (Exception e)

{ System.err.println("Blad Integer "+e);

return 0; } } }

(7)

package przyklad;

import java.rmi.*;

import przyklad.obiekty.*;

public interface Session extends Remote

{public Tytul[] wyswietl_tytuly() throws RemoteException;

public Ksiazka_Tytul[] wyswietl_ksiazki() throws RemoteException;

public void dodaj_tytuly(Tytul t) throws RemoteException;

public void dodaj_ksiazki(Ksiazka k) throws RemoteException;

public Ksiazka_Tytul[] wyszukaj(String a) throws RemoteException;

}

********************************************************************

package przyklad;

import java.rmi.*;

import java.rmi.server.*;

import przyklad.server.processors.*;

import przyklad.klient.*;

import przyklad.obiekty.*;

class SessionImpl extends UnicastRemoteObject implements Session { protected SQLProcessor2 processor = null;

public SessionImpl(String dbUrl) throws RemoteException { processor = new SQLProcessor2(dbUrl);}

public boolean openDatabase (String user, String password) { return processor.openConnection(user, password);}

public void closeDatabase() { processor.closeConnection();}

public Tytul[] wyswietl_tytuly() throws RemoteException { try

{ return processor.getObjectProcessor().wyswietl_tytuly();

} catch(Exception e) {}

return null;}

public Ksiazka_Tytul[] wyswietl_ksiazki() throws RemoteException { try

{ return processor.getObjectProcessor().wyswietl_ksiazki();

}catch(Exception e) {}

return null;

}

(8)

public void dodaj_tytuly(Tytul t) throws RemoteException { try

{ processor.getObjectProcessor().wstaw_tytul(t);

} catch(Exception e) {} }

public void dodaj_ksiazki(Ksiazka k) throws RemoteException { try

{ processor.getObjectProcessor().wstaw_ksiazke(k);

}catch(Exception e) {} }

public Ksiazka_Tytul[] wyszukaj(String a) throws RemoteException { try

{ return processor.getObjectProcessor().wyszukaj(a);

} catch(Exception e) {}

return null; } }

********************************************************************

package przyklad;

import java.rmi.*;

public interface Connection extends Remote

{ public Session connect(String user, String Password) throws RemoteException;

public void disconnect (String user) throws RemoteException;

}

********************************************************************

package przyklad;

import java.rmi.*;

import java.rmi.server.*;

import java.util.*;

import java.net.*;

import przyklad.server.processors.*;

public class ConnectionImpl extends UnicastRemoteObject implements Connection

{ Properties properties = null;

public ConnectionImpl() throws RemoteException { properties = new Properties(); }

public synchronized Session connect (String user, String password)

throws RemoteException { if (properties.containsKey(user))

{ System.out.println("user");

return (SessionImpl) properties.get(user); }

(9)

else

{ SessionImpl session=new SessionImpl("jdbc:odbc:katalog");

if (session.openDatabase(user,password)) { try

{ Naming.rebind("Przyklad"+user,session);

properties.put(user, session);

System.out.println("Po otwarciu bazy danych");

return session;

} catch(MalformedURLException e) { System.out.println(e.getMessage());

return null;}

}

else { return null; } }

}

public synchronized void disconnect (String user) throws RemoteException { SessionImpl session=(SessionImpl)properties.get(user);

if (null != session)

{ session.closeDatabase();

properties.remove(user);

try

{ Naming.unbind("Przyklad"+user);

} catch(Exception e)

{ System.out.println(e);}

}

else {}

} }

********************************************************************

package przyklad.server;

import java.rmi.*;

import przyklad.*;

public class server { public server() {}

public void prepareInterface() { try

{ ConnectionImpl connection= new ConnectionImpl();

Naming.rebind("Przyklad_connection",connection);

System.out.println("Interface gotowy...");

} catch (Exception e)

{ System.out.println(e);}

}

public static void main(String[] args) { server _server = new server();

System.setSecurityManager(new RMISecurityManager());

_server.prepareInterface(); }}

(10)

package przyklad.server.processors;

import przyklad.obiekty.*;

import java.sql.*;

import java.util.*;

import java.io.*;

public class ObjectProcessor

{ private Connection polaczenie = null;

public ObjectProcessor(Connection connection) { polaczenie = connection;}

public Tytul[] wyswietl_tytuly() throws Exception { Statement polecenie= polaczenie.createStatement();

String sql="SELECT * FROM Tytul ORDER BY tytul;";

ResultSet krotka= polecenie.executeQuery(sql);

Vector vector= new Vector(10,5);

while(krotka.next())

{ Tytul tytul = new Tytul( krotka.getString("tytul"), krotka.getString("autor"), krotka.getInt("ISBN"));

vector.addElement(tytul);

}

vector.trimToSize();

Tytul tytuly[]=new Tytul[vector.size()];

vector.copyInto(tytuly);

polecenie.close();

return tytuly;}

public Ksiazka_Tytul[] wyswietl_ksiazki() throws Exception { Statement polecenie = polaczenie.createStatement();

String sql="SELECT * FROM Tytul, Ksiazka WHERE id_tytul=id_tytul_ "

+" ORDER BY tytul;";

ResultSet krotka = polecenie.executeQuery(sql);

Vector vector=new Vector(10,5);

while(krotka.next())

{ Ksiazka_Tytul ksiazka_tytul=

new Ksiazka_Tytul (krotka.getString("tytul"), krotka.getString("autor"), krotka.getInt("ISBN"), krotka.getInt("numer"));

vector.addElement(ksiazka_tytul);}

vector.trimToSize();

Ksiazka_Tytul ksiazki_tytuly[]=new Ksiazka_Tytul[vector.size()];

vector.copyInto(ksiazki_tytuly);

polecenie.close();

return ksiazki_tytuly;

}

public Ksiazka_Tytul[] wyszukaj(String autor) throws Exception

(11)

{ Statement polecenie = polaczenie.createStatement();

String sql="SELECT * FROM Tytul, Ksiazka WHERE id_tytul=id_tytul_"+

" AND autor = '" + autor +"' ORDER BY tytul;";

ResultSet krotka = polecenie.executeQuery(sql);

Vector vector = new Vector(10,5);

while(krotka.next())

{ Ksiazka_Tytul ksiazka_tytul=

new Ksiazka_Tytul(krotka.getString("tytul"), krotka.getString("autor"), krotka.getInt("ISBN"), krotka.getInt("numer"));

vector.addElement(ksiazka_tytul);

}

vector.trimToSize();

Ksiazka_Tytul ksiazki_tytuly[]=new Ksiazka_Tytul[vector.size()];

vector.copyInto(ksiazki_tytuly);

polecenie.close();

return ksiazki_tytuly;

}

public void wstaw_tytul(Tytul t) throws Exception { polaczenie.setAutoCommit(false);

try

{ Statement polecenie = polaczenie.createStatement();

String sql="INSERT INTO Tytul (tytul, autor, ISBN)"+

" VALUES ('"+t.tytul+"','"+ t.autor+"','"+ t.ISBN+"')";

polecenie.addBatch(sql);

polecenie.executeBatch();

polaczenie.commit();

} catch(BatchUpdateException e)

{ System.out.println("Wycofanie transakcji"); polaczenie.rollback(); } }

public void wstaw_ksiazke(Ksiazka k) throws Exception { polaczenie.setAutoCommit(false);

try

{ Statement polecenie = polaczenie.createStatement();

String tytul=WeWy.weString("Podaj tytul ksiazki: ");

String sql="SELECT * FROM Tytul WHERE tytul= '"+tytul+"';";

ResultSet krotka=polecenie.executeQuery(sql);

if (!krotka.next()) return;

sql="INSERT INTO Ksiazka (numer, id_tytul_)"+

" VALUES ('"+k.numer+"','"+ krotka.getString("id_tytul")+"');";

polecenie.addBatch(sql);

polecenie.executeBatch();

polaczenie.commit();

} catch(BatchUpdateException e)

{ System.out.println("Wycofanie transakcji"); polaczenie.rollback();}}}

package przyklad.server.processors;

(12)

import java.sql.*;

import java.util.*;

import java.io.*;

public class SQLProcessor2

{ protected Connection _connection = null;

protected String _dbUrl = null;

protected ObjectProcessor _objectProcessor = null;

public SQLProcessor2(String drivers, String dbUrl) {_dbUrl = dbUrl;

try

{ String data="jdbc:odbc:katalog";

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

_connection = DriverManager.getConnection(data, "","");

} catch(Exception e) {}}

public SQLProcessor2(String dbUrl) { this(null, dbUrl);}

public boolean openConnection(String user, String password) { try

{_connection= DriverManager.getConnection(_dbUrl, user, password);

_connection.setAutoCommit(false);

_objectProcessor = new ObjectProcessor (_connection);

} catch(Exception e) { _connection = null;

_objectProcessor = null;

return false; } return true;

}

public void closeConnection() { if (null != _connection) { try

{ _connection.close();

} catch (SQLException e) { }

finally

{ _connection = null;

_objectProcessor = null; } }

}

public ObjectProcessor getObjectProcessor() {return _objectProcessor;}

}

Cytaty

Powiązane dokumenty

Projektanci baz danych zajmują się projektowaniem struktury logicznej bazy danych, czyli struktur modelu danych i projektowaniem struktury fizycznej bazy danych, czyli

SPI (ang. Serial Peripheral Interface) jest szybkim dwukierunkowym interfejsem szeregowym, umożliwiającym połączenie układu nadrzędnego (master) z wieloma układami

Wyszukiwanie SELECT Wstawianie INSERT Aktualizacja UPDATE Usuwanie

7 Wykres: kwoty wg dni tygodnia (słupkowy) - wszystkie kryteria 8 Wykres: kwoty wg miesięcy (słupkowy) - wszystkie kryteria 9 Wykres: kwoty srednie wg typu operacji - kryterium daty

[r]

• Ustalenie, kto składa wniosek o udostępnienie informacji publicznej, w sensie formalnym nie ma żadnego znaczenia dla dalszego biegu sprawy. • Nie ma takich

Uzasadniając takie stanowisko, sądy wskazują, że jawność i związany z nią dostęp do informacji publicznej mają wymuszać transparentność, uczciwość oraz

• Państwowe osoby prawne albo osoby prawne samorządu terytorialnego oraz podmioty reprezentujące inne państwowe jednostki organizacyjne albo jednostki organizacyjne