VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - PŘEDNÁŠKA

Slides:



Advertisements
Podobné prezentace
Webové rozhraní pro datové úložiště
Advertisements

(instance konkrétní třídy)
Úvod do platformy Java EE
Dynamické dokumenty na straně klienta Informatika pro ekonomy II.
Tabulky v MS ACCESS Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Mgr. Jiří Novák.
Tvorba webových stránek
Rozšíření systému pro zátěžové testy o SOAP a agenty Zbyněk Pyšný.
Přednáška č. 3 Normalizace dat, Datová a funkční analýza
Ing. Jan Mittner Rozšíření modelu 2. Vazba 1:n 3. Vazba m:n 2.
Přednáška č. 5 Proces návrhu databáze
ÚVOD DO CPP 7 Dědičnost - pokračování
PROGRAMOVACÍ JAZYKY (c) Tralvex Yeap. All Rights Reserved.
Databáze Jiří Kalousek.
Podnikový systém SEWSS Jakub Charvát STATISTICA Enterprise-wide SPC System.
Management telekomunikačních systémů
State. State – kontext a problém Kontext  chování objektu má záviset na jeho stavu, který se typicky mění za běhu Neflexibilní řešení  metody obsahují.
M-Cloud.cz Groupwarové řešení pro malé a střední podniky.
Vývoj aplikací pro SharePoint
PHP – Základy programování
Datové schránky ve velké společnosti SharePoint partenrská konference Microsoft Pavel Salava Mainstream technologies,
Objektové programování
Rozšíření jednouživatelské verze IS na víceuživatelskou Prezentace Diplomové práce Autor : Libor Tomášek Spoluautoři : Pobucký M., Drábek L. Vedoucí :
Vypracoval: Ondřej Dvorský Třída: VIII.A
Ing. Jan Mittner Základy MVC 2. Rozšíření layoutu 3. helpery 4. Bootstrap a přepis URL adres 2.
Metainformační systém založený na XML Autor: Josef Mikloš Vedoucí práce: Ing. Jan Růžička, Ph.D. V/2004.
Databázové systémy Přednáška č. 6 Proces návrhu databáze.
VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - PŘEDNÁŠKA Zbyněk Šlajchrt Část 4.
Dokumentace objektů a zveřejnění funkcí
Představujeme Ensemble Michal Tomek. Na tomto obrázku vidíte, co systému Ensemble chybí:
Ing. Jan Mittner Životní cyklus požadavku 2. Moduly 3. Pluginy 4. Jak řešit komponenty typu menu 5. atd. 2.
KIV/PPA1 cvičení 8 Cvičící: Pavel Bžoch. Osnova cvičení Objekty v Javě Třída Konstruktor Metody Metody a proměnné třídy x instance Program sestávající.
OSNOVA: a) Úvod do OOPb) Třídy bez metod c) Třídy s metodamid) Konstruktory a destruktory e) Metody constf) Knihovní třídy g) Třídy ve tříděh) Přetížení.
VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - PŘEDNÁŠKA Zbyněk Šlajchrt Část 13.
Algoritmizace a programování Objektově orientované programování - 16 Mgr. Josef Nožička IKT Algoritmizace a programování
Dílna Caché II. CSP pro pokročilé Tomáš Vaverka. Zdroje HTML Tag Reference v sekci Reference Material v dokumentaci Caché HTML Tag Reference v sekci Reference.
Návrhový vzor Factory v JAVA API Martin Kot Katedra informatiky VŠB – Technická univerzita Ostrava
IB111 Programování a algoritmizace
Návrh a tvorba WWW Přednáška 5 Úvod do jazyka PHP.
Copyright (C) 2000 Vema, a. s.1 V3 klient Michal Máčel Provozní integrace G2, HR/Win a internetu.
uložené procedury (stored procedures) triggery, sekvence, pohledy, funkce, parametrické dotazy (prepared statements) komplexní agregace a SQL dotazy jiné.
WWW stránky – Úvod Mgr. Lenka Švancarová.
Richard Lipka Department of Computer Science and Engineering Faculty of Applied Sciences University of West Bohemia, Pilsen, Czech Republic 1.
Databázové modelování
Active Directory Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí Autor:
2 Petr Žitný znalosti.vema.cz 3 Báze znalostí Nová služba zákazníkům ▸Báze naplněná informacemi, ke které mají uživatelé přímý přístup Základní cíl ▸Poskytovat.
Přístup do IS z mobilních zařízení Tomáš Tureček Katedra Informatiky FEI VŠB-TU Ostrava.
Webové služby pro komunikaci s informačním systémem eQuip Martin Širajch.
OPERAČNÍ SYSTÉMY.
14. června 2004Michal Ševčenko Architektura softwarového systému DYNAST Michal Ševčenko VIC ČVUT.
VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - CVIČENÍ Zbyněk Šlajchrt Část 6.
PHP Programy pro tvorbu WWW stránek - 01
Service layer. Service layer – úvod Problém  Vytvoření API aplikace  Odstínění bussiness logiky a transakčního chování od zbytku aplikace  Kam s aplikační.
VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - CVIČENÍ Zbyněk Šlajchrt 1 Část 12.
VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - CVIČENÍ Zbyněk Šlajchrt Část 7.
VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - PŘEDNÁŠKA Zbyněk Šlajchrt Část 3.
MASSIV Middleware pro tvorbu online her. Obsah prezentace Úvod Prostřeky poskytované Massivem Využití jádra Massivu v Demu Zhodnocení projektu Prezentace.
1 Martin Vojnar Bibliografie jako nezbytná součást jednotného vyhledávaní SNK v Martine, 7. listopadu 2011.
Business Activity Monitoring Jiří Kolář. Pojmy a zkratky ● SOA ● Servis Oriented Architecture ● BPMS ● Business Process Management System ● BAM ● Business.
Internet. je celosvětový systém navzájem propojených počítačových sítí („síť sítí“), ve kterých mezi sebou počítače komunikují pomocí rodiny protokolů.
© 2016 InterSystems Corporation. All rights reserved. Integrace OAuth 2.0 a OpenID Connect.
VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - CVIČENÍ Zbyněk Šlajchrt Část 5.
Praha & EU: Investujeme do vaší budoucnosti Evropský sociální fond Gymnázium, Praha 10, Voděradská 2 Projekt OBZORY MVC vs MVP.
NÁZEV ŠKOLY:SOŠ Net Office, spol. s r.o. Orlová Lutyně
as4u advanced system for you
Redakční systém s integrací webových služeb
VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - PŘEDNÁŠKA
Application Layer Functionality and Protocols
C# přehled vlastností.
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r. o
Dfdfdf.
Transkript prezentace:

VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - PŘEDNÁŠKA Zbyněk Šlajchrt http://java.vse.cz/4it447/HomePage Část 12.

CDI (WebBeans) Oficiální název Contexts And Dependency Injection Navrženo pro usnadnění provázání komponent z prezentační a aplikační vrstvy Tvůrci zamýšleli primárně použití v JSF CDI však není omezeno pouze na JSF Charakteristika Slabé vazby (loose coupling) "Stavově" orientované Typově bezpečné Flexibilní

CDI - Specifikace Specifikace JSR-299 Související specifikace Dependency Injection for Java, JSR-330 Managed Beans jako součást Java EE 6, JSR-316 Inspirace: Guice, Seam

Motivační příklad Nikdo není přihlášen: Uživatel je přihlášen:

Motivační příklad - schéma

Motivační příklad – JSP stránka V EL výrazech pracuji s instancí Login Nechci se starat o to, kde je tato instance uložena (scope) Nechce se mi ani deklarovat proměnnou login přes <jsp:useBean>

Motivační příklad - kontroler Nechci se obtěžovat s vytvářením instance Login Ani ukládáním instance do atributu odpovídajícího scope (setAttribute) Chci ji pouze používat, tj. volat její metody a nastavovat vlastnosti Nechť mi kontejner vstříkne do atributu odkaz na připravenou instanci

Motivační příklad – Managed bean Deklaruji, že bean Login je určen do HTTP session - @SessionScoped a že v EL výrazech se lze na něj odkazovat jménem "login". Zajistí @Named("login") Potřebuji pracovat s DB, ať mi tedy kontejner vstříkne EM. Jelikož v aplikaci může být více jednotek, upřesním ji vlastní anotací (tzv. kvalifikátorem) @Users

Motivační příklad: Prostředky Místo specifikace názvu JPA jednotky použiji kvalifikátor @Users Odstiňuje mne od detailů JPA konfigurace Mohu tak snadno použít různé JPA jednotky pro vývoj a produkci Prostředky používané v aplikaci deklaruji ve speciální komponentě @Produces indikuje, že prostředek je nabízen k použití všude, kde se vyžaduje EntityManager s kvalifikátorem @Users

Motivační příklad: Odeslání mailu Přihlášený uživatel může odesílat zprávy

Příklad: Upravené schéma

Příklad: Upravená JSP stránka

Příklad: Upravený kontroler Odesílání má na starosti bean Email Nechám si tedy vstříknout jeho instanci do atributu email a nestarám se o jeho životní cyklus

Příklad: Sdílení aktuálního uživatele Email bean potřebuje znát aktuálně přihlášeného uživatele, v jehož jménu odesílá zprávu. V Login beanu vytvořím produkční metodu getCurrentUser, která zveřejňuje aktuálního uživatele. Kvalifikátor @LoggedIn umožní propojení produkční a konzumentské strany.

Motivační příklad: Email bean Email bean odesílá mail ve jménu přihlášeného uživatele Nechám si vstříknout přihlášeného uživatele (kvalifikátor @LoggedIn) Pokud by nebyl nikdo přihlášen, tak se vyhazuje aplikační výjimka NotLoggedException a nikoliv NullPointerException, jak by se očekávalo. (Viz produkční metoda Login::getCurrentUser()) Potřebuji pracovat s prostředkem Java Mail Session. Zajistí kontejner. Ulehčím mu úkol upřesněním závislosti vlastním kvalifikátorem @MailSession

Příklad: Úprava beanu s prostředky Vytvořím nový atribut mailSession, do kterého kontejner nastaví odkaz na prostředek mail/myMailSession definovaný v JNDI (ENC) @Produces anotace zajistí jeho sdílení @MailSession kvalifikátor jej zpřístupní všem, kteří jej uvádí spolu s @Inject.

Souhrnný přehled vlastností CDI poskytuje dvě základní služby Kontexty Životní cyklus stavových komponent je svázán se s životním cyklem kontextu, do kterého patří. Dependency Injection Typově bezpečná injektáž komponent Možnost volby implementace injektované komponenty při nasazování aplikace Postaveno na anotacích (vlastních a vestavěných)

Další služby CDI Integrace s EL – možnost přímého použití komponent v JSP a JSF Schopnost dekorovat injektované komponenty Interceptory Událostmi řízené programování Konverzační scope jako doplněk k request, session a application scope SPI (Service Provider Interface) pro integraci dalších frameworků do prostředí Java EE 6

Slabé vazby Odděluje server a klienta pomocí rozhraní a tzv. kvalifikátorů. Serverová část se tak může měnit. Odděluje životní cykly jednotlivých komponent zařazením komponent do kontextů, jejich životní cyklus ke řízen automaticky Událostní programovací model odděluje konzumenty zpráv od jejich zdrojů Využití interceptorů napomáhá k vzájemnému odstínění komponent

Beans – redefinice pojmu Zdroj (továrna) kontextuálních objektů, jejich životní cyklus je řízen kontejnerem podle životního cyklu kontextu Bean nabízí jeden nebo více typů instancí S beanem jsou asociovány kvalifikátory S beanem je asociován scope (popisovač kontextu) Lze nastavit EL jméno Bean obsahuje implementaci

Bean, kontext, instance Context1 (of Scope1) IB1 creates B1 Scope1

Bean, kontext, instance Context1 (of Scope1) IB1 creates B1 creates Context2 (Scope1) Scope1 IB1

Typ beanu Typ instancí poskytovaných beanem Může být rozhraní, konkrétní i abstraktní třída generický typ pole primitivní typ

Managed Beans Bean, který je implementován Java třídou jsou i jiné způsoby implementace (rozšíření) Pravidla pro třídu managed beanu Není nestatická vnitřní třída Konkrétní třída, nebo anotovaná @Decorator Není anotovaná anotací EJB komponenty ani není deklarován jako EJB v ejb-jar.xml Má příslušný konstruktor bez parametrů s parametry a anotovaný @Inject

Beany jako injektovatelné objekty CDI umožňuje injektovat různorodější typy, než v původním Java EE 5 Umožňuje injektáž do objektů, které nejsou spravované kontejnerem Typy objektů, které mohou být injektovány (Skoro) všechny Java třídy Session Beans Java EE prostředky (JMS, Java Mail, JDBC atd.) PersistenceContext Produkční atributy a objekty vracené produkčními metodami Webové služby Vzdálená EJB rozhraní

Extra-jednoduchý managed bean patří do Dependent scope na bean se nelze odkazovat z EL

Kvalifikátory Použitím kvalifikátorů lze připravit více implementací jednoho typu Kvalifikátor je anotace definovaná jako @Target({METHOD, FIELD, PARAMETER, TYPE}) @Retention(RUNTIME) Touto anotací se anotuje třída managed beanu Používá se na straně konzumenta spolu s anotací @Inject

Kvalifikátory - příklad @Default je vestavěný kvalifikátor označující default implementaci.

Injektáž beanů Na straně konzumenta se požadavek na injektáž beanu vyjadřuje anotací @Inject Lze jí použít na atributu metodě konstruktoru Anotace @Inject se často doprovází kvalifikátory, které upřesňují požadavek na injektovaný bean

Injektáž - příklady

Scopes Životní cyklus beanu je určen tzv. scope Každý bean má přiřazen právě jeden scope Lze vytvářet vlastní Vestavěné scopes Scope Annotation Duration Request scope @RequestScoped Po dobu trvání HTTP dotazu. Session scope @SessionScoped Po dobu trvání HTTP session. Application scope @ApplicationScoped Po dobu běhu aplikace. Dependent scope @Dependent Životní cyklus odpovídá životnímu cyklu konzumujícího beanu. Conversation scope @ConversationScoped Po dobu trvání 'konverzace' v JSF aplikaci.

Pojmenování beanu pro EL Aby bylo možné se na bean odkazovat z EL, je zapotřebí jej pojmenovat Anotace @Named se umístí na třídu beanu Pokud se nezadá jeho hodnota, EL název beanu odpovídá názvu beanu s malým písmenem na začátku. Nestandardní název lze zadat v atributu value @Named("mailer")

Použití beanu v JSP Na bean se lze odkazovat z EL výrazu uvedením jeho jména ${login.currentUser.username} login je jméno beanu Login

Použití beanu ve facelet Typické použití je ve formuláři Gettery beanu se použijí pro výpis statického textu Settery se použijí k nastavení hodnot z formuláře Akce formuláře se nasměruje na jednu z metod beanu

Použití ve facelet: příklad @Model je tzv. stereotyp, neboli pojmenovaná skupina anotací. @Model obsahuje @RequestScoped a @Named

Produkční metody Produkční metody umožňují injektovat objekty, které nejsou beany mění se za běhu vyžadují speciální inicializaci Tyto metody se anotují @Produces spolu s upřesňujícími kvalifikátory

Produkční metody: příklad

Další features ... Interceptory Dekorátory Události Alternativy podobné interceptorům v EJB3 Dekorátory jako interceptory, ale obalují konkrétní třídu Události lze posílat notifikace o událostech posluchačům Alternativy konfigurace alternativních implementací beanů

Poznámky Aplikace musí vždy obsahovat beans.xml v adresáři WEB-INF

Zdroje Goncalves, Antonio; Beginning Java EE 6 Platform With GlassFish 3; APRESS http://java.sun.com/javaee/6/docs/tutorial JSR-299: Contexts and Dependency Injection for the Java EE platform