Kurs programowania aplikacji bazodanowych



Podobne dokumenty
Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych

przygotował: Bazy danych Paweł Kasprowski Wersja 2006Z

Informatyka I. Standard JDBC Programowanie aplikacji bazodanowych w języku Java

Informatyka I. Programowanie aplikacji bazodanowych w języku Java. Standard JDBC.

Wzorce logiki dziedziny

Aplikacje Internetowe, Servlety, JSP i JDBC

1 Wprowadzenie do J2EE

Wprowadzenie db4o - podstawy db4o - technikalia Przydatne wiadomości. Wprowadzenie. db4o. Norbert Potocki. 1 czerwca Norbert Potocki db4o

Obsługa transakcji rozproszonych Java. Marek Wojciechowski, Maciej Zakrzewicz Instytut Informatyki, Politechnika Poznańska

Jakarta POI. POIFS obsługa dokumentów OLE 2, HSSF dokumenty w formacie Excel'a, HWPF proste dokumenty w formacie Word 97,

Java: otwórz okienko. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Java Database Connectivity

JAVA I BAZY DANYCH. MATERIAŁY:

Niezbędne serwery aplikacji. Wprowadzenie do technologii JBoss i Apache Tomcat.

Aplikacje internetowe i rozproszone - laboratorium

Java: interfejsy i klasy wewnętrzne

Aplikacje RMI

Laboratorium z przedmiotu Programowanie obiektowe - zestaw 04

JDBC (Java Database Connectivity vit )

Programowanie w Sieci Internet JSP ciąg dalszy. Kraków, 9 stycznia 2015 r. mgr Piotr Rytko Wydział Matematyki i Informatyki

Warstwa integracji. wg. D.Alur, J.Crupi, D. Malks, Core J2EE. Wzorce projektowe.

JDBC w LoXiMie. Interfejs Java Database Connectivity dla systemu LoXiM. Adam Michalik 2008

Szablony funkcji i szablony klas

Wprowadzenie do technologii JavaServer Faces 2.1 na podstawie

Projektowanie obiektowe. Roman Simiński Wzorce projektowe Wybrane wzorce strukturalne

Wprowadzenie do technologii JavaServer Faces 2.1 na podstawie

Forum Client - Spring in Swing

Współbieżność w środowisku Java

Wątek - definicja. Wykorzystanie kilku rdzeni procesora jednocześnie Zrównoleglenie obliczeń Jednoczesna obsługa ekranu i procesu obliczeniowego

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Builder (budowniczy) Cel: Przykład:

Klasy abstrakcyjne, interfejsy i polimorfizm

Wywoływanie metod zdalnych

Programowanie obiektowe

Metody dostępu do danych

Aplikacje w środowisku Java

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Programowanie obiektowe

Remote Method Invocation 17 listopada 2010

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

Obs³uga transakcji rozproszonych w jêzyku Java

Materiały oryginalne: ZAWWW-2st1.2-l11.tresc-1.0kolor.pdf. Materiały poprawione

Java. Michał Wójcik.

Podejście obiektowe do budowy systemów rozproszonych

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

Bezstanowe komponenty sesyjne i zdarzenia zwrotne

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 obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Język Java część 2 (przykładowa aplikacja)

Systemy Rozproszone. Spis treści. Temat projektu: Regułowy system analizujacy logi. autorzy: Rafał Sadłowski, Sebastian Falkus, Michał Różycki

Klasy abstrakcyjne i interfejsy

Applety Java. Applety są przykładem kodu Java wykonywanego po stronie klienta, ale bez ujawnionej (jak w przypadku skryptu) wersji źródłowej

Analiza i projektowanie aplikacji Java

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ć

Programowanie w Sieci Internet Python - c. d. Kraków, 28 listopada 2014 r. mgr Piotr Rytko Wydział Matematyki i Informatyki

Podejście obiektowe do relacyjnych baz danych Hibernate.

Wywoływanie metod zdalnych

Metody dostępu do danych

Aplikacje Internetowe

Dostęp do baz danych z aplikacji J2EE

Wprowadzenie do Enterprise JavaBeans 2.0

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Projektowanie aplikacji z bazami danych

Hurtownie danych - przegląd technologii

PHP może zostać rozszerzony o mechanizmy dostępu do różnych baz danych:

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

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Języki i techniki programowania Ćwiczenia 2

Programowanie obiektowe

Plan wykładu. Dostęp do bazy danych. Architektura JDBC. Dostęp do baz danych z aplikacji Java EE

Wzorce Strukturalne. Adapter: opis. Tomasz Borzyszkowski

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

Aplikacje Internetowe

Mapowanie obiektowo-relacyjne z wykorzystaniem Hibernate

Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r.

Enterprise JavaBeans. 1. Architektura EJB: komponenty encyjne, komponenty sesyjne, komponenty sterowane komunikatami. 2. Kontenery EJB JBoss.

Zagadnienia projektowania aplikacji J2EE

Enterprise JavaBeans

Platformy Programistyczne Zagadnienia sieciowe i wątki

Programowanie komponentowe. Przykład 1 Bezpieczeństwo wg The Java EE 5 Tutorial Autor: Zofia Kruczkiewicz

1. Zakładanie projektu Katalog typu Java Class Library do przechowywania obiektowego modelu danych projekt należy do warstwy biznesowej

Zagrożenia trywialne. Zagrożenia bezpieczeństwa aplikacji internetowych. Parametry ukryte. Modyfikowanie parametrów wywołania

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

Programowanie obiektowe

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

Aplikacje RMI Lab4

PHP 5 język obiektowy

Tworzenie aplikacji w języku Java

Serwery Statefull i Stateless

Języki programowania imperatywnego

EJB 3.0 (Enterprise JavaBeans 3.0)

Kurs programowania aplikacji bazodanowych

Projektowanie Aplikacji Rozproszonych Jarosław Kuchta. Wzorce projektowe warstwy danych

Technologie i usługi internetowe cz. 2

INFRA. System Connector. Opis wdrożenia systemu

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

BAZY DANYCH. Obsługa bazy z poziomu języka PHP. opracowanie: Michał Lech

1. Wybierz File New Application. Pojawi się nowa aplikacja w Delphi.

Transkrypt:

Wykład 2 Instytut Informatyki Uniwersytet Wrocławski

Plan wykładu Połączenie za pomocą JNDI i DataSource

Połączenie za pomocą JNDI i DataSource Krótki wstęp do usług katalogowych Dotychczas w celu uzyskania obiektu klasy Connection wykorzystywaliśmy DriverManager.getConnection(URL) Lepszym sposobem jest wykorzystanie JNDI i interfejsu DataSource Scenariusz postępowania: Najpierw tworzymy źródło danych z wykorzystaniem interfejsu DataSource Następnie, gdzieś w jakichś usługach katalogowych ten DataSource kojarzymy z przyjazną nazwą (robimy tzw. bind) Powyższe dwa punkty są zwykle wykonywane przez administratorów bez udziału programistów W aplikacji tworzymy kontekst powiązany z tymi usługami katalogowymi i pobieramy poprzez przyjazną nazwę zarejestrowany tam wcześniej DataSource (robimy tzw. lookup)

Połączenie za pomocą JNDI i DataSource Co zrobić, żeby za pomocą klasy DataSource dostać obiekt klasy Connection? Tworzymy obiekt DataSource za pomocą już konkretnej implementacji interfejsu DataSource w przypadku DBMS Oracle wykorzystamy klasę oracle.jdbc.pool.oracledatasource w przypadku DBMS SQL Server wykorzystay klasę com.microsoft.sqlserver.jdbc.sqlserverdatasource Ustawiamy parametry podstawowe parametry: adres serwera, port, nazwę użytkownika, hasło, nazwę bazy danych Wywołujmy funkcję DataSource.getConnection() lub DataSource.getConnection(String username, String password) Dodatkowo możemy ustawić lub pobrać obiekt, który jest odpowiedzialny za zapisywanie logów void setlogwriter(printwriter out) PrintWriter getlogwriter()

Połączenie za pomocą JNDI i DataSource A w jaki sposób pobrać obiekt DataSource z usługi katalogowej? Tworzymy obiekt klasy InitialContext Ustawiamy lokalizację usługi katalogowej wykorzystując funkcję Context.addToEnvironment(String propname, Object propval) Pobieramy obiekt klasy DataSource za pomocą metody Context.lookup(nazwa) Zalety rozważanego rozwiązania Dzięki wykorzystaniu inferfejsu DataSource, pobranie obiektu Connection jest takie samo dla każdego DBMS Dzięki JNDI, problem utworzenia obiektu DataSource delegujemy najczęściej na administratora usługi katalogowej Kod napisany z wykorzystaniem tego schematu jest bardziej elastyczny i łatwiejszy do napisania

Przykład Przykład: JNDIExample JNDIExample.java

Komunikacja aplikacji z DBMS przebiega zwykle w jednym z dwóch schematów: Nawiązanie połączenia wykonywanie zapytań... (przerwa) wykonywanie zapytań Zamknięcie połączenia Nawiązanie połączenia wykonywanie zapytań Zamknięcie połączenia Nawiązanie połączenia wykonywanie zapytań Zamknięcie połączenia Każde w powyższych rozwiązań ma swoje wady. Rozwiązaniem jest użycie puli połączeń.

Jak mogłaby działać taka pula? Tworzymy klasę Manager, która przechowuje stos 20 obiektów klasy Connection Klasa X, która chce dostać obiekt Connection łączy się z obiektem Manager i dostaje obiekt Connection Connection getconnection() Po skończeniu działania, klasa X oddaje obiektowi Manager pobrany wcześniej obiekt Connection void returnconnection(connection conn) są zaimplementowane w JDBC Optional Package i korzystanie z nich jest prawie przeźroczyste.

Źródło: Dany Ayers, et al., Professional Java Data, Wrox 2001

Przykład Przykład: ConnectionPooling ConnectionPooling.java

Obiekty klasy RowSet Wszystkie implementacje RowSet są komponentami JavaBeans Dziedziczą z ResultSet Mamy dwa rodzaje takich obiektów połączeniowe bezpołączeniowe Implementacje połaczeniowe JdbcRowSet Implementacje bezpołączeniowe CachedRowSet FilteredRowSet JoinRowSet Są też RowSet typowo do zastosowań typu Web (WebRowSet) Temu przyjrzymy się w ostatniej części wykładu Będziemy korzystać z implementacji Suna: http://java.sun.com/products/jdbc/download.html

Obiekty klasy RowSet Żeby wykorzystać możliwości obiektu FilteredRowSet trzeba utworzyć klasę implementującą interfejs Predicate Interfejs ten ma trzy metody boolean evaluate(object value, int column) boolean evaluate(object value, String columnname) boolean evaluate(rowset rs)

Przykład Przykład: RowSet JdbcRowSetSample.java CachedRowSetSample.java JoinRowSetSample.java FilteredRowSetSample.java, Range1.java, Range2.java FilteredRowSetSample2.java, Range3.java FilteredRowSetSample3.java, ParityPredicate.java

Większość tworzonych obecnie aplikacji to aplikacje webowe lub aplikacje typu desktop W tego typu aplikacjach występują komponenty wizualne, które trzeba wypełnić danymi Najpopularniejsze komponenty to: JList, JTable, JTree Wypełnienie danymi może być wykonane na różne sposoby My wykorzystamy mechanizm polegający na zdefiniowaniu modelu danych Utworzymy także odpowiednich słuchaczy, którzy będą reagować na zmiany w widoku i odpowiednio modyfikować model Dalej przyjrzymy się kolejnym komponentom i ich obsłudze

Komponent JList Reprezentuje dane w postaci listy Utworzenie modelu polega implementacji interfejsu ListModel void addlistdatalistener(listdatalistener l) Object getelementat(int index) int getsize() void removelistdatalistener(listdatalistener l) Wygodne może być użycie jednej z gotowych implementacji: DefaultComboBoxModel dla JComboBox DefaultListModel dla JList Klasa, która będzie obsługiwać zmiany w modelu musi implementować interfejs ListDataListener void contentschanged(listdataevent e) void intervaladded(listdataevent e) void intervalremoved(listdataevent e)

Komponent JTable Reprezentuje dane w postaci tabelarycznej Utworzenie modelu polega na implementacji interfejsu TableModel void addtablemodellistener(tablemodellistener l) Object getvalueat(int row, int col) String getcolumnname(int col) int getcolumncount(), int getrowcount() void removetablemodellistener(tablemodellistener l) void setvalueat(object avalue, int row, int col) boolean iscelleditable(int row, int col) Class getcolumnclass(int column) Wygodne może być użycie implementacji DefaultTableModel Klasa, która będzie obsługiwać zmiany w modelu musi implementować interfejs TableModelListener void tablechanged(tablemodelevent e)

Komponent JTree Reprezentuje dane w postaci drzewa ukorzenionego Utworzenie modelu polega na implementacji interfejsu TreeModel void addtreemodellistener(treemodellistener l) Object getchild(object parent, int index) int getchildcount(object parent) int getindexofchild(object parent, Object child) Object getroot() boolean isleaf(object node) void removetreemodellistener(treemodellistener l) void valueforpathchanged(treepath path, Object newvalue) Wygodne może być użycie implementacji DefaultTreeModel Elementami drzewa mogą być obiekty klasy DefaultMutableTreeNode

Klasa, która będzie obsługiwać zmiany w modelu musi implementować interfejs TreeModelListener void treenodeschanged(treemodelevent e) void treenodesinserted(treemodelevent e) void treenodesremoved(treemodelevent e) void treestructurechanged(treemodelevent e)

Przykład Przykład: RowSet ListComboBinding.java TableBinding.java TreeBinding.java