Mechanizmy RMI i JDBC w dostępie do baz danych

Podobne dokumenty
Mechanizmy RMI i JDBC w dostępie do baz danych (Michał Grochala: Java aplikacje bazodanowe, Helion, 2001)

Protokół JDBC współpraca z relacyjnymi bazami danych

Połączenia między bazami danych i programem w języku Java część 2

Protokół JDBC współpraca z relacyjnymi bazami danych lab4. Dr inż. Zofia Kruczkiewicz Programowanie aplikacji internetowych

Aplikacje RMI. Budowa aplikacji rozproszonych. Część 2.

sieć 4) Mechanizm RMI jest zazwyczaj wykorzystywany w rozwiązaniach typu klient-serwer.

Protokół JDBC współpraca z relacyjnymi bazami danych lab3

Podejście obiektowe do budowy systemów rozproszonych

Remote Method Invocation 17 listopada 2010

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

Aplikacje RMI

Remote Method Invocation 17 listopada rozproszonych. Dariusz Wawrzyniak (IIPP) 1

STRUMIENIE DANYCH, SERIALIZACJA OBIEKTÓW

Wywoływanie metod zdalnych

Wywoływanie metod zdalnych

Podejście obiektowe do budowy systemów rozproszonych

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

Zdalne wywołanie metod - koncepcja. Oprogramowanie systemów równoległych i rozproszonych Wykład 7. Rodzaje obiektów. Odniesienie do obiektu

Aplikacje RMI Lab4

Oprogramowanie systemów równoległych i rozproszonych Wykład 7

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

Programowanie w języku Java. Bazy danych SQLite w Javie

Systemy Rozproszone - Ćwiczenie 6

Programowanie w języku Java

Aplikacja wielowątkowa prosty komunikator

Iteracyjno-rozwojowy cykl oprogramowania 4

Java programowanie w sieci. java.net RMI

Java Zadanie 1. Aby poprawnie uruchomić aplikację desktopową, należy zaimplementować główną metodę zapewniającą punkt wejścia do programu.

Autor: Zofia Kruczkiewicz, Programowanie w Internecie, JDBC, część 1 1

Bezpieczne uruchamianie apletów wg

Programowanie rozproszone w języku Java

Obiekty sieciowe - gniazda Komputery w sieci Internet komunikują się ze sobą poprzez:

STRUMIENIE TEKSTOWE WEJŚCIOWE WPROWADZANIE DANYCH STRUMIENIE BAJTOWE, STRUMIENIE TEKSTOWE

1. Czynności przygotowujące aplikację działającą na platformie Java SE Biblioteka5 (należy ją pobrać z załącznika z p.1)

Programowanie obiektowe

Wykorzystywanie parsera DOM w programach Java i PL/SQL

Aplikacja wielow tkowa prosty komunikator

Tworzenie i wykorzystanie usług

Programowanie obiektowe

Wykład 2. Strumienie tekstowe (wprowadzanie danych z klawiatury) i bajtowe, otwieranie strumieni poprzez sieć - obiekty URL

Aplikacje bazodanowe. dr inż. Arkadiusz Mirakowski

1. Co można powiedzieć o poniższym kodzie?

RMI-2. Java Remote Method Invocation (RMI) na podstawie m.in. podręcznika firmy Sun Microsystems SYSTEMY ROZPROSZONE

Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().

Wykład 4_2 część druga. Iteracyjno-rozwojowy cykl oprogramowania 4

Algorytmy z powrotami. Algorytm minimax

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1)

Zaawansowane aplikacje WWW - laboratorium

Remote Method Invocation

Wprowadzenie do technologii JavaServer Faces 2.1 na podstawie

Java, bazy danych i SSL

Interfejsy w Javie. Przykład zastosowania interfejsów:

Komponenty sterowane komunikatami

Stanowe komponenty sesyjne

Programowanie obiektowe

Języki i metody programowania Java INF302W Wykład 2 (część 1)

Wykład 7: Pakiety i Interfejsy

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Systemy rozproszone. Dr inż. L. Miękina. Department of Robotics and Mechatronics AGH University of Science and Technology 1/1

Wprowadzenie do technologii JavaServer Faces 2.1 na podstawie

Java: interfejsy i klasy wewnętrzne

JAVA I BAZY DANYCH. MATERIAŁY:

Podejście obiektowe. Tablice (1) obiektów

Strumienie tekstowe (wprowadzanie danych z klawiatury) i bajtowe, otwieranie strumieni przez sieć - obiekty URL

Łączenie z bazą danych przykładowa klasa infpolaczenie import java.sql.drivermanager; import java.sql.connection; import java.sql.

Bazy danych SQLite w Javie

JAVA I SIECI. MATERIAŁY:

Wykład 12. Programowanie serwera MS SQL 2005 w C#

1. Co można powiedzieć o poniższym kodzie (zakładając, że znajduje się on w jednym pliku A.java)?

Wieloplatformowe aplikacje sieciowe. dr inż. Juliusz Mikoda mgr inż. Anna Wawszczak

1. Co można powiedzieć o poniższym kodzie (zakładając, że zaimportowano wszystkie niezbędne klasy)?

Wykład 7 Tworzenie łącz w apletach, wątki, serializacja obiektów, gniazda

Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 1

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski. Zaawansowane Systemy Decyzyjne. Laboratorium

Instrukcja tworzenia aplikacji EE na bazie aplikacji prezentowanej na zajęciach lab.4 z PIO umożliwiająca przez sieć dostęp wielu użytkownikom.

Programy typu klient serwer. Programowanie w środowisku rozproszonym. Wykład 5.

SWING c.d. przydatne narzędzia: JFileChooser, JOptionPane. drag'n drop, menu kontekstowe.

Bezstanowe komponenty sesyjne i zdarzenia zwrotne

Bartosz Jachnik - Kino

1. Co można powiedzieć o poniższym kodzie? public class A { void m(int a) { } int m(string s) { return Integer.parseInt(s); }

Plan wykładu CORBA. Cechy aplikacji rozproszonych. Aplikacje rozproszone

Aplikacje internetowe i rozproszone - laboratorium

Podejście obiektowe. Tablice obiektów Przykład 1 metody i atrybuty statyczne oraz niestatyczne

Java Database Connectivity

1. Co można powiedzieć o poniższym kodzie? public interface I { void m1() {}; static public void m2() {}; void abstract m3();

Diagram stanów Laboratorium 9

Podstawy i języki programowania

Metody dostępu do danych

Wykład 2: Podstawy Języka

Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Programowanie obiektowe

KLASY, INTERFEJSY, ITP

public - może być używana w kodzie poza klasą, jedna klasa ModyfikatorKlasy może być kombinacją wyrażeń:

Dokumentacja do API Javy.

JDBC (Java Database Connectivity vit )

Instrukcja 10 Laboratorium 13 Testy akceptacyjne z wykorzystaniem narzędzia FitNesse

Laboratorium 8 Diagramy aktywności

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Transkrypt:

Mechanizmy RMI i JDBC w dostępie do baz danych Klient Aplikacja - Baza Tytul, Ksiazka, Ksiazka_Tytul, WeWy Warstwa pośrednia PolaczenieImpl_stub.class SesjaImpl_stub.class Warstwa odwołań zdalnych Warstwa transportowa sieć Serwer Aplikacja - Serwer PolaczenieImpl obiekt zdalny SesjaImpl obiekt zdalny Operacje_na_bazie - obiekt realizujący operacje na bazie danych Manager_operacji_na_bazie obiekt zarządzający ooperacjami na bazie danych Warstwa szkieletowa PolaczenieImpl_skel.class SesjaImpl_skel.class Warstwa odwołań zdalnych Warstwa transportowa Zofia Kruczkiewicz, I-6, p325 C3 1 Algorytmy i struktury danych, Ćwiczenie 3

Pliki źródłowe aplikacji Klasa warstwy klienta Baza - interfejs użytkownika Klasy warstwy danych przesyłanych między warstwą pośrednią a warstwą klienta Tytul, Ksiazka, Ksiazka_Tytul - obiekty reprezentujące krotki w tabelach bazy danych, oraz do We/Wy - operacje We) Interfejsy RMI warstwa pośrednia Polaczenie - interfejs zamykający i otwierający dostęp do bazy danych zwraca referencję do interfejsu typu Sesja Sesja - interfejs realizujący zdalnie wywoływane operacje na bazie danych Obiekty zdalne RMI obiekty implementujące interfejsy RMI PolaczenieImpl SesjaImpl Klasy warstwy pośredniej Manager_operacji_na_bazieklasa odpowiedzialna za otwieranie i zamykanie połączeń z bazą danych; udostępnia referencje do obiektu typu Operacje_na_bazie Operacje_na_bazie 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 Zofia Kruczkiewicz, I-6, p325 C3 2 Algorytmy i struktury danych, Ćwiczenie 3

package przyklad.klient; import java.io.*; import java.util.*; import przyklad.obiekty.*; import przyklad.*; public class Baza { String data, sql; Polaczenie polaczenie = null; Sesja sesja = null; String uzytkownik=""; 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(); Tytul podaj_tytul()throws Exception { 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: "); Zofia Kruczkiewicz, I-6, p325 C3 3 Algorytmy i struktury danych, Ćwiczenie 3

switch(opcja) { case 1 : System.out.println("Tytuly"); Tytul t[]=sesja.wyswietl_tytuly(); drukuj_tytuly(t); case 2 : System.out.println("Ksiazki"); Ksiazka_Tytul kt[]=sesja.wyswietl_ksiazki(); drukuj_ksiazki(kt); case 3 : String autor = WeWy.weString("Podaj autora: "); Ksiazka_Tytul kt_[]= sesja.wyszukaj(autor); drukuj_ksiazki(kt_); break; break; break; case 4 : sesja.dodaj_tytuly(podaj_tytul()); break; case 5 : sesja.dodaj_ksiazki(podaj_ksiazke()); break; case -1: System.out.println("Koniec programu"); break; default: System.out.println("Zla opcja"); while(opcja!=-1); void glowna() { System.setSecurityManager(new RMISecurityManager()); try { polaczenie = (Polaczenie)Naming.lookup("Przyklad_polaczenie"); sesja= polaczenie.polacz("",""); //polaczenie, sesja obiekty zdalne if (polaczenie!=null ) { System.out.println("Jest polaczenie"); if ( sesja!=null) { System.out.println("Jest sesja"); operacje_na_bazie(); catch(exception e) { System.out.println("Blad bazy "+e); polaczenie=null; sesja=null; try { polaczenie.rozlacz(uzytkownik); //koniec połączenia z baza danych catch(exception e) { System.out.println(e.getMessage()); finally { polaczenie =null; sesja=null; static public void main(string arg[]) { Baza baza = new Baza(); baza.glowna(); Zofia Kruczkiewicz, I-6, p325 C3 4 Algorytmy i struktury danych, Ćwiczenie 3

Obiekty pośredniczące między warstwa klienta i warstwą obiektów zdalnych package przyklad.obiekty; import java.io.*; import java.util.*; 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() throws Exception { 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'); ******************************************************************** public class Ksiazka implements Serializable { public int numer; public String tytul; public Ksiazka(int _numer) {numer=_numer; public Ksiazka( ) { public void wstaw_ksiazke() { numer = WeWy.weInteger("Podaj numer ksiazki: "); tytul = WeWy.weString("Podaj tytul ksiazki: "); public void drukuj() {System.out.println(numer+'\t'+tytul+'\t'); Zofia Kruczkiewicz, I-6, p325 C3 5 Algorytmy i struktury danych, Ćwiczenie 3

package przyklad.obiekty; import java.io.*; import java.util.*; 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 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; Zofia Kruczkiewicz, I-6, p325 C3 6 Algorytmy i struktury danych, Ćwiczenie 3

package przyklad; import przyklad.obiekty.*; Interfejsy i obiekty RMI public interface Sesja extends Remote //interfejs RMI { 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.server.*; import przyklad.serwer.operacje.*; import przyklad.klient.*; import przyklad.obiekty.*; class SesjaImpl extends UnicastRemoteObject implements Sesja { protected Manager_operacji_na_bazie manager_operacji_na_bazie = null; public SesjaImpl(String dburl) throws RemoteException {manager_operacji_na_bazie = new Manager_operacji_na_bazie(dbUrl); public boolean otworz_baze_danych (String uzytkownik, String haslo) {return manager_operacji_na_bazie.otwarcie_polaczenia(uzytkownik, haslo); public void zamknij_baze_danych() {manager_operacji_na_bazie.zamkniecie_polaczenia(); public Tytul[] wyswietl_tytuly() throws RemoteException { try {return manager_operacji_na_bazie.podaj_operacje_na_bazie().wyswietl_tytuly(); catch(exception e) { return null; Zofia Kruczkiewicz, I-6, p325 C3 7 Algorytmy i struktury danych, Ćwiczenie 3

public Ksiazka_Tytul[] wyswietl_ksiazki() throws RemoteException {try {return manager_operacji_na_bazie.podaj_operacje_na_bazie().wyswietl_ksiazki(); catch(exception e) { return null; public void dodaj_tytuly(tytul t) throws RemoteException {try { manager_operacji_na_bazie.podaj_operacje_na_bazie().wstaw_tytul(t); catch(exception e) { public void dodaj_ksiazki(ksiazka k) throws RemoteException {try {manager_operacji_na_bazie.podaj_operacje_na_bazie().wstaw_ksiazke(k); catch(exception e) { public Ksiazka_Tytul[] wyszukaj(string a) throws RemoteException {try {return manager_operacji_na_bazie.podaj_operacje_na_bazie().wyszukaj(a); catch(exception e) { return null; ******************************************************************** package przyklad; public interface Polaczenie extends Remote { public Sesja polacz(string uzytkownik, String haslo) throws RemoteException; public void rozlacz (String uzytkownik) throws RemoteException; ******************************************************************** package przyklad; import java.rmi.server.*; import java.util.*; import java.net.*; import przyklad.serwer.operacje.*; Zofia Kruczkiewicz, I-6, p325 C3 8 Algorytmy i struktury danych, Ćwiczenie 3

public class PolaczenieImpl extends UnicastRemoteObject implements Polaczenie { Properties properties = null; public PolaczenieImpl() throws RemoteException {properties = new Properties(); public synchronized Sesja polacz (String uzytkownik, String haslo) throws RemoteException { if (properties.containskey(uzytkownik)) { System.out.println("user"); return (SesjaImpl) properties.get(uzytkownik); else { SesjaImpl sesja=new SesjaImpl("jdbc:odbc:katalog"); if (sesja.otworz_baze_danych(uzytkownik,haslo)) {try { Naming.rebind("Przyklad"+uzytkownik,sesja); properties.put(uzytkownik,sesja); System.out.println("Po otwarciu bazy danych"); return sesja; catch(malformedurlexception e) { System.out.println(e.getMessage()); return null; else { return null; public synchronized void rozlacz (String uzytkownik) throws RemoteException { SesjaImpl sesja=(sesjaimpl)properties.get(uzytkownik); if (null!= sesja) { sesja.zamknij_baze_danych (); properties.remove(uzytkownik); try { Naming.unbind("Przyklad"+uzytkownik); catch(exception e) { System.out.println(e); Zofia Kruczkiewicz, I-6, p325 C3 9 Algorytmy i struktury danych, Ćwiczenie 3

******************************************************************** package przyklad.serwer; import przyklad.*; public class Serwer { public Serwer() { public void prepareinterface() { try { PolaczenieImpl polaczenie= new PolaczenieImpl(); Naming.rebind("Przyklad_c",polaczenie); System.out.println("Interface gotowy..."); catch (Exception e) {System.out.println(e); public static void main(string[] args) { Serwer serwer = new Serwer(); System.setSecurityManager(new RMISecurityManager()); serwer.prepareinterface(); Zofia Kruczkiewicz, I-6, p325 C3 10 Algorytmy i struktury danych, Ćwiczenie 3

******************************************************************** package przyklad.serwer.operacje; import przyklad.obiekty.*; import java.sql.*; import java.util.*; import java.io.*; public class Operacje_na_bazie { private Connection connection = null; public Operacje_na_bazie(Connection _connection) { connection = _connection; public Tytul[] wyswietl_tytuly() throws Exception { Statement polecenie= connection.createstatement(); String sql="select * FROM Tytul ORDER BY tytul;"; ResultSet krotka= polecenie.executequery(sql); Vector <Tytul>vector= new Vector<Tytul> (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 = connection.createstatement(); String sql="select * FROM Tytul, Ksiazka WHERE id_tytul=id_tytul_ " +" ORDER BY tytul;"; ResultSet krotka = polecenie.executequery(sql); Vector <Ksiazka>vector=new Vector<Ksiazka> (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; Zofia Kruczkiewicz, I-6, p325 C3 11 Algorytmy i struktury danych, Ćwiczenie 3

public Ksiazka_Tytul[] wyszukaj(string autor) throws Exception { Statement polecenie = connection.createstatement(); String sql="select * FROM Tytul, Ksiazka WHERE id_tytul=id_tytul_"+ " AND autor = '" + autor +"' ORDER BY tytul;"; ResultSet krotka = polecenie.executequery(sql); Vector <Ksiazka_Tytul>vector = new Vector<Ksiazka_Tytul> (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 { connection.setautocommit(false); try { Statement polecenie = connection.createstatement(); String sql="insert INTO Tytul (tytul, autor, ISBN)"+ " VALUES ('"+t.tytul+"','"+ t.autor+"','"+ t.isbn+"')"; polecenie.addbatch(sql); polecenie.executebatch(); connection.commit(); catch(batchupdateexception e) { System.out.println("Wycofanie transakcji"); connection.rollback(); public void wstaw_ksiazke(ksiazka k) throws Exception { connection.setautocommit(false); try { Statement polecenie = connection.createstatement(); String sql="select * FROM Tytul WHERE tytul= '"+k.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(); connection.commit(); catch(batchupdateexception e) { System.out.println("Wycofanie transakcji"); connection.rollback(); Zofia Kruczkiewicz, I-6, p325 C3 12 Algorytmy i struktury danych, Ćwiczenie 3

package przyklad.serwer.operacje; import java.sql.*; import java.util.*; import java.io.*; public class Manager_operacji_na_bazie { protected Connection connection = null; protected String _dburl = null; protected Operacje_na_bazie operacje_na_bazie = null; public Manager_operacji_na_bazie(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 Manager_operacji_na_bazie(String dburl) { this(null, dburl); public boolean otwarcie_polaczenia(string uzytkownik, String haslo) {try { connection=drivermanager.getconnection(_dburl, uzytkownik, haslo); connection.setautocommit(false); operacje_na_bazie = new Operacje_na_bazie (connection); catch(exception e) { connection = null; operacje_na_bazie = null; return false; return true; public void zamkniecie_polaczenia() { if( null!= connection) { try { connection.close(); catch (SQLException e) { finally { connection = null; operacje_na_bazie = null; public Operacje_na_bazie podaj_operacje_na_bazie() { return operacje_na_bazie; Zofia Kruczkiewicz, I-6, p325 C3 13 Algorytmy i struktury danych, Ćwiczenie 3

Pliki wsadowe uruchomienie na lokalnym komputerze 1) Utworzenie warstw pośredniczących RMI (przykład.sesjaimpl oraz przykład.polaczenieimpl) oraz uruchomienie programu rmiregistry 2) Uruchomienie serwera wraz\z obiektami zdalnymi 3) Uruchomienie klienta obiektów zdalnych 4) Zawartość pliku z uprawnieniami aplikacji RMI dla serwera i klienta Zofia Kruczkiewicz, I-6, p325 C3 14 Algorytmy i struktury danych, Ćwiczenie 3

5) Działanie programu klienta Zofia Kruczkiewicz, I-6, p325 C3 15 Algorytmy i struktury danych, Ćwiczenie 3

6) Działanie programu serwera Zofia Kruczkiewicz, I-6, p325 C3 16 Algorytmy i struktury danych, Ćwiczenie 3