352 Tworzenie aplikacji J2EE w oparciu o Oracle Application Development Framework (ADF)
Plan prezentacji 353 Architektura i technologie składowe Oracle ADF ADF Business Components jako warstwa logiki biznesowej Tworzenie aplikacji webowych w technologiach: ADF Business Components + JSP + Struts ADF Business Components + JSF + ADF Faces Podsumowanie
Architektura Oracle ADF 354
Oracle Application Development Framework (ADF) 355 Ukrywa złożoność J2EE oferując wizualne środowisko projektowe Zwiększa produktywność programisty typowa funkcjonalność jest już zaimplementowana programiści skupiają się na kodzie specyficznym dla danej aplikacji Oparty o uznane wzorce projektowe dla J2EE np. architektura Model-View-Controller dla aplikacji webowych Jest wynikiem ewolucji i integracji technologii dostępnych we wcześniejszych wersjach JDeveloper BC4J -> ADF Business Components, UIX -> ADF Faces
Zalety Oracle ADF 356 Dostępność narzędzia wspierającego framework: JDeveloper 10g Swoboda wyboru technologii ADF dla każdej z warstw wspiera różne technologie Kompleksowość oferowanych rozwiązań Obejmuje wszystkie warstwy aplikacji Uwzględnia wszystkie fazy rozwoju oprogramowania Niezależność od platformy Możliwość instalacji na dowolnym serwerze J2EE JDeveloper oferuje kreator instalacji ADF runtime dla popularnych serwerów J2EE
Warstwy Oracle ADF 357 Web & Wireless Clients Rich Clients Controller Model Business Services Business Services warstwa oferująca dostęp do różnych źródeł danych i obsługująca logikę biznesową Model warstwa abstrakcji zapewniająca spójne mechanizmy współpracy warstw View i Controller z różnymi implementacjami Business Services Controller obsługuje przepływ sterowania w aplikacji webowej View dostarcza interfejs użytkownika
Architektura Oracle ADF 358 * Schemat z Oracle ADF Developer s Guide
Moduły Oracle ADF 359 Oracle ADF Model Kluczowy element ADF Oferuje ujednolicone podejście do deklaratywnego wiązania różnych interfejsów użytkownika z różnymi usługami biznesowymi z różnymi Implementuje Data Control specyfikację JSR-227 dotyczącą warstwy abstrakcji usług biznesowych Oracle ADF Controller Integruje Struts i JSF z Oracle ADF Model Oracle ADF Faces Biblioteka komponentów JSF Oracle ADF Swing Rozszerzenie ADF Model dla aplikacji Swing Oracle ADF Business Components Upraszcza implementację usług biznesowych, szczególnie twórcom aplikacji korzystających wcześniej z 4GL (np. Oracle Forms)
Szablony aplikacji w JDeveloper 10g (10.1.3) 360 Szablon rozumiany jako wybór technologii Zwiększenie przejrzystości przez ograniczenie wyboru Szablony dostarczane jedynie dla wygody Gotowe szablony: Web Application: JSF, EJB, Toplink Web Application: JSF, ADF Business Components Web Application: JSF, EJB Web Application: JSP, Struts, ADF Business Components Java Application: ADF Swing, ADF Business Components Java Application: Java, Swing/JFC No Template: wszystkie technologie
ADF Zalecane zestawy technologii 361 Zalecany szablon dla programistów J2EE i nowych aplikacji: Business Services: EJB Session + Oracle Toplink Controller: JSF View: JSF + ADF Faces Zalecany szablon dla programistów migrujących z Oracle Forms: Business Services: ADF Business Components Controller: JSF View: JSF +ADF Faces W poprzednich wersjach JDevelopera wybrane szablony były oznaczone jako domyślne 10.1.2: Web Application [Default] (JSP, Struts, ADF BC) 10.1.3 Preview & EA: Web Application [Default] (JSF, JSP, ADF BC) 10.1.3: brak wskazania domyślnych szablonów
ADF Przykładowa aplikacja 362 Model Controller View
JDeveloper 10g: Kroki tworzenia aplikacji webowej opartej o ADF 363 1) Utworzenie aplikacji Typowo z wybraniem jednego z szablonów 2) Zaprojektowanie warstwy usług biznesowych dla modelu Gdy usługi biznesowe w innej technologii niż ADF Business Components to dodatkowo utworzenie kontrolek danych 3) Zaprojektowanie przepływu sterowania dla kontrolera 4) Utworzenie stron - widoków
364 ADF Business Components jako warstwa logiki biznesowej
Tworzenie nowej aplikacji wg szablonu obejmującego ADF Business Components Wskazanie nazwy aplikacji, katalogu i szablonu 365 Powstają 2 projekty: Model i ViewController
Tworzenie komponentów w biznesowych opartych o tabele bazy danych (1/6) 366 Uruchomienie kreatora
Tworzenie komponentów w biznesowych opartych o tabele bazy danych (2/6) 367 Wybór połączenia z bazą danych Wybór tabel, które mają być reprezentowane jako obiekty encyjne
Tworzenie komponentów w biznesowych opartych o tabele bazy danych (3/6) 368 Wybór obiektów encyjnych, dla których mają zostać utworzone modyfikowalne widoki Wybór obiektów encyjnych, dla których mają zostać utworzone widoki tylko do odczytu
Tworzenie komponentów w biznesowych opartych o tabele bazy danych (4/6) Opcjonalne utworzenie domyślnego modułu aplikacji Domyślny moduł aplikacji zawiera wszystkie obiekty encyjne i widoki Domyślny moduł aplikacji umożliwia przetestowanie utworzonych komponentów Na potrzeby aplikacji zalecane jest utworzenie specjalizowanych ( odchudzonych ) modułów aplikacji 369
Tworzenie komponentów w biznesowych opartych o tabele bazy danych (5/6) 370 Opcjonalne utworzenie diagramu UML komponentów biznesowych Obiekty encyjne Widoki Moduł aplikacji
Tworzenie komponentów w biznesowych opartych o tabele bazy danych (6/6) 371 Efekt działania kreatora: Obiekty encyjne, widoki i opcjonalnie domyślny moduł aplikacji Asocjacje między obiektami encyjnymi dla encji powstałych z tabel powiązanych relacją klucza obcego Linki między widokami prezentującymi dane z obiektów encyjnych powiązanych asocjacjami
Rodzaje komponentów w biznesowych 372 Obiekty encyjne (Entity Objects) Reprezentują dane Odpowiadają za walidację i trwałość danych Widoki (View Objects) Udostępniają dane dla aplikacji Filtrują i zmieniają sposób prezentacji danych Moduły aplikacji (Application Modules) Publikują widoki dla aplikacji Odpowiadają za zarządzanie transakcjami
Obiekty encyjne (Entity Objects) 373 Reprezentują model biznesowy: Dane Reguły biznesowe: walidacja danych Jeden obiekt encyjny odpowiada jednej tabeli Obiekty encyjne mogą być powiązane asocjacjami Reprezentującymi zależności klucza obcego Umożliwiającymi dostęp do związanych encji
Obiekty encyjne - pliki 374 Generowane domyślnie: Emp.xml (obowiązkowy) - metadane o komponencie EmpImpl.java (opcjonalny) - dziedziczy z EntityImpl Reprezentuje wiersze Zawiera metody setter/getter dla atrybutów Generowane opcjonalnie: EmpDefImpl.java dziedziczy z EntityDefImpl Opisuje wszystkie instancje encji Wykorzystywana gdy konieczne modyfikacje metadanych w trakcie pracy aplikacji EmpCollImpl.java dziedziczy z EntityCollImpl Reprezentuje cache dla wierszy encji Niegenerowana gdyż domyślny mechanizm jest odpowiedni
Wybór r generowanych plików 375 W ramach edycji obiektu encyjnego można zadecydować o generacji opcjonalnych plików Java Dla klasy EntityImpl można wskazać, które metody mają się w niej pojawić Domyślnie metody setter/getter dla atrybutów Jeśli chcemy nadawać domyślne wartości atrybutom należy wskazać metodę create()
ADF BC Pobieranie identyfikatorów z sekwencji (1/2) 376 Utworzenie w bazie danych sekwencji i wyzwalacza CREATE SEQUENCE emp_seq START WITH 8001 INCREMENT BY 1; CREATE TRIGGER empno_trigger BEFORE INSERT ON emp FOR EACH ROW BEGIN IF (:NEW.empno IS NULL) THEN SELECT emp_seq.nextval INTO :NEW.empno FROM dual; END IF; END; /
ADF BC Pobieranie identyfikatorów z sekwencji (2/2) 377 Zmiana typu atrybutu obiektu encyjnego na DBSequence
ADF BC Walidacja danych (1/2) 378 Na poziomie obiektu encyjnego CompareValidator ListValidator RangeValidator MethodValidator
ADF BC Walidacja danych (2/2) 379 Walidacja poprzez domeny Utworzenie nowego typu danych domeny Wymuszającego odpowiedni format Specyfikującego dopuszczalne wartości Format/dopuszczalne wartości określa metoda validate(), której zadaniem jest generowanie wyjątku przy błędnych danych Wykorzystanie domeny jako typu danych dla atrybutu Mechanizm dla walidacji różnych atrybutów różnych encji
Asocjacje (1/2) 380 Umożliwiają dostęp do powiązanych obiektów encyjnych (poprzez opcjonalne metody dostępu) Oparte lub nie o ograniczenia w bazie danych Typy asocjacji: Związek asocjacji encje powiązane luźno, mogą istnieć niezależnie Związek kompozycji encja docelowa w pełni zależna od źródłowej, nie może wystąpienie encji docelowej istnieć bez powiązania z wystąpieniem encji źródłowej Usunięcie wystąpienia encji źródłowej powoduje usunięcie powiązanych z nią wystąpień encji docelowej
Asocjacje (2/2) 381 Metody dostępu: W Emp: setdept(...), getdept() zwraca DeptImpl W Dept: getemp() zwraca RowIterator
Widoki (View( Objects) 382 Udostępniają dane aplikacjom Można je do stroić do wymagań aplikacji poprzez: Wybór atrybutów Dodanie atrybutów wyliczeniowych Dodanie klauzul WHERE i ORDER BY Oparcie o kilka obiektów encyjnych (JOIN) Mogą być powiązane linkami reprezentującymi zależności Master-Detail
Widoki - pliki 383 Generowane domyślnie: EmpView.xml (obowiązkowy) metadane o komponencie EmpViewImpl.java (opcjonalny) - dziedziczy z ViewObjectImpl Reprezentuje widok Zawiera dodane metody biznesowe Generowane opcjonalnie: EmpViewRowImpl.java (opcjonalny) dziedziczy z ViewRowImpl Reprezentuje wiersze widoku Zawiera metody setter/getter dla atrybutów EmpDefImpl.java dziedziczy z ViewDefImpl reprezentuje metadane w trakcie pracy aplikacji
View Objects a widoki interfejsu użytkownika 384 ViewObjects stanowią część warstwy Business Services! Typowo View Object jest wykorzystywany jako źródło danych dla strony w warstwie View View Object może być również wykorzystany do wydawania "w tle" pomocniczego zapytania na żądanie!
Edycja właściwow ciwości widoków 385 Modyfikacja klauzul WHERE i ORDER BY W trybie eksperckim możliwa swobodna edycja zapytania, ale problem z mapowaniem atrybutów Możliwość parametryzacji (styl? Lub :1)
Atrybuty wyliczeniowe 386 Przykład: całkowite zarobki pracownika (SAL + COMM)
Widoki tylko do odczytu 387 Nieoparte o encje tylko o jawnie podane zapytanie SQL Jeśli widok nie będzie służył do modyfikacji danych, (np. widok dla LOV) oparcie go o zapytanie SQL z pominięciem encji zwiększa efektywność
Współpraca praca widoków w i obiektów encyjnych 388 Odczyt danych Odczyt bezpośrednio z bazy danych Atrybuty bazowe buforowane i walidowane w encjach BD EO getxxx() VO Modyfikacja danych Widok modyfikuje cache obiektu encyjnego Obiekt encyjny modyfikuje stan bazy danych BD EO setxxx() VO
Moduły y aplikacji (Application( Modules) 389 Publikują widoki dla aplikacji Aplikacja "łączy się" z modułem apl. Widok aby był dostępny musi być w module aplikacji Obsługują transakcje Każdy moduł powinien zawierać komponenty (encje i widoki) niezbędne do realizacji konkretnego zadania Im mniejszy moduł tym większa efektywność Moduły można zagnieżdżać (modularność!) Za obsługę transakcji odpowiada moduł nadrzędny
Moduły y aplikacji - pliki 390 Generowane domyślnie: AppModule.xml (obowiązkowy) - metadane o komponencie AppModuleImpl.java (opcjonalny) - dziedziczy z ApplicationModuleImpl Reprezentuje moduł Zawiera dodane metody biznesowe Generowany opcjonalnie: AppModuleDefImpl.java dziedziczy z ApplicationModuleDefImpl reprezentuje metadane w trakcie pracy aplikacji
Edycja modułu u aplikacji 391 Dodawanie/usuwanie komponentów Ewentualne dodawanie modułów zagnieżdżonych
Dodawanie metod biznesowych 392 Do realizacji specyficznych zadań można utworzyć dodatkowe metody biznesowe Należy przemyśleć, na jakim poziomie metoda powinna być dodana Na poziomie obiektów encyjnych: Metody wykorzystywane w walidacji, nieudostępniane klientom Na poziomie obiektów widoków: Metody użyteczne dla wszystkich klientów korzystających z danego widoku Na poziomie modułów aplikacji: Metody specyficzne dla modułu aplikacji
Testowanie komponentów w biznesowych w JDeveloper (1/2) JDeveloper umożliwia przetestowanie komponentów biznesowych w oderwaniu od konkretnego interfejsu narzędziem BC Browser Ułatwia lokalizację błędów Umożliwia przeglądanie i edycję poprzez widoki, obserwację działania linków między widokami Nie pozwala na uruchamianie dodanych metod 393
Testowanie komponentów w biznesowych w JDeveloper (2/2) 394 Przeglądanie widoku w oddzielnym oknie
395 Tworzenie aplikacji webowej MVC opartej o komponenty biznesowe, JSP i Struts
Wykorzystywane technologie 396 * Schemat z Oracle ADF Developer s Guide
Struts: : Diagram przepływu miedzy stronami 397 JDeveloper 10g ułatwia korzystanie ze Struts poprzez diagramy przepływu sterowania ADF oferuje 2 niestandardowe komponenty: DataPage kombinacja DataAction i PageForward; dla stron korzystających z danych modelu DataAction akcja wywołująca metody z warstwy Business Services
Tworzenie stron JSP widoków w (1/8) 398 Dwuklik na ikonie strony Dodawanie komponentów ADF reprezentujących dane Po umieszczeniu (drag&drop) elementu modelu na stronie, pojawia się okienko z wyborem sposobu prezentacji
Tworzenie stron JSP widoków w (2/8) Źródło JSP 399 <%@ page contenttype="text/html;charset=windows-1250"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html"%> <html> <head>...</head> <body> <html:errors/> <table border="1" width="100%"> <tr> <th> <c:out value="${bindings.empview1.labels[\'empno\']}"/> </th>... </tr> <c:foreach var="row" items="${bindings.empview1.rangeset}"> <tr> <td> <c:out value="${row.currencystring}"/> </td> <td> <c:out value="${row[\'empno\']}"/> <br/> </td>... </c:foreach> </table> </body> </html>
Tworzenie stron JSP widoków w (3/8) 400 Uruchomienie Koniecznie z diagramu Struts! (aby poprzez kontroler) Efekt działania
Tworzenie stron JSP widoków w (4/8) 401 Dodanie przycisków do nawigacji po wynikach zapytania
Tworzenie stron JSP widoków w (5/8) 402 Przyciski nawigacyjne kod i efekt działania <html:form action="/browseemp.do"> <html:hidden property="${bindings.statetokenid}" value="${bindings.statetoken}"/> <html:submit property="event_previousset" value="previousset" disabled="${!bindings.previousset.enabled}"/> <html:submit property="event_nextset" value="nextset" disabled="${!bindings.nextset.enabled}"/> </html:form> Wskaźnik bieżącego wiersza
Tworzenie stron JSP widoków w (6/8) 403 Formatka do edycji
Tworzenie stron JSP widoków w (7/8) 404 Zmiana własności przycisków Etykiety Aktywność <html:submit property="event_commit" value="ok" disabled="${!bindings.commit.enabled}"/> <html:submit property="event_rollback" value="anuluj" disabled="${!bindings.rollback.enabled}"/> Definicja nawigacji w odpowiedzi na zdarzenia Predefiniowane np. Commit, Rollback Aplikacji np. Edit
Tworzenie stron JSP widoków w (8/8) 405 Zmiana bieżącego wiersza Generacja zdarzeń aplikacji Ręczna edycja <html:link href="browseemp.do? event=setcurrentrowwithkey &rowkey=${row.rowkeystr}&event=edit"> Edit </html:link>
Efekty walidacji na poziomie komponentów w biznesowych 406 ApplicationResources.properties... errors.header=<h3><font color\="red"> Niepoprawne dane</font></h3> Musisz poprawi\u0107 poni\u017csze b\u0142\u0119dy\:<ul>... <html:errors/>... editemp.jsp
Tworzenie formularzy master-detail 407 Strony oparte o View Objects powiązane linkiem Dla /displaydept Dla /displayemp Link "Details" należy oprogramować by generował zdarzenie "Details" i zmieniał bieżący wiersz
408 Tworzenie aplikacji webowej MVC opartej o komponenty biznesowe, JSF i ADF Faces
Wykorzystywane technologie 409 * Schemat z Oracle ADF Developer s Guide
Czym jest ADF Faces? 410 Technologia tworzenia widoków w Oracle Application Development Framework (ADF) Bogata biblioteka komponentów interfejsu użytkownika oparta o JSF Port ADF UIX Technologii widoków specyficznej dla Oracle (obecnie zarzuconej) Cechującej się bogactwem zaawansowanych komponentów Wspierającej różne typy urządzeń Wykorzystywanej przez Oracle (np. Enterprise Manager) Wraz z Oracle JDeveloper 10g (10.1.3) API zostało zamrożone Współpracują z implementacjami JSF JSF RI 1.1 lub nowsza Apache MyFaces 1.0.8 lub nowsza W styczniu 2006 podarowane Apache Software Foundation Wspierane przez wizualne edytory w JDeveloper 10.1.3 Oracle pracuje również nad pełnym wsparciem ADF Faces w Eclipse
Zalety ADF Faces w porównaniu ze standardowymi JSF 411 Bogaty zestaw zaawansowanych komponentów interfejsu użytkownika, konwerterów i walidatorów W tym konwertery/walidatory wykorzystujące JavaScript do wczesnej walidacji po stronie klienta Wsparcie dla mechanizmu file upload Wsparcie dla okienek dialogowych Zastępniki dla standardowych znaczników oferujące większą funkcjonalność Większa wydajność Np. w zakresie zachowywania stanu (po stronie klienta i serwera) Integracja z Oracle ADF Partial Page Rendering (w stylu AJAX!) UWAGA: Znaczniki ADF Faces <af: > <afh: > można mieszać (z pewnymi ograniczeniami) ze standardowymi
ADF Faces Przykłady komponentów 412 <af:panelpage> <af:choosecolor> <af:table> <af:processtrain> < af:choosedate > <af:commandbutton> <af:selectordershuttle> <af:selectrangechoicebar> <af:menubar> <af:menutabs>
Tworzenie stron JSF widoków w (1/5) 413 Tworzenie strony-widoku JSF JSP + ADF Faces Edytor wizualny Elementy z modelu wybierane z Data Control Palette Dla kontrolek reprezentujących View Objects z ADF Business Components, oprócz opcji prezentacji pojedynczych widoków (jak dla JSP), możliwość prezentacji widoków master-detail na jednej stonie Widok zagnieżdżony może stanowić model dla formularza master-detail
Tworzenie stron JSF widoków w (2/5) 414 Wybór sposobu prezentacji danych z modelu Po umieszczeniu (drag&drop) elementu modelu na stronie, pojawia się okienko z wyborem sposobu prezentacji
Tworzenie stron JSF widoków w (3/5) 415 Wynik działania kreatora (edytor wizualny)
Tworzenie stron JSF widoków w (4/5) 416 Wynik działania kreatora (fragment kodu źródłowego strony) <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%> <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%> <%@ taglib uri="http://xmlns.oracle.com/adf/faces" prefix="af"%> <%@ taglib uri="http://xmlns.oracle.com/adf/faces/html" prefix="afh"%> <f:view> <afh:html> <afh:head title="empdept"> <meta http-equiv="content-type"... content="text/html; charset=windows-1250"/> </afh:head> <afh:body> <af:messages/> <h:form> <af:panelgroup layout="vertical"> <af:panelheader text="deptview1"> <af:panelform> <af:inputtext value="#{bindings.deptno.inputvalue}" label="#{bindings.deptno.label}" readonly="true"/> <af:inputtext value="#{bindings.dname.inputvalue}" label="#{bindings.dname.label}" readonly="true"/> <af:inputtext value="#{bindings.loc.inputvalue}" label="#{bindings.loc.label}" readonly="true"/> Odwołania do modelu poprzez bindings
Tworzenie stron JSF widoków w (5/5) 417 Działająca aplikacja
Podsumowanie 418
Oracle ADF - Podsumowanie 419 Odpowiedni szkielet aplikacji (framework) jest kluczem do osiągnięcia satysfakcjonującej produktywności projektantów aplikacji J2EE Zalety Oracle ADF: Oparty o uznane wzorce projektowe i technologie Daje swobodę wyboru technologii Niezależny od platformy (przenaszalny) Wspierany przez wygodne narzędzie JDeveloper 10g Dwa zalecane przez Oracle zestawy technologii: Dla programistów J2EE: EJB+Toplink, JSF, ADF Faces Dla programistów migrujących z Oracle Forms: ADF Business Components, JSF, ADF Faces