TEMAT CELE ZADANIA
Transkrypt
TEMAT CELE ZADANIA
TEMAT Bazodanowa usługa typu WEB Service (zwanej dalej WS), wykorzystująca serwery MS SQL firmy Microsoft , Oracle9iAS Containers for J2EE oraz JDBC i JSP. Ćwiczenie zakłada znajomość serwera baz danych MS SQL Server oraz podstaw języka SQL, jak też znajomość tematyki związanej z WS w zakresie będącym przedmiotem poprzednich ćwiczeń. CELE 1. Zapoznanie się z mechanizmami komunikacji z bazą danych dostępnymi w języku Java; przeprowadzenie przy użyciu środowiska Oracle9i JDeveloper procesu implementacji kodu aplikacji baz danych, obejmującego kolejne etapy: -uruchomienie lokalnego serwera baz danych, -przygotowanie i przetestowania poleceń języka SQL, realizujących zadane zapytania, -implementacja prostej aplikacji języka Java, nawiązującej połączenie z bazą danych i wykonującą uprzednio przygotowane zapytania oraz przetwarzającej uzyskane wyniki, 2. Zaimplementowanie usługi WS udostępniającej wynik uruchomionego w poprzednim punkcie zapytania. ZADANIA 1. Przygotowanie zapytań SQL 1.1. Uruchomić aplikację Query Analyser i zalogować się korzystając z Windows Authentication. 1.2. Wybrać bazę Northwind jak bieżącą bazę systemu. 1.3. Zapoznać się z załączonym (Dodatek A) schematem Obiektowo Związkowym bazy Northwind, szczególnie zaś z tabelkami zawierającymi dane o klientach (Customers) oraz zamówieniach (Orders). 1.4. Wykonać zapytanie SQL znajdujące wszystkich klientów (Customers). 1.5. Dokonać projekcji ograniczającej uzyskany wynik do pól określających nazwę firmy (CompanyName) oraz kontaktu (ContactName). 1.6. Ułożyć i przetestować zapytanie znajdujące dla klienta o identyfikatorze (CustomerID) równym ‘ALFKI’ liczbę złożonych zamówień. 1.7. Ułożyć i przetestować zapytanie SQL znajdujące nazwę firmy, kontakt oraz liczbę złożonych zamówień, wypisujące wynik malejąco posortowany według tejże liczby. 1.8. Sprawdzić, czy jest zdefiniowane źródło danych ODBC dla bazy Northwind, jeśli nie to takowe utworzyć. (program odbcad32.exe dostępny też z panelu sterowania, funkcja dodawania ) 2. Aplikacja Java korzystająca z JDBC 2.1. Uruchomić środowisko Oracle9i Jdeveloper i utworzyć nowy projekt. 2.2. Za pomocą polecenia New Class utworzyć klasę Java z metodą main. 2.3. Dodać kod (samodzielnie dodatkowy plus, lub skorzystać z how2) nawiązujący połączenie za pośrednictwem jdbc z bazą Northwind oraz zaimplementować pętlę przeglądającą uzyskany zbiór wynikowy. Należy dodać import java.sql.*; 2.4. Umieścić w kodzie zapytanie SQL uzyskane w punkcie 1.7. 2.5. Uruchomić aplikację! 2.6. (Przygotowanie do impl. WS) W miejsce metody main zadeklarować (p. ćw. nr 2) własną metodę postaci String[]getNBest(int howMany) i umieścić w niej kod uprzednio znajdujący się w metodzie main. (ew. skorzystać z pliku). Jednocześnie należy przepisać wynik zapytania SQL, w ten sposób, by był on wynikiem metody getNBest. Parametr howMany ma określać liczbę wierszy wyniku metody. 3. Aplikacja typu WS 3.1. Korzystając z klasy z poprzedniego punktu wygenerować usługę WS (podobnie jak w ćw. 2). 3.2. Dokonać instalacji tejże usługi na lokalnym serwerze Oracle9iAS Containers for J2EE, bacząc przy tym na właściwą konfigurację użytego połączenia. (p. ćw. ćw. 1,2). 3.3. Wygenerować namiastkę (stub/skeleton) klasy, zaopatrzoną w metodę main. 3.4. Dodać do uzyskanej w ten sposób namiastki(stub/skeleton) kod, przeglądający dwuwymiarową tablicę, stanowiącą wynik wywołania metody getNBest. Za pomocą standardowej funkcji System.out.println, wypisać wynik na wyjście. 3.5. Uruchomić i przetestować uzyskaną w ten sposób klasę! 4. Przygotować stronę JSP (podobnie jak w ćwiczeniu 1, dotyczącym usługi Google) implementującą interfejs HTML do usługi WS. W tym celu: 4.1. Za pomocą polecenia new wygenerować stronę JSP (JSP page) 4.2. Dodać kod tworzący egzemplarz namiastki (stub instance), a następnie wywołujący metodę getNBest. (odnośnie punktów 4.1-4 można posiłkować się załączonym plikiem untitled1.jsp) 4.3. Wynik należy wyprowadzić korzystając z tabeli HTML (znaczniki <TABLE> <TR> <TD>) 4.4. Dokonać rozmieszczenia (deployment) strony JSP na serwerze Oracle9iAS Containers for J2EE i przetestować całość uzyskanego w ten sposób Systemu Informatycznego. (p. ćw 1) 4.5. Odpowiedzieć na pytanie: czy w przypadku rozważanej usługi ma znaczenie jej połączeniowość (stateless/stateful). 4.6. Z ilu warstw składa się zaimplementowany System (w wersji z JSP)? Jako warstwę rozumiemy składową w obrębie, której nie występują połączenia prot. sieciowych. 4.7. (Dodatkowe) Cały wiersz wyniku jest przekazywany w jednej linii. Jak przekazywać pojedyncze pola? 4.8. (Dodatkowe) Może okazać się, że odpowiedź na zap. SQL zawiera mniej wierszy niż określa to parametr howMany. Jak rozsądnie obsłużyć taką sytuację? Dodatek A Orders Shippers ShipperID int <pk> CompanyName nvarchar(40) Phone nvarchar(24) OrderID CustomerID EmployeeID OrderDate RequiredDate ShippedDate ShipVia Freight ShipName ShipAddress ShipCity ShipRegion ShipPostalCode ShipCountry Customers int nchar(5) int datetime datetime datetime int money nvarchar(40) nvarchar(60) nvarchar(15) nvarchar(15) nvarchar(10) nvarchar(15) <pk> <fk1> <fk2> CustomerID CompanyName ContactName ContactTitle Address City Region PostalCode Country Phone Fax <fk3> nchar(5) <pk> nvarchar(40) nvarchar(30) nvarchar(30) nvarchar(60) nvarchar(15) nvarchar(15) nvarchar(10) nvarchar(15) nvarchar(24) nvarchar(24) Employees Order Details OrderID ProductID UnitPrice Quantity Discount int <pk,fk1> int <pk,fk2> money smallint real EmployeeID LastName FirstName Title TitleOfCourtesy BirthDate HireDate Address City Region PostalCode Country HomePhone Extension Photo Notes ReportsTo PhotoPath Products ProductID ProductName SupplierID CategoryID QuantityPerUnit UnitPrice UnitsInStock UnitsOnOrder ReorderLevel Discontinued int <pk> nvarchar(40) int <fk2> int <fk1> nvarchar(20) money smallint smallint smallint bit int <pk> nvarchar(20) nvarchar(10) nvarchar(30) nvarchar(25) datetime datetime nvarchar(60) nvarchar(15) nvarchar(15) nvarchar(10) nvarchar(15) nvarchar(24) nvarchar(4) image ntext int <fk> nvarchar(255) EmployeeTerritories CustomerCustomerDemo EmployeeID int <pk,fk1> TerritoryID nvarchar(20) <pk,fk2> CustomerID nchar(5) <pk,fk2> CustomerTypeID nchar(10) <pk,fk1> Territories TerritoryID nvarchar(20) <pk> TerritoryDescription nchar(50) RegionID int <fk> Suppliers SupplierID CompanyName ContactName ContactTitle Address City Region PostalCode Country Phone Fax HomePage int <pk> nvarchar(40) nvarchar(30) nvarchar(30) nvarchar(60) nvarchar(15) nvarchar(15) nvarchar(10) nvarchar(15) nvarchar(24) nvarchar(24) ntext Categories CategoryID CategoryName Description Picture int <pk> nvarchar(15) ntext image CustomerDemographics CustomerTypeID nchar(10) <pk> CustomerDesc ntext Region RegionID int <pk> RegionDescription nchar(50)