J2EE - Servlets Java Server Pages,EJB - PowerPoint PPT Presentation

About This Presentation
Title:

J2EE - Servlets Java Server Pages,EJB

Description:

Lum r N vrat. katedra informatiky FEI V B-TUO A-1018 / 597 323 252 lumir.navrat_at_vsb.cz – PowerPoint PPT presentation

Number of Views:86
Avg rating:3.0/5.0
Slides: 82
Provided by: Lum82
Category:

less

Transcript and Presenter's Notes

Title: J2EE - Servlets Java Server Pages,EJB


1
J2EE - ServletsJava Server Pages,EJB
  • Lumír Návrat.katedra informatiky FEI VŠB-TUO
  • A-1018 / 597 323 252
  • lumir.navrat_at_vsb.cz

2
Obsah
  • Architektura Java EE
  • Struktura webové aplikace
  • Java Servlets
  • Java Server Pages
  • Použití JavaBeans
  • Uživatelské znacky
  • Knihovny znacek (JSTL)
  • JDBC
  • Enterprise JavaBeans

3
Architektura Java EE
4
Soucásti Java EE
  • Servlets JSP webové komponenty a UI
  • JDBC práce s databázemi
  • EJB distribuované komponenty
  • JAXP práce s XML, zasílání zpráv
  • JNDI jmenné a adresárové služby
  • RMI volání vzdálených metod
  • JavaIDL distribuované objekty CORBA
  • JMS asynchronní zpracování zpráv
  • JavaMail zasílání zpráv e-mailem
  • JTA distribuované transakce
  • JCA pripojení k jiným systémum (napr. SAP)
  • JPA - Java Persistent Api (novinka v Java 5 EE)

5
Architektura Java EE
6
Struktura webové aplikace
http//www.lib.com/catalog
  • Servlety
  • .class
  • Statický obsah
  • .html, .jpg, .gif,
  • JSP
  • .jsp
  • Knihovny tríd
  • .jar

WEB-INF
classes
lib
jsp
web.xml
images

index.jsp
http//www.lib.com/catalog/WEB-INF/...
7
Konfiguracní soubor web.xml
  • Základní konfigurace webové aplikace
  • Definuje
  • Servlety, filtry
  • Zabezpecení adresáru a metody prístupu k aplikaci
  • Reference na JNDI zdroje

8
Java Servlets
  • Standardní metoda rozširování webových serveru o
    dynamické generování obsahu
  • Základní rozhraní pro aplikace s tenkým klientem
    (webový prohlížec)

WebBrowser
Java Servlet Container
Servlet
Servlet
9
Výhody servletu
  • Perzistence mezi voláními rychlejší odezva na
    požadavky, sdílení dat
  • CGI opakované zavádení
  • Prístup k celému Java API
  • JDBC databáze
  • JAXP práce s XML
  • JNDI adresárové služby

10
Servletový kontejner
  • Zajištuje beh servletu
  • JVM
  • Správa sezení
  • Udržování kontextu
  • Konfiguracní informace
  • Perzistence
  • Ruzní dodavatelé standardizace
  • Java Servlet API 2.5 (aktuální revize)

11
Typy servletových kontejneru
  • Rozšírení WWW serveru
  • Apache/JServ
  • S vestaveným WWW serverem
  • Jetty (Mortbay.com)
  • Apache Tomcat referencní implementace
  • Samostatné aplikacní servery
  • Sun Application Server / Glassfish
  • JBoss
  • WebSphere (IBM)

12
Java Servlet API
GenericServlet servletInfoinit()servic
e(request, response)destroy()
ServletConfig servletName getInitParameter(n)
servletConfig
1
1

servletContext
1
ServletContext attribute(n) getInitParameter(
n)
HttpServlet lastModifieddoGet()doPost(
)
javax.servlet.javax.servlet.http.
13
Reprezentace požadavku
ServletRequest remoteHost, parameter(name) r
eader
http//www.lib.com/catalog - context path
HttpServletRequest contextPathheader(name)cook
ies
HttpSession attribute(n) removeAttribute(n)
invalidate()
session

1
14
Reprezentace odpovedi
ServletResponse contentTypewriteroutputStream
HttpServletResponse header(name)addCookie(cooki
e)addHeader(name, value)sendError(sc, msg)
15
lt?xml version"1.0" encoding"UTF-8"?gt ltweb-app
version"2.4" xmlns"http//java.sun.com/xml/ns/j2
ee" xmlnsxsi"http//www.w3.org/2001/XMLSchema-in
stance" xsischemaLocation"http//java.sun.com/xm
l/ns/j2ee http//java.sun.com/xml/ns/j2ee/we
b-app_2_4.xsd"gt ltdisplay-namegtCvicení
2lt/display-namegt ltdescriptiongtPríklady pro
cvicení 2 - servlety a JSP.lt/descriptiongt
ltfiltergt ltfilter-namegtencodinglt/filter-namegt
ltfilter-classgtcviceni2.RequestEncodingFilte
rlt/filter-classgt ltinit-paramgt
ltparam-namegtencodinglt/param-namegtltparam-valuegtUTF-
8lt/param-valuegt lt/init-paramgt lt/filtergt
ltservletgt ltservlet-namegtukol1lt/servlet-namegt
ltservlet-classgtctc.Ukol1Servletlt/servlet-classgt
lt/servletgt ltservlet-mappinggt
ltservlet-namegtukol1lt/servlet-namegtlturl-patterngt/he
llolt/url-patterngt lt/servlet-mappinggt
ltfilter-mappinggt ltfilter-namegtencodinglt/filt
er-namegtlturl-patterngt/lt/url-patterngt
lt/filter-mappinggt lt/web-appgt
16
Úkol 1 - Vytvorení Servletu
  • Vytvorte novou webovou aplikaci
  • V rámci této webové aplikace vytvorte servlet,
    který bude zobrazovat HTML text

17
Java Server Pages
  • Oddelení prezentace od aplikacní logiky
  • Zjednodušení realizace stránek
  • Servlety na všechno
  • Statický obsah HTML servlety pro akce
  • Dynamický obsah v rámci statického
  • Možnost editace HTML editory
  • Kompilace na Java servlet
  • Pri prvním požadavku, kontrolují se zmeny

18
Prvky JSP
  • Direktivy
  • lt_at_ page contentTypetext/html gt
  • Vložený úsek programu (skriplet)
  • lt out.println(x x) gt
  • Výraz
  • x lt x gt
  • Statický kód
  • lt! public String sayHello() gt
  • Poznámka
  • lt-- Tento kód se neprovede a nezobrazí ani v
    HTML stránce --gt
  • Vestavené znacky akcí
  • ltjspinclude page/headers/header.jsp /gt
  • Uživatelem definované znacky
  • ltmyDate /gt
  • lt _at_ taglib urihttp//lib.com/tags prefixmy gt

19
Príklad 1
  • lt_at_ page contentTypetext/html charsetUTF-8
    gt
  • lt_at_ page importjava.util. gt
  • lthtmlgt
  • ltheadgt
  • lttitlegtPrvní pokuslt/titlegt
  • lt/headgt
  • ltbodygt
  • lth1gtVítejte na mé stráncelt/h1gt
  • ltpgtDnešní datum je lt new Date().toString()
    gtlt/pgt
  • lt/bodygt

20
Príklad 2
  • lt_at_ page contentType"application/vnd.ms-excel"
    gt
  • lt
  • out.println("x\tx2")
  • for(int i 1 i lt 10 i)
  • out.println(I "\t (i i))
  • gt

21
Príklad 3
  • lt    
  • Iterator i cart.getItems().iterator()
  • while (i.hasNext())
  • ShoppingCartItem item (ShoppingCartItem)i.
    next()
  •      BookDetails bd (BookDetails)item.getItem()
  • gt
  •  lttrgt
  •      lttd align"right bgcolor"ffffff"gt
  •       ltitem.getQuantity() gt
  •      lt/tdgtlttd bgcolor"ffffaa"gt
  •       ltstronggtlta href"ltrequest.getContextPath
    ()gt
  • /bookdetails?bookIdbd.getBookId
    ()"gt
  • bd.getTitle()lt/agtlt/stronggt
  •     lt/tdgt
  •      ...
  • lt
  •    // End of while
  •    
  • gt

22
Úkol 2
  • Vytvorte JSP stránku, která bude vypisovat
    tabulku s druhými mocninami císel do 10. Použijte
    nejen scriplet, ale rovnež výraz.

23
Preddefinované promenné
  • HttpServletRequest request
  • lt request.getRemoteHost() gt
  • HttpServletResponse response
  • HttpSession session
  • PrintWriter out
  • ServlerContext application
  • ServletConfig config
  • PageContext pageContext
  • page ( this)

24
Komponenty Java Beans - opakování
  • Konstruktor
  • public StringBean()
  • Vlastnosti (properties)
  • private String msg Nic
  • public String getMsg() return msg
  • public void setMsg(String m) msgm
  • Metody
  • public void clear() msg Nic
  • Události (events)

25
Príklad
  • package ctc
  • import java.util.Hashtable
  • import java.util.Collection
  • public class SeznamUzivatelu
  • private Hashtable tabulka new Hashtable()
  • public void uloz(Uzivatel u)
  • tabulka.put(u.getLogin(), u)
  • public Uzivatel hledej(String login)
  • return (Uzivatel)tabulka.get(login)
  • public Collection getSeznam() return
    tabulka.values()

26
Použití JavaBeans v JSP
  • Zavedení komponenty
  • ltjspuseBean idsb classStringBean /gt
  • Prístup k vlastnostem
  • ltjspgetProperty namesb propertymsg /gt
  • Nastavení vlastnosti
  • ltjspsetProperty namesb propertymsg
    valueAhoj /gt
  • ltjspsetProperty namesb propertymsg
    parammessage /gt
  • ltjspsetProperty namesb property /gt

27
Sdílení komponent
  • ltjspuseBean id class scope/gt
  • scopepage (implic. hodnota)
  • v objektu PageContext
  • viditelná pouze v rámci stránky
  • scoperequest
  • v objektu ServletRequest
  • viditelná v rámci požadavku (požadavek muže být
    zpracován více stránkami!)
  • scopesession
  • v objektu HttpSession
  • sdílená mezi ruznými požadavky v rámci sezení
    jednoho uživatele
  • scopeapplication
  • v objektu ServletContext
  • sdílí se všemi servlety ve stejné aplikaci

28
Úkol 3
  • Upravte predchozí JSP tak, že budete z jiného
    souboru predávat hodnotu parametru který bude
    urcovat maximální hodnotu pro kterou se budou
    druhé mocniny pocítat

29
Uživatelské znacky
  • Trída obslužného programu (handler)
  • rozhraní javax.servlet.jsp.tagext.Tag
  • metody doStartTag(), doEndTag(), od J2EE 1.3
  • metoda doTag() od J2EE 1.4
  • Deskriptor knihovny znacek
  • soubor xxx.tld ve formátu XML
  • Soubor JSP používající znacky
  • lt_at_ taglib urixxx.tld prefixxxxgt
  • ltxxxznacka paramgt lt/xxxznackagt

30
Príklad DatumTag.java
  • package ctc.tags
  • import javax.servlet.jsp.
  • import javax.servlet.jsp.tagext.
  • public class DatumTag extends SimpleTagSupport
  • public int doTag()
  • JspWriter outgetJspContext().getOut()
  • try
  • //kód pred telem
  • JspFragment fgetJspBody()
  • if (f ! null) f.invoke(out)
  • //kód za telem
  • catch( java.io.IOException e )
  • return SKIP_BODY

31
Príklad tis-taglib.tld
  • lt?xml version"1.0" encodingiso-8859-2 ?gt
  • lttaglib xmlns"http//java.sun.com/xml/ns/j2ee"
    xmlnsxsi"http//www.w3.org/2001/XMLSchema-insta
    nce" xsischemaLocation"http//java.sun.com/xm
    l/ns/j2ee http//java.sun.com/xml/ns/j2ee/web-jspt
    aglibrary_2_0.xsd" version"2.0"gt
  • lttlibversiongt1.0lt/tlibversiongt
  • ltshortnamegttislt/shortnamegt
  • lturigt/ctc/datumlt/urigt
  • ltinfogtKnihovna znacek pro CTClt/infogt
  • ltnamegtDatumTaglt/namegt
  • lttag-classgtctc.tags.DatumTaglt/tag-classgt
  • ltbody-contentgtemptylt/body-contentgt
  • ltattributegt
  • ltnamegtformatlt/namegt
  • lttypegtjava.lang.Stringlt/typegt
  • lt/attributegt
  • lt/taggtlt/taglibgt

32
Príklad tags.jsp
  • lt_at_ taglib uri"/WEB-INF/tis-taglib.tld"
    prefixtis" gt
  • Dnes je lttisdatum/gt

33
Úkol 4
  • Vytvorte stránku, ve které budete ukládat do
    session jméno uživatele, které zadá do formuláre.
  • Následne vytvorte uživatelskou znacku, která bude
    toto jméno nacítat z této promenné a zobrazovat.
    Pokud nebude zadáno, tak vypíše místo toho
    nejakou náhradní hodnotu.

34
JSTL JavaServer Standard Tag Library
  • Core
  • výrazy ltcout value/gt
  • tok rízení ltcforEach var
    items"gtlt/cforEachgt
  • práce s URL ltcurl var value/gt
  • XML
  • analýza ltxparse /gt
  • transformace ltxtransform xslt xml/gt
  • I18n (Internationalization)
  • formátování textu ltfmtmessage
    key/gt
  • formátování císel a data/casu ltfmtformatDate /gt
  • Database
  • volba zdroje dat ltsqlsetDataSource
    dataSource/gt
  • SQL dotazy a transakce ltsqlquery
    vargtlt/sqlquerygt
  • Function (prefix fn)
  • velikost kolekce, manipulace s retezci
    fnlength(items)

35
Príklad
  • lt_at_ page contentType"text/html encodingUTF-8"
    gt
  • lt_at_ taglib uri"/WEB-INF/c.tld" prefix"c" gt
  • ltjspuseBean id"uzivatele" classctc.SeznamUziva
    telu" scope"session"gt
  • lt uzivatele.uloz(new Uzivatel("wal314",
    "Johnny", "Walker")) gt
  • lt/jspuseBeangt
  • lthtmlgt
  • ltbodygt
  • lth2gtSeznam uživatelult/h2gt
  • lttable border"1"gt
  • ltcforEach var"uziv" varStatus"st"
    items"uzivatele.seznam"gt
  • lttrgt
  • lttdgtltcout value"st.count"/gtlt/tdgt
  • lttdgtltcout value"uziv.login"/gtlt/tdgt
  • lttdgtuziv.jmeno"/gt ltcout value"uziv.prijme
    ni"/gtlt/tdgt
  • lt/trgt
  • lt/cforEachgt
  • lt/tablegt
  • lt/bodygt
  • lt/htmlgt

36
Úkol 5
  • V rámci JSP stránky implementujte logiku pro
    stránkování kolekce. Pro rešení použijte znacky
    JSTL.

37
Java Database ConnectivityJDBC
38
JDBC
  • rozhraní pro unifikovaný prístup k datum
  • použití i mimo databáze data ve forme tabulek
    (CSV, XLS, ...)
  • ovladace jsou k dispozici pro vetšinu
    databázových systému
  • inspirováno rozhraním ODBC
  • objektové rozhraní
  • možnost spolupráce s ODBC

39
Architektura JDBC
Aplikacní kód
JDBC API
java.sql.javax.sql.
Ovladac JDBC
DB API
Databáze
40
Architektura JDBC
ResultSet
ResultSet
ResultSet
PreparedStatement
CallableStatement
Statement
Connection
Aplikace
DriverManager
Oracle driver
JDBC-ODBC bridge
Sybase driver
ODBC driver
41
JDBC ovladac
  • zprostredkování komunikace aplikaces konkrétním
    typem databáze
  • implementován obvykle výrobcem databáze
  • dotazovací jazyk SQL
  • predá se databázi
  • ovladac vyhodnotí prímo
  • reprezentován specifickou trídou
  • sun.jdbc.odbc.JdbcOdbcDriver
  • org.gjt.mm.mysql.Driver

42
Typy JDBC ovladacu
  • Typ 1
  • využívá ODBC (pres JDBC-ODBC bridge)
  • obtížne konfigurovatelné
  • Typ 2
  • komunikace s nativním ovladacem
  • Typ 3
  • komunikuje s centrálním serverem (Network Server)
    sítovým protokolem
  • pro rozsáhlé heterogenní systémy
  • Typ 4
  • založen ciste na jazyce Java
  • prímý prístup do databáze

43
Registrace ovladace
  • konkrétní ovladac je pevne spojen s aplikací
  • new com.mysql.Driver()
  • výber ovladace za behu aplikace
  • String driverName com.mysql.Driver
  • try
  • Class.forName(driverName)
  • catch( ClassNotFoundException e)
  • // obsluha výjimky

44
Identifikace spojení
  • jdbcdriverdatabase
  • jdbcodbcdatasourceAttrValue
  • Príklad
  • jdbcmysql//localhost/dais3?userdais3password
    dais3useUnicodetruecharacterEncodingiso-885
    9-2

45
Pripojení k databázi
  • Connection con DriverManager.getConnection(
  • url, uživatel, heslo)
  • DriverManager se dotáže všech registrovaných
    ovladacu
  • Rozpozná-li ovladac své url, vrátí objekt
    Connection

46
Objekt Statement
  • Reprezentuje SQL príkaz
  • Statement
  • PreparedStatement
  • CallableStatement
  • Vytvorení instance príkazu
  • Statement stmt con.createStatement()
  • Provedení príkazu
  • ResultSet rs stmt.executeQuery(
    SELECT FROM t)
  • int num stmt.executeUpdate(
    DELETE FROM t)

47
Objekt ResultSet
  • Reprezentuje výsledek dotazu SELECT
  • Statement stmt con.createStatement()
  • ResultSet rs stmt.executeQuery(
  • SELECT FROM uzivatel)
  • while( rs.next() )
  • String login rs.getString(login)
  • String jmeno rs.getString(jmeno)
  • rs.close()
  • stmt.close()

48
Ošetrení chyb
  • public class SQLException extends Exception
  • try
  • catch( SQLException e)
  • while( e ! null )
  • System.out.println(e.getMessage())
  • System.out.println(e.getSQLState())
  • System.out.println(e.getErrorCode())
  • e e.getNextException()

49
Parametrizované príkazy
  • Možnost predkompilace opakované provedení
    príkazu
  • Parametry
  • oznacené znakem ?
  • indexované od 1
  • INSERT INTO uzivatel(login,jmeno)VALUES(?, ?)

50
Parametrizované príkazy
  • PreparedStatement pstmt con.prepareStatement(
  • INSERT VALUES(?,?))
  • pstmt.clearParameters()
  • pstmt.setString(1, wal007)
  • pstmt.setNull(2, Types.VARCHAR)

51
Transakce
  • try
  • con.setAutoCommit(false)
  • stmt.executeUpdate()
  • con.commit()
  • catch( SQLException e )
  • con.rollback()

52
Príklad
  • import java.sql.
  • import java.io.
  • public class TestJDBC
  • public static final void main(String args)
    throws Exception
  • new com.mysql.Driver()
  • String url "jdbcmysql//win456.vsb.cz/tis?u
    seUnicodetruecharacterEncodingUTF-8"
  • Connection con DriverManager.getConnection(
    url, ctc", ctc")
  • Statement stmt con.createStatement()
  • ResultSet rs stmt.executeQuery("SELECT
    FROM menu ORDER BY id")
  • while( rs.next() )
  • System.out.print(rs.getInt(1))
  • System.out.print(" ")
  • System.out.println(rs.getString(2))
  • rs.close()
  • stmt.close()

53
Príklad 2
  • psmt con.prepareStatement("insert into osoby
    (login,jmeno,prijmeni) values(?,?,?)")
  • psmt.setString(1,args0)
  • psmt.setString(2,args1)
  • psmt.setString(3,args2)
  • if (psmt.executeUpdate() 0)
  • throw new Exception("Nepodarilo se
    vlozit zaznam")
  • else
  • System.out.println("Vlozen zaznam"
    args0 "" args1 "" args2)
  • psmt.close()
  • con.close()

54
Úkol 6
  • Vytvorte jednoduchou aplikaci, která bude mít
    následující funkcnost
  • Zobrazí stránku s obsahem tabulky menu
  • Budete mít možnost do této tabulky vkládat
    záznamy, a upravovat je a mazat. Tyto operace
    budete provádet pomocí servletu.

55
TechnologieEnterprise Java Beans
56
Obsah prednášky
  • Popis technologie EJB
  • J2EE aplikace
  • Typy komponent
  • Entity Beans
  • Session Beans
  • Message-Driven Beans
  • Java Messaging Service (JMS)
  • Záver

57
Enterprise Java Beans (EJB)
  • Specifikace architektury pro vývoj a nasazení
    distribuovaných transakcních objektových
    komponent na strane serveru
  • Konvence sada rozhraní (EJB API)
  • Cíl zajištení kompatibility mezi produkty
    ruzných výrobcu
  • komponenty
  • kontejner

58
EJB kontejner
  • prostredí, v nemž beží komponenty
  • vzdálený prístup
  • bezpecnost
  • transakce
  • soubežný prístup
  • prístup ke zdrojum a jejich sdílení
  • izolace komponent od aplikací
  • nezávislost na dodavateli kontejneru
  • zjednodušení tvorby aplikací

59
EJB kontejner
klient
požadavek
transakce perzistence bezpecnost
EJBContext, JNDI ENC
Bean
callback metody
Zdroj www.jguru.com
60
Aplikacní komponenty v J2EE
  • Klienti aplikace
  • samostatné programy s vlastním uživatelským
    rozhraním
  • Aplety
  • vizuální komponenty spouštené obvykle v prostredí
    webového prohlížece
  • Webové komponenty
  • servlety, stránky JSP, filtry, ...
  • beží obvykle v prostredí webového serveru
  • Komponenty EJB
  • aplikacní (business) logika

61
Aplikacní komponenty v J2EE
Databáze
datová vrstva
aplikacní logika
EJB kontejner
EJB
prezentacní logika
Webový kontejner
servlet
EJB
Webový prohlížec
Kontejner klienta
Klient
Aplet
prezentace
Webový prohlížec
HTML stránka
Zdroj ZN
62
Struktura aplikace J2EE
  • J2EE modul
  • základní stavební jednotka
  • popsán deskriptorem (Deployment Descriptor)
  • reprezentován souborem .jar, .war, .rar
  • EJB modul, webový modul, modul klienta aplikace,
    modul pro adaptéry
  • J2EE aplikace
  • deskriptor aplikace /META-INF/application.xml
  • soubor .ear

63
Role pri vývoji EJB aplikací
  • Tvurce komponent EJB
  • príprava komponent a deskriptoru
  • duraz na znovupoužitelnost
  • Sestavitel aplikace
  • skládá komponenty do vetších celku
  • Odborník na nasazení
  • nasazení komponent do konkrétního prostredí
  • konfigurace, príprava zdroju, bezpecnostní
    politika

64
Role pri vývoji EJB aplikací
  • Dodavatel EJB serveru
  • operacní systém (Sun, IBM, HP)
  • middleware technologie (Borland, IONA)
  • databázový systém (Oracle, Sybase)
  • Dodavatel EJB kontejneru
  • nástroje pro nasazení EJB komponent
  • vlastní behové prostredí pro instance EJB
  • Administrátor systému
  • konfigurace a administrace infrastruktury
  • dohled za behu aplikace

65
Vlastnosti komponent EJB
  • obsahují aplikacní logiku
  • instance se vytvárí a spravuje kontejnerem
  • možnost prizpusobení zmenou DD
  • nastavení atributu oddeleno od implementace
  • prenositelnost beanu mezi kontejnery
  • možnost práce s beanem bez nutnosti úpravy
    zdrojového kódu nebo rekompilace

66
Typy komponent EJB
  • Session Beans
  • bezstavové služby
  • stavové objekty v rámci sezení
  • Entity Beans
  • perzistentní objekty spravované uživatelem (BMP)
  • perzistentní objekty spravované kontejnerem (CMP)
  • Message-Driven Beans
  • bezstavové služby volané asynchronne príchodem
    JMS zpráv

67
Typy klientu
  • Lokální klient
  • v rámci stejného stroje JVM
  • prímý prístup ke komponente
  • efektivnejší prístup
  • Vzdálený klient
  • v jiném procesu než komponenta
  • využívá standardní Java RMI rozhraní
  • vyžaduje serializaci / deserializaci

68
Cíle EJB 3.0
  • EJB 2.1 je upovídané
  • Mnoho rozhraní na implementaci
  • XML peklo príliš mnoho velkých XML deployment
    deskriptoru
  • API je príliš rozvlácné
  • API je príliš složité
  • Zjednodušení EJB modelu
  • Zamereno na jednodušší proramování
  • Jednodušší pro prumerné programátory
  • Zvýšení základny vývojáru

69
Session Beans
  • zapouzdrení logiky do neperzistentních objektu
  • možnost odstranení instance (timeout, pád
    kontejneru, systémová výjimka)
  • možnost docasného uložení stavu
  • stavové (state) / bezstavové (stateless)
  • zachování stavu po dobu existence relace
  • nejsou urceny pro sdílení více klienty
  • serializace prístupu

70
Cíle EJB 3.0 u Session Beanu
  • Zrušení nepotrebných rozhraní
  • Zrušení nepotrebných posluchacu
  • Volitelné deployment descriptory.
  • Beany vycházejí z POJO objektu

71
Potrebné rozhraní
  • Není Homeless rozhraní
  • Metody nepoužívají vyjímky RemoteException
  • Žádné implementace rozhraní

_at_Remote public interface Calculator public int
add(int x, int y) public int subtract(int x, int
y) _at_Stateless public class CalculatorBean
implements Calculator public int add(int x, int
y) return x y public int subtract(int x,
int y) Return x y
72
Stateful Beans
  • Still homeless
  • Created as they are looked up
  • _at_Remove replaces EJBObject.remove
  • Stateful bean is removed after method called

_at_Remote public interface ShoppingCart public
void addItem(int prodId, int quantity) public
void checkout() _at_Stateful public class
ShoppingCartBean implements ShoppingCart
_at_Remove public void checkout()
73
EJB 3.0 Dependency Injection
  • Bean class specifies dependencies instead of
    lookup
  • Facilitates Test Driven Development
  • Possible to test EJBs outside of container

_at_Stateful public class ShoppingCartBean
implements ShoppingCart _at_Inject private
SessionContext ctx _at_EJB(nameCreditProcessorEJB
) private CreditCardProcessor processor private
DataSource jdbc _at_Resource(jndiNamejava/Defau
ltDS) public void setDataSource(DataSource db)
this.jdbc db
74
Entity Beans
  • Pohled na perzistentní entitu
  • obvykle v relacní databázi
  • Sdílený prístup více uživatelu
  • Perzistentní identita instance
  • primární klíc
  • prežívá i restart kontejneru
  • Zajištení správy perzistentního stavu
  • Container Managed Persistence (CMP)
  • Bean Managed Persistence (BMP)

75
Message-Driven Beans
  • Nove definovány specifikací EJB 2.0
  • Volají se asynchronne jako výsledek prijetí JMS
    zpráv
  • nemají rozhraní pro klienty
  • metoda onMessage(Message msg)
  • Neudržují si stav týkající se klienta
  • Všechny instance jsou ekvivalentní
  • príchozí požadavek muže zpracovat libovolná
    instance

76
MDBs
  • Just implements MessageListener
  • XML turns to annotations

_at_MessageDriven( activationConfigActivati
onConfigProperty(namedestination,
valuequeue/email)) public class EmailBean
implements MessageListener void
onMessage(Message msg) public int add(int x,
int y) return x y
77
Java Messaging Service (JMS)
  • Systém pro zasílání zpráv
  • Vlastnosti
  • minimální vazba komunikujících aplikací
  • asynchronnost
  • spolehlivost
  • Prvky architektury JMS
  • JMS poskytovatel soucást J2EE produktu
  • Klienti (JMS nebo nativní)
  • Zprávy
  • Administrované objekty destinations, connection
    factories

78
Zpusoby komunikace v JMS
  • Komunikace bod-bod (point-to-point)
  • fronty zpráv (queues)
  • zpráva adresována do jedné fronty
  • príjemce si vybírá zprávy z fronty
  • príjemce potvrzuje úspešné prijetí zprávy
  • Producent/predplatitel (publish/subscribe)
  • zpráva adresována nejakému cíli (topic)
  • distribuce zprávy všem predplatitelum

79
Vztahy mezi JMS objekty
Connection Factory
Cílový kanál
Queue Topic
QueueConnectionFactory TopicConnectionFactory
zasílá zprávy
prijímá zprávy
Message Producer
Message Consumer
vytvárí
QueueSender TopicPublisher
vytvárí
vytvárí
QueueReceiver TopicSubscriber
Connection
Session
QueueSession TopicSession
vytvárí
vytvárí
QueueConnection TopicConnection
Message TextMessage ...
Message
80
Záver
  • Duvody k nasazení J2EE
  • prenositelnost (74 )
  • otevrenost standardu (28 )
  • škálovatelnost (24 )
  • snadnost vývoje (22 )
  • výkon (16 )
  • Problémy nasazení J2EE
  • prekrocení plánované doby vývoje (22/50)
  • prekrocení rozpoctu na projekt (23/50)

81
Záver
  • Nejvetší problémy pri vývoji J2EE aplikací
  • nedostatecná zkušenost s podobnými projekty (24
    )
  • zmeny ve specifikaci (22 )
  • nezvládnuté rízení projektu vývoje (20 )
  • Spokojenost s volbou 92 zákazníku
  • Zdroj Forrester Research, cervenec 2001, ZN
Write a Comment
User Comments (0)
About PowerShow.com