Metody dostępu do danych

Podobne dokumenty
Metody dostępu do danych

Instrukcja 2 Laboratorium z Podstaw Inżynierii Oprogramowania

Hibernate mapowanie baz danych

Metody dostępu do danych

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

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

Multimedia JAVA. Historia

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Java jako język programowania

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Zaawansowane aplikacje WWW - laboratorium

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Projektowanie obiektowe. dr Jarosław Skaruz

JAVA W SUPER EXPRESOWEJ PIGUŁCE

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

NHibernate Hibernate dla platformy.net. Hibernate posiada także dużą społeczność, zatem nietrudno uzyskać jakieś wsparcie w przypadku problemów.

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu.

Podstawowe informacje o technologii Java Persistence API - przykład

Wywoływanie metod zdalnych

Podstawowe wykorzystanie Hibernate

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 6

Laboratorium z przedmiotu: Inżynieria Oprogramowania INP

Dziedziczenie. Tomasz Borzyszkowski

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 obiektowe

Wzorce logiki dziedziny

Klasy. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 13

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

Programowanie w Internecie. Java

Programowanie obiektowe

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

AXIS2 - tworzenie usługi sieciowej i klienta Axis Data Binding. dr inż. Juliusz Mikoda mgr inż. Anna Wawszczak

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

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Technologie odwzorowania obiektowo-relacyjnego: JDO

Instrukcja implementacji sterownika wirtualnego portu szeregowego dla systemu Android. Opracowanie: Elzab Soft sp. z o.o.

Instrukcja 3 Laboratorium z Podstaw Inżynierii Oprogramowania

class Student Deklaracja klasy Osoba: Deklaracja klasy Student:

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

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

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Automatyczne generowanie kodu. 4Developers, 26 marca 2010

PARADYGMATY PROGRAMOWANIA Wykład 4

Klasy i obiekty cz II

akademia androida Składowanie danych część VI

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Wykład 4: Klasy i Metody

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Programowanie obiektowe

Programowanie obiektowe

Katalog książek cz. 2

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

Początki Javy. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 8

Programowanie obiektowe zastosowanie języka Java SE

Diagramy maszyn stanowych, wzorce projektowe Wykład 5 część 1

Programowanie obiektowe

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

Wywoływanie metod zdalnych

Tworzenie i wykorzystanie usług

Aplikacje w środowisku Java

Remote Method Invocation 17 listopada 2010

Aplikacje RMI

Technologie i usługi internetowe cz. 2

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

Wykład 5 Okna MDI i SDI, dziedziczenie

Programowanie obiektowe

Programowanie obiektowe

Podejście obiektowe do budowy systemów rozproszonych

Programowanie obiektowe

Materiały do zajęć VII

Aplikacje RMI Lab4

Instrukcja 5 Laboratorium z Podstaw Inżynierii Oprogramowania. Warstwy integracji z bazą danych: Wzorzec DAO Technologia ORM

Tworzenie aplikacji w języku Java

Wprowadzenie do projektu QualitySpy

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

Enkapsulacja, dziedziczenie, polimorfizm

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

Programowanie obiektowe

Szablony klas, zastosowanie szablonów w programach

Typy zmiennych proste i złożone. Programowanie komputerów. Tablica. Złożone typy zmiennych. Klasa. Struktura

Pakiety i interfejsy. Tomasz Borzyszkowski

Aplikacje Internetowe. Najprostsza aplikacja. Komponenty Javy. Podstawy języka Java

Wykład 6 Dziedziczenie cd., pliki

Singleton. Cel: Przykład: Zastosowanie: Zapewnienie, że klasa ma tylko jedną instancję i dostarczenie globalnego dostępu do niej.

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

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

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

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

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

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

Wprowadzenie do Doctrine ORM

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

Serwery aplikacji. dr Radosław Matusik. radmat

Definiowanie własnych klas

Kurs programowania aplikacji bazodanowych

Business Intelligence Beans + Oracle JDeveloper

Transkrypt:

Metody dostępu do danych dr inż. Grzegorz Michalski Na podstawie materiałów dra inż. Juliusza Mikody

Jak działa JDO Podstawowym zadaniem JDO jest umożliwienie aplikacjom Javy transparentnego umieszczenia w bazie danych instancji dowolnych klas zdefiniowanych przez programistę, a następnie ich odzyskanie przy możliwie niewielkiej liczbie ograniczeń. Aplikacja deleguje zadanie pobierania pól obiektów trwałych do implementacji JDO Implementacja JDO śledzi modyfikacje pól obiektów i zapisuje ich wartości w bazie danych w momencie zakończenia bieżącej transakcji.

Klasa zdolna do trwałości Klasę zdolną do trwałości można utworzyć na trzy różne sposoby: Poprzez generowanie kodu źródłowego klasa generowana jest od podstaw: generowanie kodu za pomocą narzędzia modelowania lub generowanie klas na podstawie istniejącego schematu bazy danych. Przez wstępne przetworzenie kodu źródłowego na podstawie istniejącej klasy generowany jest nowy kod klasy przez odpowiednie narzędzia JDO.

Klasa zdolna do trwałości Klasę zdolną do trwałości można utworzyć na trzy różne sposoby: Poprzez rozszerzenie kodu bajtowego metoda ta działa bezpośrednio na kodzie bajtowym wygenerowanym wskutek kompilacji klasy javy. Rozwiązanie to sprawdza się nawet wtedy, gdy kod javy nie jest dostępny. Rozwiązanie takie jet zupełnie przeźroczyste dla programisty aplikacji, a rozszerzenie kodu bajtowego jest dodatkowym etapem wykonywanym po kompilacji klas.

Podstawy JDO Specyfikacja JDO definiuje wiele interfejsów. Pięć głównych klas to: PersistenceManagerFactory używana jest do pobierania instancji klasy PersistenceManager. PersistenceManager zarządza połączeniem z bazą danych oraz buforem podręcznym obiektów trwałych, które zastały już zapisane w pamięci maszyny wirtualnej.

Podstawy JDO Transaction pozwala aplikacji na kontrolę granic pomiędzy kolejnymi transakcjami. Dla jednego obiektu PersistenceManager może istnieć jedynie jeden obiekt Transaction. Transakcje muszą być jawnie rozpoczęte, a następnie zatwierdzone lub odwołane Query Posługująca się instancją PersistenceManager aplikacja może uzyskać wiele obiektów Query, które umożliwiają odnalezienie obiektu trwałego na podstawie wartości jego atrybutów. Extent obiekt ten to reprezentacja wszystkich instancji danej klas.

Definicja klasy JDO wymaga aby klasa zdolna do trwałości: Posiadała konstruktor bezargumentowy Konstruktor bezargumentowy służy do zainicjowania klasy przed pobraniem danych z bazy.

Definicja klasy public class Osoba { private String nazwisko; private String imie; private long wiek; public Osoba() { this.nazwisko = this.imie = ""; this.wiek = 0; public Osoba(String nazwisko, String imie, long wiek) { this.nazwisko = nazwisko; this.imie = imie; this.wiek = wiek; public String getnazwisko() { return nazwisko; public void setnazwisko(string nazwisko) { this.nazwisko = nazwisko;

Metadane JDO Dla każdej klasy zdolnej do trwałości JDO wymaga dodatkowych metadanych. Dane te muszą zostać umieszczone w pliku w postaci specyfikacji XML. Plik zawierający metadane ma rozszerzenie JDO. Każda klasa może posiadać własny plik metadanych: nazwa pliku tworzona jest na wzór nazwy klasy. Możliwe jest także istnienie pojedynczego pliku metadanych dla całego pakietu w którym znajduje się klasa.

Metadane JDO <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE jdo PUBLIC "-//Sun Microsystems, Inc.//DTD Java Data Objects Metadata 2.0//EN" "http://java.sun.com/dtd/jdo_2_0.dtd"> <jdo> <package name="test.jdo"> <class name="osoba"> <field name="nazwisko" persistence-modifier="persistent"/> <field name="imie" persistence-modifier="persistent"/> <field name="wiek" persistence-modifier="persistent"/> </class> </package> </jdo>

Połączenie z bazą danych PersistenceManagerFactory 0..1 Transaction 0..* PersistenceManager 0..* Query 0..* Extent

Tworzenie PersistenceManagerFactory Properties properties = new Properties(); properties.setproperty( "javax.jdo.option.connectiondrivername", "oracle.jdbc.driver.oracledriver"); properties.setproperty( "javax.jdo.option.connectionurl", "jdbc:oracle:thin:@oracle2.icis.pcz.pl:1521:icis"); properties.setproperty( "javax.jdo.option.connectionusername", "user"); properties.setproperty( "javax.jdo.option.connectionpassword","pass"); PersistenceManagerFactory pmf = JDOHelper.getPersistenceManagerFactory(properties);

Tworzenie i zapis obiektu PersistenceManager pm = pmf.getpersistencemanager(); Transaction tx=pm.currenttransaction(); try { tx.begin(); Osoba o = new Osoba("Igrekowski", "Robert", 20); pm.makepersistent(o); tx.commit(); finally { if (tx.isactive()) tx.rollback(); pm.close();

Odtwarzanie obiektów Wykonanie i zatwierdzenie transakcji powoduje zapis obiektu do bazy danych. Obiekt trwały nie istnieje w pamięci (jest w określonym stanie przez JDO). Odczytanie obiektu trwałego jest możliwe w kolejnej/tej samej transakcji. tx.begin(); System.out.println(o); tx.commit();

Odczyt obiektów z bazy danych Klasa Extent reprezentuje kolekcję wszystkich zapisanych obiektów danej klasy. Klasa może odczytać także elementy klas pochodnych. Pobranie instancji następuje z klasy PersistenceManager: getextent(java.lang.class persistence[, boolean subclasses]) Parametr subclasses określa, czy ekstencja zwrócona przez metodę zawierać będzie jedynie żądaną klasę, czy również jej klasy pochodne.

Zestaw obiektów try { tx.begin(); Extent<Osoba> e = pm.getextent( test.jdo.osoba.class, true); for (Osoba osoba : e) { System.out.println(osoba); tx.commit(); finally { if (tx.isactive()) tx.rollback();

Odczyt wybranych instancji Do wyszukania wybranych elementów zestawu instancji służy klasa Query. Do formułowania zapytań służy uproszczony język JDOQL składnia przypominająca instrukcję if, np: ==,!=, <, <=. Pobranie wartości następuje na podstawie wywołania metody na rzecz instancji klasy : Query newquery(class persistance[, String filter]) Query newquery(extent persistances, String filter)

Filtrowanie danych try { tx.begin(); Query q = pm.newquery(test.jdo.osoba.class, "nazwisko.startswith(\"igrek\")"); Collection<Osoba> e = (Collection<Osoba>) q.execute(); for (Osoba osoba : e) { System.out.println(osoba); tx.commit(); finally { if (tx.isactive()) tx.rollback();

Aktualizacja danych try { tx.begin(); Query q = pm.newquery(test.jdo.osoba.class, "imie.startswith(\"igrek\")"); Collection<Osoba> e = (Collection<Osoba>) q.execute(); Osoba osoba = e.iterator().next(); osoba.setnazwisko("zetowski"); q.closeall(); tx.commit(); finally { if (tx.isactive()) tx.rollback();

Usuwanie obiektów stałych try { tx.begin(); Query q = pm.newquery(test.jdo.osoba.class, "nazwisko.startswith(\"igrek\")"); Collection<Osoba> e = (Collection<Osoba>) q.execute(); Osoba osoba = e.iterator().next(); if (osoba!= null) pm.deletepersistent(osoba); q.closeall(); tx.commit(); System.out.println("end"); finally { if (tx.isactive()) tx.rollback();